From ded1309963732792b75d073441579dab43062e86 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 7 Oct 2022 19:55:08 +0200 Subject: [PATCH 001/210] feat: wip new api --- src/graphql.ts | 27 +-- src/handlers/GraphQLHandler.ts | 55 ++--- src/handlers/RequestHandler.ts | 188 +++++++++--------- src/handlers/RestHandler.ts | 112 ++++++----- src/index.ts | 4 +- src/node/glossary.ts | 11 +- src/rest.ts | 22 +- src/setupWorker/glossary.ts | 14 +- .../start/createRequestListener.ts | 71 +++---- .../start/utils/createMessageChannel.ts | 2 +- src/sharedOptions.ts | 11 +- src/utils/getResponse.ts | 26 +-- src/utils/handleRequest.ts | 28 ++- src/utils/internal/parseGraphQLRequest.ts | 35 ++-- src/utils/logging/prepareRequest.ts | 13 +- src/utils/request/getPublicUrlFromRequest.ts | 15 +- src/utils/request/onUnhandledRequest.ts | 21 +- src/utils/request/parseWorkerRequest.ts | 18 +- src/utils/request/readResponseCookies.ts | 8 +- test/rest-api/basic.mocks.ts | 15 +- 20 files changed, 323 insertions(+), 373 deletions(-) diff --git a/src/graphql.ts b/src/graphql.ts index 7f971bdf6..a0a26626e 100644 --- a/src/graphql.ts +++ b/src/graphql.ts @@ -3,7 +3,6 @@ import { ResponseResolver } from './handlers/RequestHandler' import { GraphQLHandler, GraphQLContext, - GraphQLRequest, GraphQLVariables, ExpectedOperationTypeNode, GraphQLHandlerNameSelector, @@ -31,36 +30,20 @@ function createScopedGraphQLHandler( | GraphQLHandlerNameSelector | DocumentNode | TypedDocumentNode, - resolver: ResponseResolver< - GraphQLRequest, - GraphQLContext - >, + resolver: ResponseResolver>, ) => { - return new GraphQLHandler>( - operationType, - operationName, - url, - resolver, - ) + return new GraphQLHandler(operationType, operationName, url, resolver) } } function createGraphQLOperationHandler(url: Path) { return < Query extends Record, - Variables extends GraphQLVariables = GraphQLVariables, + // Variables extends GraphQLVariables = GraphQLVariables, >( - resolver: ResponseResolver< - GraphQLRequest, - GraphQLContext - >, + resolver: ResponseResolver>, ) => { - return new GraphQLHandler>( - 'all', - new RegExp('.*'), - url, - resolver, - ) + return new GraphQLHandler('all', new RegExp('.*'), url, resolver) } } diff --git a/src/handlers/GraphQLHandler.ts b/src/handlers/GraphQLHandler.ts index 9dd1c09dc..c012b82b0 100644 --- a/src/handlers/GraphQLHandler.ts +++ b/src/handlers/GraphQLHandler.ts @@ -27,7 +27,6 @@ import { import { getPublicUrlFromRequest } from '../utils/request/getPublicUrlFromRequest' import { tryCatch } from '../utils/internal/tryCatch' import { devUtils } from '../utils/internal/devUtils' -import { MockedRequest } from '../utils/request/MockedRequest' export type ExpectedOperationTypeNode = OperationTypeNode | 'all' export type GraphQLHandlerNameSelector = DocumentNode | RegExp | string @@ -81,27 +80,24 @@ export function isDocumentNode( return typeof value === 'object' && 'kind' in value && 'definitions' in value } -export class GraphQLRequest< - Variables extends GraphQLVariables, -> extends MockedRequest> { - constructor(request: MockedRequest, public readonly variables: Variables) { - super(request.url, { - ...request, - /** - * TODO(https://github.com/mswjs/msw/issues/1318): Cleanup - */ - body: request['_body'], - }) - } -} - -export class GraphQLHandler< - Request extends GraphQLRequest = GraphQLRequest, -> extends RequestHandler< +// export class GraphQLRequest< +// Variables extends GraphQLVariables, +// > extends Request { +// constructor(request: Request, public readonly variables: Variables) { +// super(request.url, { +// ...request, +// /** +// * TODO(https://github.com/mswjs/msw/issues/1318): Cleanup +// */ +// body: request['_body'], +// }) +// } +// } + +export class GraphQLHandler extends RequestHandler< GraphQLHandlerInfo, - Request, - ParsedGraphQLRequest | null, - GraphQLRequest + // @ts-ignore @todo + ParsedGraphQLRequest > { private endpoint: Path @@ -109,7 +105,7 @@ export class GraphQLHandler< operationType: ExpectedOperationTypeNode, operationName: GraphQLHandlerNameSelector, endpoint: Path, - resolver: ResponseResolver, + resolver: ResponseResolver, any>, ) { let resolvedOperationName = operationName @@ -149,21 +145,14 @@ export class GraphQLHandler< this.endpoint = endpoint } - parse(request: MockedRequest) { + override async parse(request: Request) { return tryCatch( () => parseGraphQLRequest(request), (error) => console.error(error.message), ) } - protected getPublicRequest( - request: Request, - parsedResult: ParsedGraphQLRequest, - ): GraphQLRequest { - return new GraphQLRequest(request, parsedResult?.variables || {}) - } - - predicate(request: MockedRequest, parsedResult: ParsedGraphQLRequest) { + override predicate(request: Request, parsedResult: ParsedGraphQLRequest) { if (!parsedResult) { return false } @@ -178,7 +167,7 @@ Consider naming this operation or using "graphql.operation" request handler to i return false } - const hasMatchingUrl = matchRequestUrl(request.url, this.endpoint) + const hasMatchingUrl = matchRequestUrl(new URL(request.url), this.endpoint) const hasMatchingOperationType = this.info.operationType === 'all' || parsedResult.operationType === this.info.operationType @@ -195,7 +184,7 @@ Consider naming this operation or using "graphql.operation" request handler to i ) } - log( + override log( request: Request, response: SerializedResponse, parsedRequest: ParsedGraphQLRequest, diff --git a/src/handlers/RequestHandler.ts b/src/handlers/RequestHandler.ts index 3d0e5bd10..3a7f58cc1 100644 --- a/src/handlers/RequestHandler.ts +++ b/src/handlers/RequestHandler.ts @@ -1,19 +1,12 @@ -import { Headers } from 'headers-polyfill' -import { - MaybePromise, - MockedResponse, - response, - ResponseComposition, -} from '../response' +import { MaybePromise } from '../response' import { getCallFrame } from '../utils/internal/getCallFrame' import { isIterable } from '../utils/internal/isIterable' import { status } from '../context/status' import { set } from '../context/set' import { delay } from '../context/delay' import { fetch } from '../context/fetch' -import { ResponseResolutionContext } from '../utils/getResponse' -import { SerializedResponse } from '../setupWorker/glossary' -import { MockedRequest } from '../utils/request/MockedRequest' +import { type ResponseResolutionContext } from '../utils/getResponse' +import { type SerializedResponse } from '../setupWorker/glossary' export type DefaultContext = { status: typeof status @@ -31,7 +24,7 @@ export const defaultContext: DefaultContext = { export type DefaultRequestMultipartBody = Record< string, - string | File | (string | File)[] + string | File | Array > export type DefaultBodyType = @@ -51,34 +44,35 @@ export interface RequestHandlerInternalInfo { callFrame?: string } -type ContextMap = Record any> +type ContextMap = Record) => any> -export type ResponseResolverReturnType = - | ReturnType - | undefined - | void +export type ResponseResolverReturnType = Response | undefined | void -export type MaybeAsyncResponseResolverReturnType = MaybePromise< - ResponseResolverReturnType -> +export type MaybeAsyncResponseResolverReturnType = + MaybePromise -export type AsyncResponseResolverReturnType = - | MaybeAsyncResponseResolverReturnType +export type AsyncResponseResolverReturnType = + | MaybeAsyncResponseResolverReturnType | Generator< - MaybeAsyncResponseResolverReturnType, - MaybeAsyncResponseResolverReturnType, - MaybeAsyncResponseResolverReturnType + MaybeAsyncResponseResolverReturnType, + MaybeAsyncResponseResolverReturnType, + MaybeAsyncResponseResolverReturnType > +export type ResponseResolverInfo< + ContextType, + ResolverExtraInfo extends Record, +> = { + request: Request + ctx: ContextType +} & ResolverExtraInfo + export type ResponseResolver< - RequestType = MockedRequest, - ContextType = typeof defaultContext, - BodyType extends DefaultBodyType = any, + ContextType extends ContextMap = typeof defaultContext, + ResolverExtraInfo extends Record = Record, > = ( - req: RequestType, - res: ResponseComposition, - context: ContextType, -) => AsyncResponseResolverReturnType> + info: ResponseResolverInfo, +) => AsyncResponseResolverReturnType export interface RequestHandlerOptions { info: HandlerInfo @@ -86,31 +80,30 @@ export interface RequestHandlerOptions { ctx?: ContextMap } -export interface RequestHandlerExecutionResult { +export interface RequestHandlerExecutionResult { handler: RequestHandler - parsedResult: any - request: PublicRequestType - response?: MockedResponse + parsedResult: any | undefined + request: Request + response?: Response } export abstract class RequestHandler< HandlerInfo extends RequestHandlerDefaultInfo = RequestHandlerDefaultInfo, - Request extends MockedRequest = MockedRequest, - ParsedResult = any, - PublicRequest extends MockedRequest = Request, + ParsedResult extends Record | undefined = any, + ResolverExtras extends Record = any, > { public info: HandlerInfo & RequestHandlerInternalInfo public shouldSkip: boolean private ctx: ContextMap private resolverGenerator?: Generator< - MaybeAsyncResponseResolverReturnType, - MaybeAsyncResponseResolverReturnType, - MaybeAsyncResponseResolverReturnType + MaybeAsyncResponseResolverReturnType, + MaybeAsyncResponseResolverReturnType, + MaybeAsyncResponseResolverReturnType > - private resolverGeneratorResult?: MaybeAsyncResponseResolverReturnType + private resolverGeneratorResult?: MaybeAsyncResponseResolverReturnType - protected resolver: ResponseResolver + protected resolver: ResponseResolver constructor(options: RequestHandlerOptions) { this.shouldSkip = false @@ -129,7 +122,7 @@ export abstract class RequestHandler< * Determine if the captured request should be mocked. */ abstract predicate( - request: MockedRequest, + request: Request, parsedResult: ParsedResult, resolutionContext?: ResponseResolutionContext, ): boolean @@ -147,40 +140,36 @@ export abstract class RequestHandler< * Parse the captured request to extract additional information from it. * Parsed result is then exposed to other methods of this request handler. */ - parse( - _request: MockedRequest, + async parse( + _request: Request, _resolutionContext?: ResponseResolutionContext, - ): ParsedResult { - return null as any + ): Promise { + return {} as ParsedResult } /** * Test if this handler matches the given request. */ - public test( - request: MockedRequest, + public async test( + request: Request, resolutionContext?: ResponseResolutionContext, - ): boolean { + ): Promise { return this.predicate( request, - this.parse(request, resolutionContext), + await this.parse(request, resolutionContext), resolutionContext, ) } - /** - * Derive the publicly exposed request (`req`) instance of the response resolver - * from the captured request and its parsed result. - */ - protected getPublicRequest( - request: MockedRequest, - _parsedResult: ParsedResult, - ) { - return request as PublicRequest + public markAsSkipped(shouldSkip = true): void { + this.shouldSkip = shouldSkip } - public markAsSkipped(shouldSkip = true) { - this.shouldSkip = shouldSkip + protected extendInfo( + _request: Request, + _parsedResult: ParsedResult, + ): ResolverExtras { + return {} as ResolverExtras } /** @@ -188,49 +177,50 @@ export abstract class RequestHandler< * using the given resolver function. */ public async run( - request: MockedRequest, + request: Request, resolutionContext?: ResponseResolutionContext, - ): Promise | null> { + ): Promise { if (this.shouldSkip) { return null } - const parsedResult = this.parse(request, resolutionContext) - const shouldIntercept = this.predicate( + const parsedResult = await this.parse(request, resolutionContext) + const shouldInterceptRequest = this.predicate( request, parsedResult, resolutionContext, ) - if (!shouldIntercept) { + if (!shouldInterceptRequest) { return null } - const publicRequest = this.getPublicRequest(request, parsedResult) - // Create a response extraction wrapper around the resolver // since it can be both an async function and a generator. const executeResolver = this.wrapResolver(this.resolver) - const mockedResponse = await executeResolver( - publicRequest, - response, - this.ctx, - ) + + const resolverExtras = this.extendInfo(request, parsedResult) + const mockedResponse = await executeResolver({ + ...resolverExtras, + request, + ctx: this.ctx, + }) return this.createExecutionResult( + request, parsedResult, - publicRequest, - mockedResponse, + // @ts-ignore @todo + mockedResponse as any, ) } private wrapResolver( resolver: ResponseResolver, - ): ResponseResolver, any> { - return async (req, res, ctx) => { - const result = this.resolverGenerator || (await resolver(req, res, ctx)) + ): ResponseResolver { + return async (info): Promise => { + const result = this.resolverGenerator || (await resolver(info)) - if (isIterable>(result)) { + if (isIterable(result)) { const { value, done } = result[Symbol.iterator]().next() const nextResponse = await value @@ -253,15 +243,15 @@ export abstract class RequestHandler< } private createExecutionResult( + request: Request, parsedResult: ParsedResult, - request: PublicRequest, - response: any, - ): RequestHandlerExecutionResult { + response?: Response, + ): RequestHandlerExecutionResult { return { handler: this, - parsedResult: parsedResult || null, + parsedResult, request, - response: response || null, + response, } } } @@ -270,17 +260,19 @@ export abstract class RequestHandler< * Bypass this intercepted request. * This will make a call to the actual endpoint requested. */ -export function passthrough(): MockedResponse { - // Constructing a dummy "101 Continue" mocked response +export function passthrough(): Response { + // Constructing a "101 Continue" mocked response // to keep the return type of the resolver consistent. - return { - status: 101, - statusText: 'Continue', - headers: new Headers(), - body: null, - // Setting "passthrough" to true will signal the response pipeline - // to perform this intercepted request as-is. - passthrough: true, - once: false, - } + return new Response(null, { status: 101 }) + + // return { + // status: 101, + // statusText: 'Continue', + // headers: new Headers(), + // body: null, + // // Setting "passthrough" to true will signal the response pipeline + // // to perform this intercepted request as-is. + // passthrough: true, + // once: false, + // } } diff --git a/src/handlers/RestHandler.ts b/src/handlers/RestHandler.ts index 955e26039..a01ab0fc7 100644 --- a/src/handlers/RestHandler.ts +++ b/src/handlers/RestHandler.ts @@ -14,10 +14,8 @@ import { PathParams, } from '../utils/matching/matchRequestUrl' import { getPublicUrlFromRequest } from '../utils/request/getPublicUrlFromRequest' -import { MockedRequest } from '../utils/request/MockedRequest' import { cleanUrl, getSearchParams } from '../utils/url/cleanUrl' import { - DefaultBodyType, defaultContext, DefaultContext, RequestHandler, @@ -65,51 +63,51 @@ export type RequestQuery = { [queryName: string]: string } -export type ParsedRestRequest = Match +export type RestRequestParsedResult = { + match: Match + cookies: Record> +} -export class RestRequest< - RequestBody extends DefaultBodyType = DefaultBodyType, - RequestParams extends PathParams = PathParams, -> extends MockedRequest { - constructor( - request: MockedRequest, - public readonly params: RequestParams, - ) { - super(request.url, { - ...request, - /** - * @deprecated https://github.com/mswjs/msw/issues/1318 - * @note Use internal request body buffer as the body init - * because "request.body" is a getter that will trigger - * request body parsing at this step. - */ - body: request['_body'], - }) - this.id = request.id - } +export type RestRequestResolverExtras = { + params: Params + cookies: Record> } +// export class RestRequest< +// RequestBody extends DefaultBodyType = DefaultBodyType, +// RequestParams extends PathParams = PathParams, +// > extends Request { +// constructor( +// request: MockedRequest, +// public readonly params: RequestParams, +// ) { +// super(request.url, { +// ...request, +// /** +// * @deprecated https://github.com/mswjs/msw/issues/1318 +// * @note Use internal request body buffer as the body init +// * because "request.body" is a getter that will trigger +// * request body parsing at this step. +// */ +// body: request['_body'], +// }) +// this.id = request.id +// } +// } + /** * Request handler for REST API requests. * Provides request matching based on method and URL. */ -export class RestHandler< - RequestType extends MockedRequest = MockedRequest, -> extends RequestHandler< +export class RestHandler extends RequestHandler< RestHandlerInfo, - RequestType, - ParsedRestRequest, - RestRequest< - RequestType extends MockedRequest - ? RequestBodyType - : any, - PathParams - > + RestRequestParsedResult, + RestRequestResolverExtras > { constructor( method: RestHandlerMethod, path: Path, - resolver: ResponseResolver, + resolver: ResponseResolver>, ) { super({ info: { @@ -150,31 +148,45 @@ export class RestHandler< ) } - parse(request: RequestType, resolutionContext?: ResponseResolutionContext) { - return matchRequestUrl( - request.url, + override async parse( + request: Request, + resolutionContext?: ResponseResolutionContext, + ) { + const match = matchRequestUrl( + new URL(request.url), this.info.path, resolutionContext?.baseUrl, ) + + return { + match, + cookies: {}, + } } - protected getPublicRequest( - request: RequestType, - parsedResult: ParsedRestRequest, - ): RestRequest { - return new RestRequest(request, parsedResult.params || {}) + override predicate(request: Request, parsedResult: RestRequestParsedResult) { + const hasMatchingMethod = this.matchMethod(request.method) + const hasMatchingUrl = parsedResult.match.matches + return hasMatchingMethod && hasMatchingUrl } - predicate(request: RequestType, parsedResult: ParsedRestRequest) { - const matchesMethod = - this.info.method instanceof RegExp - ? this.info.method.test(request.method) - : isStringEqual(this.info.method, request.method) + private matchMethod(actualMethod: string): boolean { + return this.info.method instanceof RegExp + ? this.info.method.test(actualMethod) + : isStringEqual(this.info.method, actualMethod) + } - return matchesMethod && parsedResult.matches + protected override extendInfo( + request: Request, + parsedResult: RestRequestParsedResult, + ) { + return { + params: parsedResult.match?.params || {}, + cookies: {}, + } } - log(request: RequestType, response: SerializedResponse) { + override log(request: Request, response: SerializedResponse) { const publicUrl = getPublicUrlFromRequest(request) const loggedRequest = prepareRequest(request) const loggedResponse = prepareResponse(response) diff --git a/src/index.ts b/src/index.ts index b126e0f15..a0e264491 100644 --- a/src/index.ts +++ b/src/index.ts @@ -45,16 +45,14 @@ export type { } from './response' export type { - RestRequest, RestContext, RequestQuery, - ParsedRestRequest, + RestRequestParsedResult, } from './handlers/RestHandler' export type { GraphQLContext, GraphQLVariables, - GraphQLRequest, GraphQLRequestBody, GraphQLJsonRequestBody, } from './handlers/GraphQLHandler' diff --git a/src/node/glossary.ts b/src/node/glossary.ts index 876150943..1451e7051 100644 --- a/src/node/glossary.ts +++ b/src/node/glossary.ts @@ -1,7 +1,6 @@ import type { PartialDeep } from 'type-fest' import type { IsomorphicResponse } from '@mswjs/interceptors' import { - DefaultBodyType, RequestHandler, RequestHandlerDefaultInfo, } from '../handlers/RequestHandler' @@ -10,7 +9,6 @@ import { LifeCycleEventsMap, SharedOptions, } from '../sharedOptions' -import { MockedRequest } from '../utils/request/MockedRequest' export type ServerLifecycleEventsMap = LifeCycleEventsMap @@ -49,14 +47,7 @@ export interface SetupServerApi { * Returns a readonly list of currently active request handlers. * @see {@link https://mswjs.io/docs/api/setup-server/list-handlers `server.listHandlers()`} */ - listHandlers(): ReadonlyArray< - RequestHandler< - RequestHandlerDefaultInfo, - MockedRequest, - any, - MockedRequest - > - > + listHandlers(): ReadonlyArray> /** * Lists all active request handlers. diff --git a/src/rest.ts b/src/rest.ts index 47cc23076..3e330f55b 100644 --- a/src/rest.ts +++ b/src/rest.ts @@ -1,31 +1,21 @@ -import { DefaultBodyType, ResponseResolver } from './handlers/RequestHandler' +import { type ResponseResolver } from './handlers/RequestHandler' import { RESTMethods, - RestContext, + type RestContext, RestHandler, - RestRequest, + RestRequestResolverExtras, } from './handlers/RestHandler' -import { Path, PathParams } from './utils/matching/matchRequestUrl' +import { type Path, type PathParams } from './utils/matching/matchRequestUrl' function createRestHandler( method: Method, ) { return < - RequestBodyType extends DefaultBodyType = DefaultBodyType, Params extends PathParams = PathParams, - ResponseBody extends DefaultBodyType = DefaultBodyType, + // ResponseBody extends DefaultBodyType = DefaultBodyType, >( path: Path, - resolver: ResponseResolver< - RestRequest< - Method extends RESTMethods.HEAD | RESTMethods.GET - ? never - : RequestBodyType, - Params - >, - RestContext, - ResponseBody - >, + resolver: ResponseResolver>, ) => { return new RestHandler(method, path, resolver) } diff --git a/src/setupWorker/glossary.ts b/src/setupWorker/glossary.ts index ef48f5cc5..03100faf7 100644 --- a/src/setupWorker/glossary.ts +++ b/src/setupWorker/glossary.ts @@ -1,4 +1,4 @@ -import { FlatHeadersObject } from 'headers-polyfill' +import { HeadersObject } from 'headers-polyfill' import { StrictEventEmitter } from 'strict-event-emitter' import { LifeCycleEventEmitter, @@ -14,7 +14,6 @@ import { import type { HttpRequestEventMap, Interceptor } from '@mswjs/interceptors' import { Path } from '../utils/matching/matchRequestUrl' import { RequiredDeep } from '../typeUtils' -import { MockedRequest } from '../utils/request/MockedRequest' export type ResolvedPath = Path | URL @@ -197,7 +196,7 @@ export interface StartOptions extends SharedOptions { export interface SerializedResponse { status: number statusText: string - headers: FlatHeadersObject + headers: HeadersObject body: BodyType delay?: number } @@ -246,14 +245,7 @@ export interface SetupWorkerApi { * Returns a readonly list of currently active request handlers. * @see {@link https://mswjs.io/docs/api/setup-worker/list-handlers `worker.listHandlers()`} */ - listHandlers(): ReadonlyArray< - RequestHandler< - RequestHandlerDefaultInfo, - MockedRequest, - any, - MockedRequest - > - > + listHandlers(): ReadonlyArray> /** * Lists all active request handlers. diff --git a/src/setupWorker/start/createRequestListener.ts b/src/setupWorker/start/createRequestListener.ts index 4b62fe891..c8b9b304f 100644 --- a/src/setupWorker/start/createRequestListener.ts +++ b/src/setupWorker/start/createRequestListener.ts @@ -1,6 +1,5 @@ import { StartOptions, - SerializedResponse, SetupWorkerInternalContext, ServiceWorkerIncomingEventsMap, } from '../glossary' @@ -12,7 +11,6 @@ import { NetworkError } from '../../utils/NetworkError' import { parseWorkerRequest } from '../../utils/request/parseWorkerRequest' import { handleRequest } from '../../utils/handleRequest' import { RequiredDeep } from '../../typeUtils' -import { MockedResponse } from '../../response' import { devUtils } from '../../utils/internal/devUtils' import { serializeResponse } from '../../utils/logging/serializeResponse' @@ -31,54 +29,54 @@ export const createRequestListener = ( const request = parseWorkerRequest(message.payload) try { - await handleRequest( + await handleRequest( request, context.requestHandlers, options, context.emitter, { - transformResponse, + /** + * @todo See if this transformation is needed + * once we adopt "Response". + */ + // transformResponse, onPassthroughResponse() { messageChannel.postMessage('NOT_FOUND') }, async onMockedResponse( response, - { handler, publicRequest, parsedRequest }, + { request, handler, parsedRequest }, ) { - if (response.body instanceof ReadableStream) { - throw new Error( - devUtils.formatMessage( - 'Failed to construct a mocked response with a "ReadableStream" body: mocked streams are not supported. Follow https://github.com/mswjs/msw/issues/1336 for more details.', - ), - ) - } + // if (response.body instanceof ReadableStream) { + // throw new Error( + // devUtils.formatMessage( + // 'Failed to construct a mocked response with a "ReadableStream" body: mocked streams are not supported. Follow https://github.com/mswjs/msw/issues/1336 for more details.', + // ), + // ) + // } - const responseInstance = new Response(response.body, response) - const responseBodyBuffer = await responseInstance.arrayBuffer() + const responseInit = serializeResponse(response) + const responseBuffer = await response.arrayBuffer() // If the mocked response has no body, keep it that way. // Sending an empty "ArrayBuffer" to the worker will cause // the worker constructing "new Response(new ArrayBuffer(0))" // which will throw on responses that must have no body (i.e. 204). - const responseBody = - response.body == null ? null : responseBodyBuffer + // const responseBody = + // response.body == null ? null : responseBuffer messageChannel.postMessage( 'MOCK_RESPONSE', { - ...response, - body: responseBody, + ...responseInit, + body: responseBuffer, }, - [responseBodyBuffer], + [responseBuffer], ) if (!options.quiet) { - context.emitter.once('response:mocked', (response) => { - handler.log( - publicRequest, - serializeResponse(response), - parsedRequest, - ) + context.emitter.once('response:mocked', () => { + handler.log(request, responseInit, parsedRequest) }) } }, @@ -116,25 +114,22 @@ This exception has been gracefully handled as a 500 response, however, it's stro headers: { 'Content-Type': 'application/json', }, - body: JSON.stringify({ + body: { name: error.name, message: error.message, stack: error.stack, - }), + }, }) } } } } -function transformResponse( - response: MockedResponse, -): SerializedResponse { - return { - status: response.status, - statusText: response.statusText, - headers: response.headers.all(), - body: response.body, - delay: response.delay, - } -} +// function transformResponse(response: Response): SerializedResponse { +// return { +// status: response.status, +// statusText: response.statusText, +// headers: headersToObject(response.headers), +// body: response.body, +// } +// } diff --git a/src/setupWorker/start/utils/createMessageChannel.ts b/src/setupWorker/start/utils/createMessageChannel.ts index 207ee5638..d7bd1fa50 100644 --- a/src/setupWorker/start/utils/createMessageChannel.ts +++ b/src/setupWorker/start/utils/createMessageChannel.ts @@ -12,7 +12,7 @@ export interface ServiceWorkerMessage< } interface WorkerChannelEventsMap { - MOCK_RESPONSE: [data: SerializedResponse, body?: [ArrayBuffer]] + MOCK_RESPONSE: [data: SerializedResponse, body?: Array] NOT_FOUND: [] NETWORK_ERROR: [data: { name: string; message: string }] } diff --git a/src/sharedOptions.ts b/src/sharedOptions.ts index f015ceb7c..1cc0e6c62 100644 --- a/src/sharedOptions.ts +++ b/src/sharedOptions.ts @@ -1,5 +1,4 @@ import { StrictEventEmitter } from 'strict-event-emitter' -import { MockedRequest } from './utils/request/MockedRequest' import { UnhandledRequestStrategy } from './utils/request/onUnhandledRequest' export interface SharedOptions { @@ -15,13 +14,13 @@ export interface SharedOptions { } export interface LifeCycleEventsMap { - 'request:start': (request: MockedRequest) => void - 'request:match': (request: MockedRequest) => void - 'request:unhandled': (request: MockedRequest) => void - 'request:end': (request: MockedRequest) => void + 'request:start': (request: Request) => void + 'request:match': (request: Request) => void + 'request:unhandled': (request: Request) => void + 'request:end': (request: Request) => void 'response:mocked': (response: ResponseType, requestId: string) => void 'response:bypass': (response: ResponseType, requestId: string) => void - unhandledException: (error: Error, request: MockedRequest) => void + unhandledException: (error: Error, request: Request) => void } export type LifeCycleEventEmitter< diff --git a/src/utils/getResponse.ts b/src/utils/getResponse.ts index e5c0927b5..cef6c45ca 100644 --- a/src/utils/getResponse.ts +++ b/src/utils/getResponse.ts @@ -1,15 +1,13 @@ -import { MockedResponse } from '../response' import { RequestHandler, RequestHandlerExecutionResult, } from '../handlers/RequestHandler' -import { MockedRequest } from './request/MockedRequest' export interface ResponseLookupResult { handler?: RequestHandler - publicRequest?: any + request: Request parsedRequest?: any - response?: MockedResponse + response?: Response } export interface ResponseResolutionContext { @@ -19,10 +17,7 @@ export interface ResponseResolutionContext { /** * Returns a mocked response for a given request using following request handlers. */ -export const getResponse = async < - Request extends MockedRequest, - Handler extends RequestHandler[], ->( +export const getResponse = async >( request: Request, handlers: Handler, resolutionContext?: ResponseResolutionContext, @@ -33,13 +28,14 @@ export const getResponse = async < if (relevantHandlers.length === 0) { return { + request, handler: undefined, response: undefined, } } const result = await relevantHandlers.reduce< - Promise | null> + Promise >(async (executionResult, handler) => { const previousResults = await executionResult @@ -62,9 +58,12 @@ export const getResponse = async < } } - if (result.response.once) { - handler.markAsSkipped(true) - } + /** + * @todo Support `res.once()` alternative. + */ + // if (result.response.once) { + // handler.markAsSkipped(true) + // } return result }, Promise.resolve(null)) @@ -74,6 +73,7 @@ export const getResponse = async < // (i.e. if relevant handlers are fall-through). if (!result) { return { + request, handler: undefined, response: undefined, } @@ -81,7 +81,7 @@ export const getResponse = async < return { handler: result.handler, - publicRequest: result.request, + request: result.request, parsedRequest: result.parsedResult, response: result.response, } diff --git a/src/utils/handleRequest.ts b/src/utils/handleRequest.ts index c3fbe215a..fb3b597a9 100644 --- a/src/utils/handleRequest.ts +++ b/src/utils/handleRequest.ts @@ -2,16 +2,14 @@ import { until } from '@open-draft/until' import { StrictEventEmitter } from 'strict-event-emitter' import { RequestHandler } from '../handlers/RequestHandler' import { ServerLifecycleEventsMap } from '../node/glossary' -import { MockedResponse } from '../response' import { SharedOptions } from '../sharedOptions' import { RequiredDeep } from '../typeUtils' import { ResponseLookupResult, getResponse } from './getResponse' import { devUtils } from './internal/devUtils' -import { MockedRequest } from './request/MockedRequest' import { onUnhandledRequest } from './request/onUnhandledRequest' import { readResponseCookies } from './request/readResponseCookies' -export interface HandleRequestOptions { +export interface HandleRequestOptions { /** * Options for the response resolution process. */ @@ -23,31 +21,29 @@ export interface HandleRequestOptions { * Transforms a `MockedResponse` instance returned from a handler * to a response instance supported by the lower tooling (i.e. interceptors). */ - transformResponse?(response: MockedResponse): ResponseType + transformResponse?(response: Response): Response /** * Invoked whenever a request is performed as-is. */ - onPassthroughResponse?(request: MockedRequest): void + onPassthroughResponse?(request: Request): void /** * Invoked when the mocked response is ready to be sent. */ onMockedResponse?( - response: ResponseType, + response: Response, handler: RequiredDeep, ): void } -export async function handleRequest< - ResponseType extends Record = MockedResponse, ->( - request: MockedRequest, - handlers: RequestHandler[], +export async function handleRequest( + request: Request, + handlers: Array, options: RequiredDeep, emitter: StrictEventEmitter, - handleRequestOptions?: HandleRequestOptions, -): Promise { + handleRequestOptions?: HandleRequestOptions, +): Promise { emitter.emit('request:start', request) // Perform bypassed requests (i.e. issued via "ctx.fetch") as-is. @@ -106,12 +102,14 @@ Expected response resolver to return a mocked response Object, but got %s. The o // When the developer explicitly returned "req.passthrough()" do not warn them. // Perform the request as-is. - if (response.passthrough) { + if (response.status === 101) { emitter.emit('request:end', request) handleRequestOptions?.onPassthroughResponse?.(request) return } + response.headers.set('X-Powered-By', 'msw') + // Store all the received response cookies in the virtual cookie store. readResponseCookies(request, response) @@ -122,7 +120,7 @@ Expected response resolver to return a mocked response Object, but got %s. The o const transformedResponse = handleRequestOptions?.transformResponse?.(response) || - (response as any as ResponseType) + (response as any as Response) handleRequestOptions?.onMockedResponse?.( transformedResponse, diff --git a/src/utils/internal/parseGraphQLRequest.ts b/src/utils/internal/parseGraphQLRequest.ts index b3d757040..10d3a3ca7 100644 --- a/src/utils/internal/parseGraphQLRequest.ts +++ b/src/utils/internal/parseGraphQLRequest.ts @@ -6,7 +6,6 @@ import type { import { parse } from 'graphql' import { GraphQLVariables } from '../../handlers/GraphQLHandler' import { getPublicUrlFromRequest } from '../request/getPublicUrlFromRequest' -import { MockedRequest } from '../request/MockedRequest' import { devUtils } from './devUtils' import { jsonParse } from './jsonParse' @@ -86,11 +85,13 @@ function extractMultipartVariables( return operations.variables } -function getGraphQLInput(request: MockedRequest): GraphQLInput | null { +async function getGraphQLInput(request: Request): Promise { + const searchParams = new URLSearchParams(request.url) + switch (request.method) { case 'GET': { - const query = request.url.searchParams.get('query') - const variables = request.url.searchParams.get('variables') || '' + const query = searchParams.get('query') + const variables = searchParams.get('variables') || '' return { query, @@ -99,8 +100,15 @@ function getGraphQLInput(request: MockedRequest): GraphQLInput | null { } case 'POST': { - if (request.body?.query) { - const { query, variables } = request.body + const requestText = await request.text() + const requestJson = jsonParse<{ + query: string + variables?: GraphQLVariables + operations?: any + }>(requestText) + + if (requestJson?.query) { + const { query, variables } = requestJson return { query, @@ -109,9 +117,10 @@ function getGraphQLInput(request: MockedRequest): GraphQLInput | null { } // Handle multipart body operations. - if (request.body?.operations) { + if (requestJson?.operations) { const { operations, map, ...files } = - request.body as GraphQLMultipartRequestBody + requestJson as unknown as GraphQLMultipartRequestBody + const parsedOperations = jsonParse<{ query?: string; variables?: GraphQLVariables }>( operations, @@ -146,13 +155,13 @@ function getGraphQLInput(request: MockedRequest): GraphQLInput | null { * Determines if a given request can be considered a GraphQL request. * Does not parse the query and does not guarantee its validity. */ -export function parseGraphQLRequest( - request: MockedRequest, -): ParsedGraphQLRequest { - const input = getGraphQLInput(request) +export async function parseGraphQLRequest( + request: Request, +): Promise { + const input = await getGraphQLInput(request) if (!input || !input.query) { - return undefined + return } const { query, variables } = input diff --git a/src/utils/logging/prepareRequest.ts b/src/utils/logging/prepareRequest.ts index b5148f279..0c6ed7e41 100644 --- a/src/utils/logging/prepareRequest.ts +++ b/src/utils/logging/prepareRequest.ts @@ -1,22 +1,23 @@ -import type { DefaultBodyType } from '../../handlers/RequestHandler.js' -import type { MockedRequest } from '../request/MockedRequest.js' +import { type HeadersObject, headersToObject } from 'headers-polyfill' +import { type DefaultBodyType } from '../../handlers/RequestHandler' export interface LoggedRequest { id: string url: URL method: string - headers: Record - cookies: Record + headers: HeadersObject body: DefaultBodyType } /** * Formats a mocked request for introspection in browser's console. */ -export function prepareRequest(request: MockedRequest): LoggedRequest { +export function prepareRequest(request: Request): LoggedRequest { return { ...request, + id: '', + headers: headersToObject(request.headers), + url: new URL(request.url), body: request.body, - headers: request.headers.all(), } } diff --git a/src/utils/request/getPublicUrlFromRequest.ts b/src/utils/request/getPublicUrlFromRequest.ts index f540a2143..ea35f39af 100644 --- a/src/utils/request/getPublicUrlFromRequest.ts +++ b/src/utils/request/getPublicUrlFromRequest.ts @@ -1,14 +1,11 @@ -import { MockedRequest } from './MockedRequest' - /** * Returns a relative URL if the given request URL is relative to the current origin. * Otherwise returns an absolute URL. */ -export const getPublicUrlFromRequest = (request: MockedRequest) => { - return request.referrer.startsWith(request.url.origin) - ? request.url.pathname - : new URL( - request.url.pathname, - `${request.url.protocol}//${request.url.host}`, - ).href +export function getPublicUrlFromRequest(request: Request): string { + const url = new URL(request.url) + + return request.referrer.startsWith(origin) + ? url.pathname + : new URL(url.pathname, `${url.protocol}//${url.host}`).href } diff --git a/src/utils/request/onUnhandledRequest.ts b/src/utils/request/onUnhandledRequest.ts index 96432e150..9f89f5d42 100644 --- a/src/utils/request/onUnhandledRequest.ts +++ b/src/utils/request/onUnhandledRequest.ts @@ -10,7 +10,6 @@ import { GraphQLHandler } from '../../handlers/GraphQLHandler' import { RequestHandler } from '../../handlers/RequestHandler' import { tryCatch } from '../internal/tryCatch' import { devUtils } from '../internal/devUtils' -import { MockedRequest } from './MockedRequest' const MAX_MATCH_SCORE = 3 const MAX_SUGGESTION_COUNT = 4 @@ -22,7 +21,7 @@ export interface UnhandledRequestPrint { } export type UnhandledRequestCallback = ( - request: MockedRequest, + request: Request, print: UnhandledRequestPrint, ) => void @@ -33,8 +32,8 @@ export type UnhandledRequestStrategy = | UnhandledRequestCallback interface RequestHandlerGroups { - rest: RestHandler[] - graphql: GraphQLHandler[] + rest: Array + graphql: Array } function groupHandlersByType(handlers: RequestHandler[]): RequestHandlerGroups { @@ -60,7 +59,7 @@ function groupHandlersByType(handlers: RequestHandler[]): RequestHandlerGroups { type RequestHandlerSuggestion = [number, RequestHandler] type ScoreGetterFn = ( - request: MockedRequest, + request: Request, handler: RequestHandlerType, ) => number @@ -107,8 +106,8 @@ function getGraphQLHandlerScore( } function getSuggestedHandler( - request: MockedRequest, - handlers: RestHandler[] | GraphQLHandler[], + request: Request, + handlers: Array | Array, getScore: ScoreGetterFn | ScoreGetterFn, ): RequestHandler[] { const suggestedHandlers = (handlers as RequestHandler[]) @@ -135,12 +134,12 @@ ${handlers.map((handler) => ` • ${handler.info.header}`).join('\n')}` return `Did you mean to request "${handlers[0].info.header}" instead?` } -export function onUnhandledRequest( - request: MockedRequest, +export async function onUnhandledRequest( + request: Request, handlers: RequestHandler[], strategy: UnhandledRequestStrategy = 'warn', -): void { - const parsedGraphQLQuery = tryCatch(() => parseGraphQLRequest(request)) +): Promise { + const parsedGraphQLQuery = await tryCatch(() => parseGraphQLRequest(request)) function generateHandlerSuggestion(): string { /** diff --git a/src/utils/request/parseWorkerRequest.ts b/src/utils/request/parseWorkerRequest.ts index cc8b45fd7..3bdefe1c1 100644 --- a/src/utils/request/parseWorkerRequest.ts +++ b/src/utils/request/parseWorkerRequest.ts @@ -1,7 +1,5 @@ -import { encodeBuffer } from '@mswjs/interceptors' -import { Headers } from 'headers-polyfill' import { ServiceWorkerIncomingRequest } from '../../setupWorker/glossary' -import { MockedRequest } from './MockedRequest' +import { pruneGetRequestBody } from './pruneGetRequestBody' /** * Converts a given request received from the Service Worker @@ -9,13 +7,15 @@ import { MockedRequest } from './MockedRequest' */ export function parseWorkerRequest( rawRequest: ServiceWorkerIncomingRequest, -): MockedRequest { - const url = new URL(rawRequest.url) - const headers = new Headers(rawRequest.headers) +): Request { + console.log({ rawRequest }) - return new MockedRequest(url, { + /** + * @todo See if we can't send "Request" as-is + * from the worker. It should be transferrable. + */ + return new Request(rawRequest.url, { ...rawRequest, - body: encodeBuffer(rawRequest.body || ''), - headers, + body: pruneGetRequestBody(rawRequest), }) } diff --git a/src/utils/request/readResponseCookies.ts b/src/utils/request/readResponseCookies.ts index e57497dae..0e01b6137 100644 --- a/src/utils/request/readResponseCookies.ts +++ b/src/utils/request/readResponseCookies.ts @@ -1,11 +1,9 @@ import { store } from '@mswjs/cookies' -import { MockedResponse } from '../../response' -import { MockedRequest } from './MockedRequest' export function readResponseCookies( - request: MockedRequest, - response: MockedResponse, -) { + request: Request, + response: Response, +): void { store.add({ ...request, url: request.url.toString() }, response) store.persist() } diff --git a/test/rest-api/basic.mocks.ts b/test/rest-api/basic.mocks.ts index acc6a6d2b..b186dd4ff 100644 --- a/test/rest-api/basic.mocks.ts +++ b/test/rest-api/basic.mocks.ts @@ -1,15 +1,22 @@ import { setupWorker, rest } from 'msw' const worker = setupWorker( - rest.get('https://api.github.com/users/:username', (req, res, ctx) => { - const { username } = req.params + rest.get('https://api.github.com/users/:username', ({ params }) => { + const { username } = params - return res( - ctx.json({ + return new Response( + JSON.stringify({ name: 'John Maverick', originalUsername: username, }), ) + + // return res( + // ctx.json({ + // name: 'John Maverick', + // originalUsername: username, + // }), + // ) }), ) From 6a21d478ecb202306a80c8de3a26aa82b90ca03c Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 8 Oct 2022 18:42:28 +0200 Subject: [PATCH 002/210] feat: add "HttpResponse" --- src/handlers/RestHandler.ts | 11 +- src/index.ts | 2 + .../start/createRequestListener.ts | 2 + src/utils/HttpResponse.ts | 109 ++++++++++++++++++ src/utils/getResponse.ts | 10 +- src/utils/request/MockedRequest.ts | 2 +- src/utils/request/getRequestCookies.ts | 51 +++++++- src/utils/request/parseWorkerRequest.ts | 24 ++-- test/rest-api/basic.mocks.ts | 19 +-- test/rest-api/cookies-inheritance.mocks.ts | 32 ++--- test/rest-api/cookies-request.mocks.ts | 6 +- test/rest-api/cookies.mocks.ts | 39 +++++-- test/rest-api/params.mocks.ts | 26 ++--- test/rest-api/query.mocks.ts | 24 ++-- test/rest-api/redirect.mocks.ts | 23 ++-- test/rest-api/request/matching/uri.mocks.ts | 45 +++----- test/rest-api/status.mocks.ts | 13 ++- 17 files changed, 296 insertions(+), 142 deletions(-) create mode 100644 src/utils/HttpResponse.ts diff --git a/src/handlers/RestHandler.ts b/src/handlers/RestHandler.ts index a01ab0fc7..f027ecd0a 100644 --- a/src/handlers/RestHandler.ts +++ b/src/handlers/RestHandler.ts @@ -14,6 +14,7 @@ import { PathParams, } from '../utils/matching/matchRequestUrl' import { getPublicUrlFromRequest } from '../utils/request/getPublicUrlFromRequest' +import { getAllRequestCookies } from '../utils/request/getRequestCookies' import { cleanUrl, getSearchParams } from '../utils/url/cleanUrl' import { defaultContext, @@ -65,7 +66,7 @@ export type RequestQuery = { export type RestRequestParsedResult = { match: Match - cookies: Record> + cookies: Record } export type RestRequestResolverExtras = { @@ -152,15 +153,17 @@ export class RestHandler extends RequestHandler< request: Request, resolutionContext?: ResponseResolutionContext, ) { + const url = new URL(request.url) const match = matchRequestUrl( - new URL(request.url), + url, this.info.path, resolutionContext?.baseUrl, ) + const cookies = getAllRequestCookies(request) return { match, - cookies: {}, + cookies, } } @@ -182,7 +185,7 @@ export class RestHandler extends RequestHandler< ) { return { params: parsedResult.match?.params || {}, - cookies: {}, + cookies: parsedResult.cookies, } } diff --git a/src/index.ts b/src/index.ts index a0e264491..def4f0f0a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -60,3 +60,5 @@ export type { export type { Path, PathParams, Match } from './utils/matching/matchRequestUrl' export type { DelayMode } from './context/delay' export { ParsedGraphQLRequest } from './utils/internal/parseGraphQLRequest' + +export * from './utils/HttpResponse' diff --git a/src/setupWorker/start/createRequestListener.ts b/src/setupWorker/start/createRequestListener.ts index c8b9b304f..5de2417de 100644 --- a/src/setupWorker/start/createRequestListener.ts +++ b/src/setupWorker/start/createRequestListener.ts @@ -71,6 +71,8 @@ export const createRequestListener = ( ...responseInit, body: responseBuffer, }, + // Transfer response's buffer so it could + // be sent over to the worker. [responseBuffer], ) diff --git a/src/utils/HttpResponse.ts b/src/utils/HttpResponse.ts new file mode 100644 index 000000000..b919b6b16 --- /dev/null +++ b/src/utils/HttpResponse.ts @@ -0,0 +1,109 @@ +import * as cookieUtils from 'cookie' +import httpStatusTexts from 'statuses/codes.json' +import { Headers } from 'headers-polyfill' + +export interface HttpResponseInit extends ResponseInit { + type?: ResponseType +} + +export interface HttpResponseDecoratedInit extends HttpResponseInit { + status: number + statusText: string + headers: Headers +} + +export const HttpResponse = { + text( + body?: BodyType | null, + init?: HttpResponseInit, + ): Response { + return createResponse(body, decorateResponseInit(init)) + }, + + json>( + body?: BodyType | null, + init?: HttpResponseInit, + ): Response { + const responseInit = decorateResponseInit(init) + responseInit.headers.set('Content-Type', 'application/json') + return createResponse(JSON.stringify(body), responseInit) + }, + + xml( + body?: BodyType | null, + init?: HttpResponseInit, + ): Response { + const responseInit = decorateResponseInit(init) + responseInit.headers.set('Content-Type', 'application/xml') + return createResponse(body, responseInit) + }, + + /** + * @todo Support: + * - ArrayBuffer + * - FormData + * - ReadableStream + */ +} + +function createResponse( + body: BodyInit | null | undefined, + init: HttpResponseDecoratedInit, +): Response { + const response = new Response(body, init) + decorateResponse(response, init) + return response +} + +function decorateResponseInit( + init: HttpResponseInit = {}, +): HttpResponseDecoratedInit { + const status = init?.status || 200 + const statusText = + init?.statusText || + httpStatusTexts[status.toString() as keyof typeof httpStatusTexts] + const headers = new Headers(init?.headers) + + return { + ...init, + headers, + status, + statusText, + } +} + +function decorateResponse( + response: Response, + init: HttpResponseDecoratedInit, +): Response { + // Allow to mock the response type. + if (init?.type) { + defineReadOnly(response, 'type', init.type) + } + + // Write the mocked response cookies to the document. + const responseCookie = init?.headers?.get('Set-Cookie') + if (responseCookie) { + /** + * @todo Support multiple "Set-Cookie" response headers. + */ + const cookies = cookieUtils.parse(responseCookie) + for (const cookieName in cookies) { + document.cookie = `${cookieName}=${cookies[cookieName]}` + } + } + + return response +} + +function defineReadOnly( + target: any, + propertyName: string, + value: unknown, +): void { + Object.defineProperty(target, propertyName, { + value, + enumerable: true, + writable: false, + }) +} diff --git a/src/utils/getResponse.ts b/src/utils/getResponse.ts index cef6c45ca..8dc79c9e5 100644 --- a/src/utils/getResponse.ts +++ b/src/utils/getResponse.ts @@ -14,6 +14,14 @@ export interface ResponseResolutionContext { baseUrl?: string } +async function filterAsync( + target: Array, + predicate: (item: Item) => Promise, +): Promise> { + const results = await Promise.all(target.map(predicate)) + return target.filter((_, index) => results[index]) +} + /** * Returns a mocked response for a given request using following request handlers. */ @@ -22,7 +30,7 @@ export const getResponse = async >( handlers: Handler, resolutionContext?: ResponseResolutionContext, ): Promise => { - const relevantHandlers = handlers.filter((handler) => { + const relevantHandlers = await filterAsync(handlers, (handler) => { return handler.test(request, resolutionContext) }) diff --git a/src/utils/request/MockedRequest.ts b/src/utils/request/MockedRequest.ts index 8d7d258d4..d142ad5a1 100644 --- a/src/utils/request/MockedRequest.ts +++ b/src/utils/request/MockedRequest.ts @@ -161,7 +161,7 @@ export class MockedRequest< // Get existing document cookies that are applicable // to this request based on its "credentials" policy. - const cookiesFromDocument = getRequestCookies(this) + const cookiesFromDocument = getRequestCookies(this as any) const forwardedCookies = { ...cookiesFromDocument, diff --git a/src/utils/request/getRequestCookies.ts b/src/utils/request/getRequestCookies.ts index ef85b1a70..4a0a7d9d6 100644 --- a/src/utils/request/getRequestCookies.ts +++ b/src/utils/request/getRequestCookies.ts @@ -1,14 +1,15 @@ import * as cookieUtils from 'cookie' -import { MockedRequest } from './MockedRequest' +import { store } from '@mswjs/cookies' -function getAllCookies() { +function getAllDocumentCookies() { return cookieUtils.parse(document.cookie) } /** * Returns relevant document cookies based on the request `credentials` option. */ -export function getRequestCookies(request: MockedRequest) { +/** @todo Rename this to "getDocumentCookies" */ +export function getRequestCookies(request: Request): Record { /** * @note No cookies persist on the document in Node.js: no document. */ @@ -18,14 +19,16 @@ export function getRequestCookies(request: MockedRequest) { switch (request.credentials) { case 'same-origin': { + const url = new URL(request.url) + // Return document cookies only when requested a resource // from the same origin as the current document. - return location.origin === request.url.origin ? getAllCookies() : {} + return location.origin === url.origin ? getAllDocumentCookies() : {} } case 'include': { // Return all document cookies. - return getAllCookies() + return getAllDocumentCookies() } default: { @@ -33,3 +36,41 @@ export function getRequestCookies(request: MockedRequest) { } } } + +export function getAllRequestCookies(request: Request): Record { + const requestCookiesString = request.headers.get('cookie') + const cookiesFromHeaders = requestCookiesString + ? cookieUtils.parse(requestCookiesString) + : {} + + store.hydrate() + + const cookiesFromStore = Array.from(store.get(request)?.entries()).reduce( + (cookies, [name, { value }]) => { + return Object.assign(cookies, { [name.trim()]: value }) + }, + {}, + ) + + const cookiesFromDocument = getRequestCookies(request) + + const forwardedCookies = { + ...cookiesFromDocument, + ...cookiesFromStore, + } + + // Set the inferred cookies from the cookie store and the document + // on the request's headers. + /** + * @todo Consider making this a separate step so this function + * is pure-er. + */ + for (const [name, value] of Object.entries(forwardedCookies)) { + request.headers.append('cookie', `${name}=${value}`) + } + + return { + ...forwardedCookies, + ...cookiesFromHeaders, + } +} diff --git a/src/utils/request/parseWorkerRequest.ts b/src/utils/request/parseWorkerRequest.ts index 3bdefe1c1..16530a8b8 100644 --- a/src/utils/request/parseWorkerRequest.ts +++ b/src/utils/request/parseWorkerRequest.ts @@ -1,21 +1,21 @@ -import { ServiceWorkerIncomingRequest } from '../../setupWorker/glossary' +import { type ServiceWorkerIncomingRequest } from '../../setupWorker/glossary' import { pruneGetRequestBody } from './pruneGetRequestBody' /** * Converts a given request received from the Service Worker - * into a `MockedRequest` instance. + * into a Fetch `Request` instance. */ export function parseWorkerRequest( - rawRequest: ServiceWorkerIncomingRequest, + incomingRequest: ServiceWorkerIncomingRequest, ): Request { - console.log({ rawRequest }) - - /** - * @todo See if we can't send "Request" as-is - * from the worker. It should be transferrable. - */ - return new Request(rawRequest.url, { - ...rawRequest, - body: pruneGetRequestBody(rawRequest), + // "Request" instance is not serializable so + // it cannot be sent directly from the worker. + return new Request(incomingRequest.url, { + ...incomingRequest, + /** + * @todo See if it's possible to post ReadableStream + * from the worker directly (if it's transferable). + */ + body: pruneGetRequestBody(incomingRequest), }) } diff --git a/test/rest-api/basic.mocks.ts b/test/rest-api/basic.mocks.ts index b186dd4ff..df5f0a2d0 100644 --- a/test/rest-api/basic.mocks.ts +++ b/test/rest-api/basic.mocks.ts @@ -1,22 +1,13 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( rest.get('https://api.github.com/users/:username', ({ params }) => { const { username } = params - return new Response( - JSON.stringify({ - name: 'John Maverick', - originalUsername: username, - }), - ) - - // return res( - // ctx.json({ - // name: 'John Maverick', - // originalUsername: username, - // }), - // ) + return HttpResponse.json({ + name: 'John Maverick', + originalUsername: username, + }) }), ) diff --git a/test/rest-api/cookies-inheritance.mocks.ts b/test/rest-api/cookies-inheritance.mocks.ts index 55ecc6c48..b4e5ed4dc 100644 --- a/test/rest-api/cookies-inheritance.mocks.ts +++ b/test/rest-api/cookies-inheritance.mocks.ts @@ -1,25 +1,25 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.post('/login', (req, res, ctx) => { - return res(ctx.cookie('authToken', 'abc-123')) + rest.post('/login', () => { + return HttpResponse.text(null, { + headers: { + 'Set-Cookie': 'authToken=abc-123', + }, + }) }), - rest.get('/user', (req, res, ctx) => { - if (req.cookies.authToken == null) { - return res( - ctx.status(403), - ctx.json({ - error: 'Auth token not found', - }), + rest.get('/user', ({ cookies }) => { + if (cookies.authToken == null) { + return HttpResponse.json( + { error: 'Auth token not found' }, + { status: 403 }, ) } - return res( - ctx.json({ - firstName: 'John', - lastName: 'Maverick', - }), - ) + return HttpResponse.json({ + firstName: 'John', + lastName: 'Maverick', + }) }), ) diff --git a/test/rest-api/cookies-request.mocks.ts b/test/rest-api/cookies-request.mocks.ts index f73efb662..5c8547d29 100644 --- a/test/rest-api/cookies-request.mocks.ts +++ b/test/rest-api/cookies-request.mocks.ts @@ -1,10 +1,10 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( // Use wildcard so that we capture any "GET /user" requests // regardless of the origin, and can assert "same-origin" credentials. - rest.get('*/user', (req, res, ctx) => { - return res(ctx.json({ cookies: req.cookies })) + rest.get('*/user', ({ cookies }) => { + return HttpResponse.json({ cookies }) }), ) diff --git a/test/rest-api/cookies.mocks.ts b/test/rest-api/cookies.mocks.ts index a525059ce..3aad82b82 100644 --- a/test/rest-api/cookies.mocks.ts +++ b/test/rest-api/cookies.mocks.ts @@ -1,19 +1,36 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/user', (req, res, ctx) => { - return res( - ctx.cookie('myCookie', 'value'), - ctx.json({ + rest.get('/user', () => { + return HttpResponse.json( + { mocked: true, - }), + }, + { + headers: { + /** + * @todo "cookie" parser will treat this as two + * separate cookies. It's because it expects + * a single cookie string. This is also what + * "document.cookie" expects. But "Headers" don't + * support defining multiple "Set-Cookie" values. + * @see https://stackoverflow.com/a/63254504/2754939 + */ + 'Set-Cookie': 'myCookie=value; Max-Age=2592000', + }, + }, ) }), - rest.get('/order', (req, res, ctx) => { - return res( - ctx.cookie('firstCookie', 'yes'), - ctx.cookie('secondCookie', 'no'), - ctx.json({ mocked: true }), + rest.get('/order', () => { + return HttpResponse.json( + { + mocked: true, + }, + { + headers: { + 'Set-Cookie': 'firstCookie=yes; secondCookie=no', + }, + }, ) }), ) diff --git a/test/rest-api/params.mocks.ts b/test/rest-api/params.mocks.ts index 159a6cee8..e255d9a4b 100644 --- a/test/rest-api/params.mocks.ts +++ b/test/rest-api/params.mocks.ts @@ -1,9 +1,9 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' -interface ResponseType { - username: string - messageId: string -} +// interface ResponseType { +// username: string +// messageId: string +// } type RequestParams = { username: string @@ -11,17 +11,15 @@ type RequestParams = { } const worker = setupWorker( - rest.get( + rest.get( 'https://api.github.com/users/:username/messages/:messageId', - (req, res, ctx) => { - const { username, messageId } = req.params + ({ params }) => { + const { username, messageId } = params - return res( - ctx.json({ - username, - messageId, - }), - ) + return HttpResponse.json({ + username, + messageId, + }) }, ), ) diff --git a/test/rest-api/query.mocks.ts b/test/rest-api/query.mocks.ts index 59b0eacec..2b4b5bf56 100644 --- a/test/rest-api/query.mocks.ts +++ b/test/rest-api/query.mocks.ts @@ -1,24 +1,18 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('https://test.mswjs.io/api/books', (req, res, ctx) => { - const bookId = req.url.searchParams.get('id') + rest.get('https://test.mswjs.io/api/books', ({ request }) => { + const url = new URL(request.url) + const bookId = url.searchParams.get('id') - return res( - ctx.json({ - bookId, - }), - ) + return HttpResponse.json({ bookId }) }), - rest.post('https://test.mswjs.io/products', (req, res, ctx) => { - const productIds = req.url.searchParams.getAll('id') + rest.post('https://test.mswjs.io/products', ({ request }) => { + const url = new URL(request.url) + const productIds = url.searchParams.getAll('id') - return res( - ctx.json({ - productIds, - }), - ) + return HttpResponse.json({ productIds }) }), ) diff --git a/test/rest-api/redirect.mocks.ts b/test/rest-api/redirect.mocks.ts index c262e11ce..263c5883b 100644 --- a/test/rest-api/redirect.mocks.ts +++ b/test/rest-api/redirect.mocks.ts @@ -1,16 +1,19 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/login', (req, res, ctx) => { - return res(ctx.status(307), ctx.set('Location', '/user')) + rest.get('/login', () => { + return HttpResponse.text(null, { + status: 307, + headers: { + Location: '/user', + }, + }) }), - rest.get('/user', (req, res, ctx) => { - return res( - ctx.json({ - firstName: 'John', - lastName: 'Maverick', - }), - ) + rest.get('/user', () => { + return HttpResponse.json({ + firstName: 'John', + lastName: 'Maverick', + }) }), ) diff --git a/test/rest-api/request/matching/uri.mocks.ts b/test/rest-api/request/matching/uri.mocks.ts index 7beccfc73..929946851 100644 --- a/test/rest-api/request/matching/uri.mocks.ts +++ b/test/rest-api/request/matching/uri.mocks.ts @@ -1,43 +1,26 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('https://api.github.com/made-up', (req, res, ctx) => { - return res( - ctx.json({ - mocked: true, - }), - ) + rest.get('https://api.github.com/made-up', () => { + return HttpResponse.json({ mocked: true }) }), - rest.get('https://test.mswjs.io/messages/:messageId', (req, res, ctx) => { - const { messageId } = req.params - - return res( - ctx.json({ - messageId, - }), - ) + rest.get('https://test.mswjs.io/messages/:messageId', ({ params }) => { + const { messageId } = params + return HttpResponse.json({ messageId }) }), - rest.get( - 'https://test.mswjs.io/messages/:messageId/items', - (req, res, ctx) => { - const { messageId } = req.params - - return res( - ctx.json({ - messageId, - }), - ) - }, - ), + rest.get('https://test.mswjs.io/messages/:messageId/items', ({ params }) => { + const { messageId } = params + return HttpResponse.json({ messageId }) + }), - rest.get(/(.+?)\.google\.com\/path/, (req, res, ctx) => { - return res(ctx.json({ mocked: true })) + rest.get(/(.+?)\.google\.com\/path/, () => { + return HttpResponse.json({ mocked: true }) }), - rest.get(`/resource\\('id'\\)`, (req, res, ctx) => { - return res(ctx.json({ mocked: true })) + rest.get(`/resource\\('id'\\)`, () => { + return HttpResponse.json({ mocked: true }) }), ) diff --git a/test/rest-api/status.mocks.ts b/test/rest-api/status.mocks.ts index fb138b25a..5d44d5265 100644 --- a/test/rest-api/status.mocks.ts +++ b/test/rest-api/status.mocks.ts @@ -1,15 +1,18 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/posts', (req, res, ctx) => { + rest.get('/posts', () => { // Setting response status code without status text // implicitly sets the correct status text. - return res(ctx.status(403)) + return HttpResponse.text(null, { status: 403 }) }), - rest.get('/user', (req, res, ctx) => { + rest.get('/user', () => { // Response status text can be overridden // to an arbitrary string value. - return res(ctx.status(401, 'Custom text')) + return HttpResponse.text(null, { + status: 401, + statusText: 'Custom text', + }) }), ) From 90dd65e98b47a0eb6600b411d58c9ee440a35f57 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 8 Oct 2022 19:07:34 +0200 Subject: [PATCH 003/210] feat: support "HttpResponse.arrayBuffer()" --- src/utils/HttpResponse.ts | 46 ++++++++-- test/rest-api/generator.mocks.ts | 62 +++++++------- test/rest-api/query-params-warning.mocks.ts | 14 ++-- test/rest-api/request/matching/all.mocks.ts | 10 +-- .../rest-api/request/matching/method.mocks.ts | 10 +-- .../matching/path-params-decode.mocks.ts | 9 +- test/rest-api/response-patching.mocks.ts | 83 ++++++++++--------- .../response/body/body-binary.mocks.ts | 14 ++-- .../rest-api/response/body/body-json.mocks.ts | 10 +-- .../rest-api/response/body/body-text.mocks.ts | 6 +- test/rest-api/response/body/body-xml.mocks.ts | 10 +-- 11 files changed, 150 insertions(+), 124 deletions(-) diff --git a/src/utils/HttpResponse.ts b/src/utils/HttpResponse.ts index b919b6b16..cf03a1e47 100644 --- a/src/utils/HttpResponse.ts +++ b/src/utils/HttpResponse.ts @@ -13,34 +13,66 @@ export interface HttpResponseDecoratedInit extends HttpResponseInit { } export const HttpResponse = { + /** + * Define a `Response` with a `Content-Type: "text/plain"` body. + * @example + * HttpResponse.text('hello world') + * HttpResponse.text('Error', { status: 500 }) + */ text( body?: BodyType | null, init?: HttpResponseInit, ): Response { - return createResponse(body, decorateResponseInit(init)) + const responseInit = decorateResponseInit(init) + responseInit.headers.set('Content-Type', 'text/plain') + return createResponse(body, responseInit) }, - json>( - body?: BodyType | null, - init?: HttpResponseInit, - ): Response { + /** + * Define a `Response` with a `Content-Type: "application/json"` body. + * @example + * HttpResponse.json({ firstName: 'John' }) + * HttpResponse.json({ error: 'Not Authorized' }, { status: 401 }) + */ + json< + BodyType extends + | Record + | Array + | boolean + | number, + >(body?: BodyType | null, init?: HttpResponseInit): Response { const responseInit = decorateResponseInit(init) responseInit.headers.set('Content-Type', 'application/json') return createResponse(JSON.stringify(body), responseInit) }, + /** + * Define a `Response` with a `Content-Type: "application/xml"` body. + * @example + * HttpResponse.xml(``) + * HttpResponse.xml(`
`, { status: 201 }) + */ xml( body?: BodyType | null, init?: HttpResponseInit, ): Response { const responseInit = decorateResponseInit(init) - responseInit.headers.set('Content-Type', 'application/xml') + responseInit.headers.set('Content-Type', 'text/xml') + return createResponse(body, responseInit) + }, + + arrayBuffer(body?: ArrayBuffer, init?: HttpResponseInit): Response { + const responseInit = decorateResponseInit(init) + + if (body) { + responseInit.headers.set('Content-Length', body.byteLength.toString()) + } + return createResponse(body, responseInit) }, /** * @todo Support: - * - ArrayBuffer * - FormData * - ReadableStream */ diff --git a/test/rest-api/generator.mocks.ts b/test/rest-api/generator.mocks.ts index 76b1e3632..a70f196ed 100644 --- a/test/rest-api/generator.mocks.ts +++ b/test/rest-api/generator.mocks.ts @@ -1,50 +1,48 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/polling/:maxCount', function* (req, res, ctx) { - const { maxCount } = req.params + rest.get<{ maxCount: string }>('/polling/:maxCount', function* ({ params }) { + const { maxCount } = params let count = 0 - while (count < maxCount) { + while (count < Number(maxCount)) { count += 1 - yield res( - ctx.json({ - status: 'pending', - count, - }), - ) - } - return res( - ctx.json({ - status: 'complete', + yield HttpResponse.json({ + status: 'pending', count, - }), - ) + }) + } + + return HttpResponse.json({ + status: 'complete', + count, + }) }), - rest.get('/polling/once/:maxCount', function* (req, res, ctx) { - let count = 0 + rest.get<{ maxCount: string }>( + '/polling/once/:maxCount', + function* ({ params }) { + const { maxCount } = params + let count = 0 - while (count < req.params.maxCount) { - count += 1 - yield res( - ctx.json({ + while (count < Number(maxCount)) { + count += 1 + + yield HttpResponse.json({ status: 'pending', count, - }), - ) - } + }) + } - return res.once( - ctx.json({ + return HttpResponse.json({ status: 'complete', count, - }), - ) - }), - rest.get('/polling/once/:maxCount', (req, res, ctx) => { - return res(ctx.json({ status: 'done' })) + }) + }, + ), + rest.get('/polling/once/:maxCount', () => { + return HttpResponse.json({ status: 'done' }) }), ) diff --git a/test/rest-api/query-params-warning.mocks.ts b/test/rest-api/query-params-warning.mocks.ts index 50b4dddfd..637810be9 100644 --- a/test/rest-api/query-params-warning.mocks.ts +++ b/test/rest-api/query-params-warning.mocks.ts @@ -1,15 +1,15 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( // WARNING: Intentionally invalid example of including a query parameter // in the request handler URL. Don't do that, consider matching against a path // and accessing query parameters in the response resolver instead. - rest.get('/user?name=admin', (req, res, ctx) => - res(ctx.text('user-response')), - ), - rest.post('/login?id=123&type=auth', (req, res, ctx) => - res(ctx.text('login-response')), - ), + rest.get('/user?name=admin', () => { + return HttpResponse.text('user-response') + }), + rest.post('/login?id=123&type=auth', () => { + return HttpResponse.text('login-response') + }), ) worker.start() diff --git a/test/rest-api/request/matching/all.mocks.ts b/test/rest-api/request/matching/all.mocks.ts index d606dcfa0..3ec6198d2 100644 --- a/test/rest-api/request/matching/all.mocks.ts +++ b/test/rest-api/request/matching/all.mocks.ts @@ -1,11 +1,11 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.all('*/api/*', (req, res, ctx) => { - return res(ctx.text('hello world')) + rest.all('*/api/*', () => { + return HttpResponse.text('hello world') }), - rest.all('*', (req, res, ctx) => { - return res(ctx.text('welcome to the jungle')) + rest.all('*', () => { + return HttpResponse.text('welcome to the jungle') }), ) diff --git a/test/rest-api/request/matching/method.mocks.ts b/test/rest-api/request/matching/method.mocks.ts index 84568eb1e..53a6b84e8 100644 --- a/test/rest-api/request/matching/method.mocks.ts +++ b/test/rest-api/request/matching/method.mocks.ts @@ -1,12 +1,8 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.post('/user', (req, res, ctx) => { - return res( - ctx.json({ - mocked: true, - }), - ) + rest.post('/user', () => { + return HttpResponse.json({ mocked: true }) }), ) diff --git a/test/rest-api/request/matching/path-params-decode.mocks.ts b/test/rest-api/request/matching/path-params-decode.mocks.ts index 60ff634cf..6c04f6cb6 100644 --- a/test/rest-api/request/matching/path-params-decode.mocks.ts +++ b/test/rest-api/request/matching/path-params-decode.mocks.ts @@ -1,10 +1,9 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('https://test.mswjs.io/reflect-url/:url', (req, res, ctx) => { - const { url } = req.params - - return res(ctx.json({ url })) + rest.get('https://test.mswjs.io/reflect-url/:url', ({ params }) => { + const { url } = params + return HttpResponse.json({ url }) }), ) diff --git a/test/rest-api/response-patching.mocks.ts b/test/rest-api/response-patching.mocks.ts index 27c60b7a3..34b0b3648 100644 --- a/test/rest-api/response-patching.mocks.ts +++ b/test/rest-api/response-patching.mocks.ts @@ -1,73 +1,76 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/user', async (req, res, ctx) => { + rest.get('/user', async () => { const originalResponse = await ctx.fetch('/user') const body = await originalResponse.json() - return res( - ctx.json({ - name: body.name, - location: body.location, - mocked: true, - }), - ) + return HttpResponse.json({ + name: body.name, + location: body.location, + mocked: true, + }) }), - rest.get('/repos/:owner/:repoName', async (req, res, ctx) => { - const originalResponse = await ctx.fetch(req) + rest.get('/repos/:owner/:repoName', async ({ request }) => { + const originalResponse = await ctx.fetch(request) const body = await originalResponse.json() - return res( - ctx.json({ - name: body.name, - stargazers_count: 9999, - }), - ) + return HttpResponse.json({ + name: body.name, + stargazers_count: 9999, + }) }), - rest.get('/headers', async (req, res, ctx) => { + rest.get('/headers', async ({ request }) => { const originalResponse = await ctx.fetch('/headers-proxy', { method: 'POST', - headers: req.headers.all(), + headers: request.headers, }) const body = await originalResponse.json() - return res(ctx.json(body)) + return HttpResponse.json(body) }), - rest.post('/posts', async (req, res, ctx) => { - const originalResponse = await ctx.fetch(req) + rest.post('/posts', async ({ request }) => { + const originalResponse = await ctx.fetch(request) const body = await originalResponse.json() - return res( - ctx.set('x-custom', originalResponse.headers.get('x-custom')), - ctx.json({ + return HttpResponse.json( + { ...body, mocked: true, - }), + }, + { + headers: { + 'X-Custom': originalResponse.headers.get('x-custom'), + }, + }, ) }), - rest.get('/posts', async (req, res, ctx) => { - const originalResponse = await ctx.fetch(req) + rest.get('/posts', async ({ request }) => { + const originalResponse = await ctx.fetch(request) const body = await originalResponse.json() - return res( - ctx.json({ - ...body, - mocked: true, - }), - ) + return HttpResponse.json({ + ...body, + mocked: true, + }) }), - rest.head('/posts', async (req, res, ctx) => { - const originalResponse = await ctx.fetch(req) - return res( - ctx.set('x-custom', originalResponse.headers.get('x-custom')), - ctx.json({ + rest.head('/posts', async ({ request }) => { + const originalResponse = await ctx.fetch(request) + + return HttpResponse.json( + { mocked: true, - }), + }, + { + headers: { + 'X-Custom': originalResponse.headers.get('x-custom'), + }, + }, ) }), ) diff --git a/test/rest-api/response/body/body-binary.mocks.ts b/test/rest-api/response/body/body-binary.mocks.ts index a66da52e9..8c244cd50 100644 --- a/test/rest-api/response/body/body-binary.mocks.ts +++ b/test/rest-api/response/body/body-binary.mocks.ts @@ -1,17 +1,17 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' import base64Image from 'url-loader!../../../fixtures/image.jpg' const worker = setupWorker( - rest.get('/images/:imageId', async (_, res, ctx) => { + rest.get('/images/:imageId', async () => { const imageBuffer = await fetch(base64Image).then((res) => res.arrayBuffer(), ) - return res( - ctx.set('Content-Length', imageBuffer.byteLength.toString()), - ctx.set('Content-Type', 'image/jpeg'), - ctx.body(imageBuffer), - ) + return HttpResponse.arrayBuffer(imageBuffer, { + headers: { + 'Content-Type': 'image/jpeg', + }, + }) }), ) diff --git a/test/rest-api/response/body/body-json.mocks.ts b/test/rest-api/response/body/body-json.mocks.ts index 44357b41f..63ea03cfa 100644 --- a/test/rest-api/response/body/body-json.mocks.ts +++ b/test/rest-api/response/body/body-json.mocks.ts @@ -1,11 +1,11 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/json', (req, res, ctx) => { - return res(ctx.json({ firstName: 'John' })) + rest.get('/json', () => { + return HttpResponse.json({ firstName: 'John' }) }), - rest.get('/number', (req, res, ctx) => { - return res(ctx.json(123)) + rest.get('/number', () => { + return HttpResponse.json(123) }), ) diff --git a/test/rest-api/response/body/body-text.mocks.ts b/test/rest-api/response/body/body-text.mocks.ts index 6ffc86a45..16523e7e6 100644 --- a/test/rest-api/response/body/body-text.mocks.ts +++ b/test/rest-api/response/body/body-text.mocks.ts @@ -1,8 +1,8 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/text', (req, res, ctx) => { - return res(ctx.text('hello world')) + rest.get('/text', () => { + return HttpResponse.text('hello world') }), ) diff --git a/test/rest-api/response/body/body-xml.mocks.ts b/test/rest-api/response/body/body-xml.mocks.ts index 37cf076bf..6ff367481 100644 --- a/test/rest-api/response/body/body-xml.mocks.ts +++ b/test/rest-api/response/body/body-xml.mocks.ts @@ -1,15 +1,13 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/user', (req, res, ctx) => { - return res( - ctx.xml(` + rest.get('/user', () => { + return HttpResponse.xml(` abc-123 John Maverick -`), - ) +`) }), ) From 49369e6e50c0c5c13ed3bd084c73a767c95fa058 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 8 Oct 2022 19:09:49 +0200 Subject: [PATCH 004/210] fix(HttpResponse): forward cookies in the browser only --- src/utils/HttpResponse.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/HttpResponse.ts b/src/utils/HttpResponse.ts index cf03a1e47..e0ae8b130 100644 --- a/src/utils/HttpResponse.ts +++ b/src/utils/HttpResponse.ts @@ -115,7 +115,7 @@ function decorateResponse( // Write the mocked response cookies to the document. const responseCookie = init?.headers?.get('Set-Cookie') - if (responseCookie) { + if (responseCookie && typeof document !== 'undefined') { /** * @todo Support multiple "Set-Cookie" response headers. */ From 3b947c7a5f34b3e0e6ba86108500dc49119f3345 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 8 Oct 2022 19:12:16 +0200 Subject: [PATCH 005/210] docs: update readme --- README.md | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 3b5590902..63d09a0c6 100644 --- a/README.md +++ b/README.md @@ -71,17 +71,19 @@ In-browser usage is what sets Mock Service Worker apart from other tools. Utiliz ```js // src/mocks.js // 1. Import the library. -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' // 2. Describe network behavior with request handlers. const worker = setupWorker( - rest.get('https://github.com/octocat', (req, res, ctx) => { - return res( - ctx.delay(1500), - ctx.status(202, 'Mocked status'), - ctx.json({ - message: 'Mocked response JSON body', - }), + rest.get('https://github.com/octocat', ({ request, params, cookies }) => { + return HttpResponse.json( + { + message: 'Mocked response', + }, + { + status: 202, + statusText: 'Mocked status', + }, ) }), ) @@ -118,7 +120,7 @@ Take a look at the example of an integration test in Jest that uses [React Testi // test/Dashboard.test.js import React from 'react' -import { rest } from 'msw' +import { rest, HttpResponse } from 'msw' import { setupServer } from 'msw/node' import { render, screen, waitFor } from '@testing-library/react' import Dashboard from '../src/components/Dashboard' @@ -127,19 +129,17 @@ const server = setupServer( // Describe network behavior with request handlers. // Tip: move the handlers into their own module and // import it across your browser and Node.js setups! - rest.get('/posts', (req, res, ctx) => { - return res( - ctx.json([ - { - id: 'f8dd058f-9006-4174-8d49-e3086bc39c21', - title: `Avoid Nesting When You're Testing`, - }, - { - id: '8ac96078-6434-4959-80ed-cc834e7fef61', - title: `How I Built A Modern Website In 2021`, - }, - ]), - ) + rest.get('/posts', ({ request, params, cookies }) => { + return HttpResponse.json([ + { + id: 'f8dd058f-9006-4174-8d49-e3086bc39c21', + title: `Avoid Nesting When You're Testing`, + }, + { + id: '8ac96078-6434-4959-80ed-cc834e7fef61', + title: `How I Built A Modern Website In 2021`, + }, + ]) }), ) From b909e4863b194075565bc0ece5895941bf4b16a2 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sun, 9 Oct 2022 17:53:31 +0200 Subject: [PATCH 006/210] fix(pruneGetRequestBody): support HEAD requests --- src/utils/request/pruneGetRequestBody.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/utils/request/pruneGetRequestBody.ts b/src/utils/request/pruneGetRequestBody.ts index d6f1e1ce7..7596bd843 100644 --- a/src/utils/request/pruneGetRequestBody.ts +++ b/src/utils/request/pruneGetRequestBody.ts @@ -1,5 +1,4 @@ import { ServiceWorkerIncomingRequest } from '../../setupWorker/glossary' -import { isStringEqual } from '../internal/isStringEqual' type Input = Pick @@ -11,7 +10,7 @@ export function pruneGetRequestBody( ): ServiceWorkerIncomingRequest['body'] { if ( request.method && - isStringEqual(request.method, 'GET') && + ['HEAD', 'GET'].includes(request.method.toUpperCase()) && request.body === '' ) { return undefined From f9840b7a0c4de4a95acf0c55cf2eff8ecc9f9ab9 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sun, 9 Oct 2022 17:53:50 +0200 Subject: [PATCH 007/210] chore: polyfill Request in jest tests --- jest.setup.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/jest.setup.js b/jest.setup.js index 50eb416a3..11e2b5108 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -1,6 +1,8 @@ const fetch = require('node-fetch') if (typeof window !== 'undefined') { + globalThis.Request = fetch.Request + // Provide "Headers" to be accessible in test cases // since they are not, by default. Object.defineProperty(window, 'Headers', { From b87724d04970d5ed6e6d41392ee7451cc17ac98f Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sun, 9 Oct 2022 17:54:34 +0200 Subject: [PATCH 008/210] feat: support "bypass" utility --- src/index.ts | 1 + src/utils/bypass.test.ts | 35 ++++++++++++++++++++++++ src/utils/bypass.ts | 28 +++++++++++++++++++ test/rest-api/response-patching.mocks.ts | 14 +++++----- 4 files changed, 71 insertions(+), 7 deletions(-) create mode 100644 src/utils/bypass.test.ts create mode 100644 src/utils/bypass.ts diff --git a/src/index.ts b/src/index.ts index def4f0f0a..ecc07437b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -62,3 +62,4 @@ export type { DelayMode } from './context/delay' export { ParsedGraphQLRequest } from './utils/internal/parseGraphQLRequest' export * from './utils/HttpResponse' +export { bypass } from './utils/bypass' diff --git a/src/utils/bypass.test.ts b/src/utils/bypass.test.ts new file mode 100644 index 000000000..9e1c33ea1 --- /dev/null +++ b/src/utils/bypass.test.ts @@ -0,0 +1,35 @@ +/** + * @jest-environment jsdom + */ +import { bypass } from './bypass' + +it('returns bypassed request given a request url string', () => { + const request = bypass('/user') + + expect(request.url).toBe('/user') + expect(request.headers.get('x-msw-bypass')).toBe('true') +}) + +it('returns bypassed request given a request url', () => { + const request = bypass(new URL('/user', 'https://api.github.com')) + + expect(request.url).toBe('https://api.github.com/user') + expect(request.headers.get('x-msw-bypass')).toBe('true') +}) + +it('returns bypassed request given request instance', async () => { + const original = new Request('/resource', { + method: 'POST', + headers: { + 'X-My-Header': 'value', + }, + body: 'hello world', + }) + const request = bypass(original) + + expect(request.method).toBe('POST') + expect(request.url).toBe('/resource') + expect(request.headers.get('x-msw-bypass')).toBe('true') + expect(request.headers.get('x-my-header')).toBe('value') + expect(await request.text()).toBe('hello world') +}) diff --git a/src/utils/bypass.ts b/src/utils/bypass.ts new file mode 100644 index 000000000..c39d3961d --- /dev/null +++ b/src/utils/bypass.ts @@ -0,0 +1,28 @@ +/** + * Creates a "Request" instance that, when fetched, will + * ignore any otherwise matching request handlers and will + * by performed against the actual network. + * + * @example + * bypass('/user') + * bypass(new URL('/resource', 'api.example.com')) + * bypass(new Request('/user')) + */ +export function bypass(input: string | URL | Request): Request { + const request = toRequest(input) + + // Set the custom MSW bypass header. + // The worker recognizes this header, strips it away, + // and performs the intercepted request as-is. + request.headers.set('x-msw-bypass', 'true') + + return request +} + +function toRequest(input: string | URL | Request): Request { + if (input instanceof Request) { + return input.clone() + } + + return new Request(input) +} diff --git a/test/rest-api/response-patching.mocks.ts b/test/rest-api/response-patching.mocks.ts index 34b0b3648..edf9490e6 100644 --- a/test/rest-api/response-patching.mocks.ts +++ b/test/rest-api/response-patching.mocks.ts @@ -1,8 +1,8 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { setupWorker, rest, HttpResponse, bypass } from 'msw' const worker = setupWorker( rest.get('/user', async () => { - const originalResponse = await ctx.fetch('/user') + const originalResponse = await fetch(bypass('/user')) const body = await originalResponse.json() return HttpResponse.json({ @@ -13,7 +13,7 @@ const worker = setupWorker( }), rest.get('/repos/:owner/:repoName', async ({ request }) => { - const originalResponse = await ctx.fetch(request) + const originalResponse = await fetch(bypass(request)) const body = await originalResponse.json() return HttpResponse.json({ @@ -23,7 +23,7 @@ const worker = setupWorker( }), rest.get('/headers', async ({ request }) => { - const originalResponse = await ctx.fetch('/headers-proxy', { + const originalResponse = await fetch(bypass('/headers-proxy'), { method: 'POST', headers: request.headers, }) @@ -33,7 +33,7 @@ const worker = setupWorker( }), rest.post('/posts', async ({ request }) => { - const originalResponse = await ctx.fetch(request) + const originalResponse = await fetch(bypass(request)) const body = await originalResponse.json() return HttpResponse.json( @@ -50,7 +50,7 @@ const worker = setupWorker( }), rest.get('/posts', async ({ request }) => { - const originalResponse = await ctx.fetch(request) + const originalResponse = await fetch(bypass(request)) const body = await originalResponse.json() return HttpResponse.json({ @@ -60,7 +60,7 @@ const worker = setupWorker( }), rest.head('/posts', async ({ request }) => { - const originalResponse = await ctx.fetch(request) + const originalResponse = await fetch(bypass(request)) return HttpResponse.json( { From 3315cd429b572c944d884f4f38cf6171fdd60b04 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sun, 9 Oct 2022 18:15:32 +0200 Subject: [PATCH 009/210] chore: update "headers-polyfill" to 3.1.2 --- package.json | 2 +- yarn.lock | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 338e7dc5e..b59219ee0 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "chokidar": "^3.4.2", "cookie": "^0.4.2", "graphql": "^15.0.0 || ^16.0.0", - "headers-polyfill": "^3.1.0", + "headers-polyfill": "^3.1.2", "inquirer": "^8.2.0", "is-node-process": "^1.0.1", "js-levenshtein": "^1.1.6", diff --git a/yarn.lock b/yarn.lock index 73e9f9d8f..bcb9cc503 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5498,6 +5498,11 @@ headers-polyfill@^3.1.0: resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-3.1.0.tgz#22135c594feb4d5efd56e5c7f587552b9feac0e7" integrity sha512-AVwgTAzeGpF7kwUCMc9HbAoCKFcHGEfmWkaI8g0jprrkh9VPRaofIsfV7Lw8UuR9pi4Rk7IIjJce8l0C+jSJNA== +headers-polyfill@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-3.1.2.tgz#9a4dcb545c5b95d9569592ef7ec0708aab763fbe" + integrity sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA== + headers-utils@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/headers-utils/-/headers-utils-3.0.2.tgz#dfc65feae4b0e34357308aefbcafa99c895e59ef" From aef1db1deb665d63c03fed649bdf7821efa0f55f Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sun, 9 Oct 2022 18:15:48 +0200 Subject: [PATCH 010/210] test(headers-multiple): separate headers by comma --- test/rest-api/headers-multiple.mocks.ts | 30 +++++++++++++------------ 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/test/rest-api/headers-multiple.mocks.ts b/test/rest-api/headers-multiple.mocks.ts index 27fedadee..edfe56be3 100644 --- a/test/rest-api/headers-multiple.mocks.ts +++ b/test/rest-api/headers-multiple.mocks.ts @@ -1,22 +1,24 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.post('https://test.mswjs.io', (req, res, ctx) => { - return res( - ctx.json({ - 'x-header': req.headers.get('x-header'), - }), - ) + rest.post('https://test.mswjs.io', ({ request }) => { + return HttpResponse.json({ + 'x-header': request.headers.get('x-header'), + }) }), - rest.get('https://test.mswjs.io', (req, res, ctx) => { - return res( - ctx.set({ - Accept: ['application/json', 'image/png'], - }), - ctx.json({ + rest.get('https://test.mswjs.io', () => { + return HttpResponse.json( + { mocked: true, - }), + }, + { + headers: { + // List header values separated by comma + // to set multie-value header on the mocked response. + Accept: 'application/json, image/png', + }, + }, ) }), ) From b44a993fa5309aac892bcece033dbfdf64226dae Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 10 Oct 2022 01:51:31 +0200 Subject: [PATCH 011/210] feat: support new api for graphql --- jest.config.js | 1 + src/graphql.ts | 6 +- src/handlers/GraphQLHandler.ts | 46 ++++++------ src/handlers/RequestHandler.ts | 10 +-- .../start/createRequestListener.ts | 4 +- src/utils/getResponse.ts | 2 +- src/utils/internal/parseGraphQLRequest.ts | 64 ++++++++++------- src/utils/request/getPublicUrlFromRequest.ts | 2 +- src/utils/request/onUnhandledRequest.ts | 17 +++-- test/graphql-api/cookies.mocks.ts | 20 ++++-- test/graphql-api/document-node.mocks.ts | 34 ++++----- test/graphql-api/errors.mocks.ts | 12 ++-- test/graphql-api/extensions.mocks.ts | 24 ++++--- test/graphql-api/link.mocks.ts | 71 +++++++++++-------- test/graphql-api/logging.mocks.ts | 38 +++++----- test/graphql-api/multipart-data.mocks.ts | 19 ++--- test/graphql-api/mutation.mocks.ts | 12 ++-- test/graphql-api/operation-reference.mocks.ts | 30 ++++---- test/graphql-api/operation.mocks.ts | 16 ++--- test/graphql-api/query.mocks.ts | 12 ++-- test/graphql-api/query.test.ts | 4 +- test/graphql-api/response-patching.mocks.ts | 16 ++--- test/graphql-api/variables.mocks.ts | 40 +++++------ test/rest-api/body.mocks.ts | 43 ++++++----- 24 files changed, 301 insertions(+), 242 deletions(-) diff --git a/jest.config.js b/jest.config.js index 516f8170e..fe8696b85 100644 --- a/jest.config.js +++ b/jest.config.js @@ -7,4 +7,5 @@ module.exports = { testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.(j|t)sx?$', moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'], setupFiles: ['./jest.setup.js'], + timeout: 9999999, } diff --git a/src/graphql.ts b/src/graphql.ts index a0a26626e..837bf06da 100644 --- a/src/graphql.ts +++ b/src/graphql.ts @@ -6,6 +6,7 @@ import { GraphQLVariables, ExpectedOperationTypeNode, GraphQLHandlerNameSelector, + GraphQLResolverExtras, } from './handlers/GraphQLHandler' import { Path } from './utils/matching/matchRequestUrl' @@ -30,7 +31,10 @@ function createScopedGraphQLHandler( | GraphQLHandlerNameSelector | DocumentNode | TypedDocumentNode, - resolver: ResponseResolver>, + resolver: ResponseResolver< + GraphQLContext, + GraphQLResolverExtras + >, ) => { return new GraphQLHandler(operationType, operationName, url, resolver) } diff --git a/src/handlers/GraphQLHandler.ts b/src/handlers/GraphQLHandler.ts index c012b82b0..7769e5789 100644 --- a/src/handlers/GraphQLHandler.ts +++ b/src/handlers/GraphQLHandler.ts @@ -1,5 +1,5 @@ import type { DocumentNode, OperationTypeNode } from 'graphql' -import { SerializedResponse } from '../setupWorker/glossary' +import { type SerializedResponse } from '../setupWorker/glossary' import { data } from '../context/data' import { extensions } from '../context/extensions' import { errors } from '../context/errors' @@ -25,7 +25,6 @@ import { parseDocumentNode, } from '../utils/internal/parseGraphQLRequest' import { getPublicUrlFromRequest } from '../utils/request/getPublicUrlFromRequest' -import { tryCatch } from '../utils/internal/tryCatch' import { devUtils } from '../utils/internal/devUtils' export type ExpectedOperationTypeNode = OperationTypeNode | 'all' @@ -59,6 +58,11 @@ export interface GraphQLHandlerInfo extends RequestHandlerDefaultInfo { operationName: GraphQLHandlerNameSelector } +export type GraphQLResolverExtras = { + query: string + variables: Variables +} + export type GraphQLRequestBody = | GraphQLJsonRequestBody | GraphQLMultipartRequestBody @@ -80,24 +84,11 @@ export function isDocumentNode( return typeof value === 'object' && 'kind' in value && 'definitions' in value } -// export class GraphQLRequest< -// Variables extends GraphQLVariables, -// > extends Request { -// constructor(request: Request, public readonly variables: Variables) { -// super(request.url, { -// ...request, -// /** -// * TODO(https://github.com/mswjs/msw/issues/1318): Cleanup -// */ -// body: request['_body'], -// }) -// } -// } - export class GraphQLHandler extends RequestHandler< GraphQLHandlerInfo, // @ts-ignore @todo - ParsedGraphQLRequest + ParsedGraphQLRequest, + GraphQLResolverExtras > { private endpoint: Path @@ -105,7 +96,7 @@ export class GraphQLHandler extends RequestHandler< operationType: ExpectedOperationTypeNode, operationName: GraphQLHandlerNameSelector, endpoint: Path, - resolver: ResponseResolver, any>, + resolver: ResponseResolver, GraphQLResolverExtras>, ) { let resolvedOperationName = operationName @@ -146,10 +137,10 @@ export class GraphQLHandler extends RequestHandler< } override async parse(request: Request) { - return tryCatch( - () => parseGraphQLRequest(request), - (error) => console.error(error.message), - ) + return parseGraphQLRequest(request).catch((error) => { + console.error(error) + return undefined + }) } override predicate(request: Request, parsedResult: ParsedGraphQLRequest) { @@ -159,6 +150,7 @@ export class GraphQLHandler extends RequestHandler< if (!parsedResult.operationName && this.info.operationType !== 'all') { const publicUrl = getPublicUrlFromRequest(request) + devUtils.warn(`\ Failed to intercept a GraphQL request at "${request.method} ${publicUrl}": anonymous GraphQL operations are not supported. @@ -184,6 +176,16 @@ Consider naming this operation or using "graphql.operation" request handler to i ) } + protected override extendInfo( + _request: Request, + parsedResult: ParsedGraphQLRequest, + ) { + return { + query: parsedResult?.query || '', + variables: parsedResult?.variables || {}, + } + } + override log( request: Request, response: SerializedResponse, diff --git a/src/handlers/RequestHandler.ts b/src/handlers/RequestHandler.ts index 3a7f58cc1..729cabba0 100644 --- a/src/handlers/RequestHandler.ts +++ b/src/handlers/RequestHandler.ts @@ -156,7 +156,7 @@ export abstract class RequestHandler< ): Promise { return this.predicate( request, - await this.parse(request, resolutionContext), + await this.parse(request.clone(), resolutionContext), resolutionContext, ) } @@ -184,9 +184,11 @@ export abstract class RequestHandler< return null } - const parsedResult = await this.parse(request, resolutionContext) + const requestClone = request.clone() + + const parsedResult = await this.parse(requestClone, resolutionContext) const shouldInterceptRequest = this.predicate( - request, + requestClone, parsedResult, resolutionContext, ) @@ -199,7 +201,7 @@ export abstract class RequestHandler< // since it can be both an async function and a generator. const executeResolver = this.wrapResolver(this.resolver) - const resolverExtras = this.extendInfo(request, parsedResult) + const resolverExtras = this.extendInfo(requestClone, parsedResult) const mockedResponse = await executeResolver({ ...resolverExtras, request, diff --git a/src/setupWorker/start/createRequestListener.ts b/src/setupWorker/start/createRequestListener.ts index 5de2417de..dc1ed837b 100644 --- a/src/setupWorker/start/createRequestListener.ts +++ b/src/setupWorker/start/createRequestListener.ts @@ -116,11 +116,11 @@ This exception has been gracefully handled as a 500 response, however, it's stro headers: { 'Content-Type': 'application/json', }, - body: { + body: JSON.stringify({ name: error.name, message: error.message, stack: error.stack, - }, + }), }) } } diff --git a/src/utils/getResponse.ts b/src/utils/getResponse.ts index 8dc79c9e5..41894f790 100644 --- a/src/utils/getResponse.ts +++ b/src/utils/getResponse.ts @@ -31,7 +31,7 @@ export const getResponse = async >( resolutionContext?: ResponseResolutionContext, ): Promise => { const relevantHandlers = await filterAsync(handlers, (handler) => { - return handler.test(request, resolutionContext) + return handler.test(request, resolutionContext).catch(() => false) }) if (relevantHandlers.length === 0) { diff --git a/src/utils/internal/parseGraphQLRequest.ts b/src/utils/internal/parseGraphQLRequest.ts index 10d3a3ca7..e6c89340d 100644 --- a/src/utils/internal/parseGraphQLRequest.ts +++ b/src/utils/internal/parseGraphQLRequest.ts @@ -4,10 +4,11 @@ import type { OperationTypeNode, } from 'graphql' import { parse } from 'graphql' -import { GraphQLVariables } from '../../handlers/GraphQLHandler' +import { type GraphQLVariables } from '../../handlers/GraphQLHandler' import { getPublicUrlFromRequest } from '../request/getPublicUrlFromRequest' import { devUtils } from './devUtils' import { jsonParse } from './jsonParse' +import { parseMultipartData } from './parseMultipartData' interface GraphQLInput { query: string | null @@ -23,13 +24,14 @@ export type ParsedGraphQLRequest< VariablesType extends GraphQLVariables = GraphQLVariables, > = | (ParsedGraphQLQuery & { + query: string variables?: VariablesType }) | undefined export function parseDocumentNode(node: DocumentNode): ParsedGraphQLQuery { - const operationDef = node.definitions.find((def) => { - return def.kind === 'OperationDefinition' + const operationDef = node.definitions.find((definition) => { + return definition.kind === 'OperationDefinition' }) as OperationDefinitionNode return { @@ -61,6 +63,7 @@ function extractMultipartVariables( files: Record, ) { const operations = { variables } + for (const [key, pathArray] of Object.entries(map)) { if (!(key in files)) { throw new Error(`Given files do not have a key '${key}' .`) @@ -82,16 +85,17 @@ function extractMultipartVariables( target[lastPath] = files[key] } } + return operations.variables } async function getGraphQLInput(request: Request): Promise { - const searchParams = new URLSearchParams(request.url) + const url = new URL(request.url) switch (request.method) { case 'GET': { - const query = searchParams.get('query') - const variables = searchParams.get('variables') || '' + const query = url.searchParams.get('query') + const variables = url.searchParams.get('variables') || '' return { query, @@ -100,27 +104,20 @@ async function getGraphQLInput(request: Request): Promise { } case 'POST': { - const requestText = await request.text() - const requestJson = jsonParse<{ - query: string - variables?: GraphQLVariables - operations?: any - }>(requestText) - - if (requestJson?.query) { - const { query, variables } = requestJson - - return { - query, - variables, + // Handle multipart body GraphQL operations. + if ( + request.headers.get('content-type')?.includes('multipart/form-data') + ) { + const responseJson = parseMultipartData( + await request.text(), + request.headers, + ) + + if (!responseJson) { + return null } - } - - // Handle multipart body operations. - if (requestJson?.operations) { - const { operations, map, ...files } = - requestJson as unknown as GraphQLMultipartRequestBody + const { operations, map, ...files } = responseJson const parsedOperations = jsonParse<{ query?: string; variables?: GraphQLVariables }>( operations, @@ -144,6 +141,22 @@ async function getGraphQLInput(request: Request): Promise { variables, } } + + // Handle plain POST GraphQL operations. + const requestJson: { + query: string + variables?: GraphQLVariables + operations?: any /** @todo Annotate this */ + } = await request.json().catch(() => null) + + if (requestJson?.query) { + const { query, variables } = requestJson + + return { + query, + variables, + } + } } default: @@ -181,6 +194,7 @@ export async function parseGraphQLRequest( } return { + query: input.query, operationType: parsedResult.operationType, operationName: parsedResult.operationName, variables, diff --git a/src/utils/request/getPublicUrlFromRequest.ts b/src/utils/request/getPublicUrlFromRequest.ts index ea35f39af..12c233412 100644 --- a/src/utils/request/getPublicUrlFromRequest.ts +++ b/src/utils/request/getPublicUrlFromRequest.ts @@ -5,7 +5,7 @@ export function getPublicUrlFromRequest(request: Request): string { const url = new URL(request.url) - return request.referrer.startsWith(origin) + return url.origin === origin ? url.pathname : new URL(url.pathname, `${url.protocol}//${url.host}`).href } diff --git a/src/utils/request/onUnhandledRequest.ts b/src/utils/request/onUnhandledRequest.ts index 9f89f5d42..b98b9e1aa 100644 --- a/src/utils/request/onUnhandledRequest.ts +++ b/src/utils/request/onUnhandledRequest.ts @@ -7,8 +7,7 @@ import { getPublicUrlFromRequest } from './getPublicUrlFromRequest' import { isStringEqual } from '../internal/isStringEqual' import { RestHandler } from '../../handlers/RestHandler' import { GraphQLHandler } from '../../handlers/GraphQLHandler' -import { RequestHandler } from '../../handlers/RequestHandler' -import { tryCatch } from '../internal/tryCatch' +import { type RequestHandler } from '../../handlers/RequestHandler' import { devUtils } from '../internal/devUtils' const MAX_MATCH_SCORE = 3 @@ -36,7 +35,9 @@ interface RequestHandlerGroups { graphql: Array } -function groupHandlersByType(handlers: RequestHandler[]): RequestHandlerGroups { +function groupHandlersByType( + handlers: Array, +): RequestHandlerGroups { return handlers.reduce( (groups, handler) => { if (handler instanceof RestHandler) { @@ -110,8 +111,8 @@ function getSuggestedHandler( handlers: Array | Array, getScore: ScoreGetterFn | ScoreGetterFn, ): RequestHandler[] { - const suggestedHandlers = (handlers as RequestHandler[]) - .reduce((suggestions, handler) => { + const suggestedHandlers = (handlers as Array) + .reduce>((suggestions, handler) => { const score = getScore(request, handler as any) return suggestions.concat([[score, handler]]) }, []) @@ -136,10 +137,12 @@ ${handlers.map((handler) => ` • ${handler.info.header}`).join('\n')}` export async function onUnhandledRequest( request: Request, - handlers: RequestHandler[], + handlers: Array, strategy: UnhandledRequestStrategy = 'warn', ): Promise { - const parsedGraphQLQuery = await tryCatch(() => parseGraphQLRequest(request)) + const parsedGraphQLQuery = await parseGraphQLRequest(request).catch( + () => null, + ) function generateHandlerSuggestion(): string { /** diff --git a/test/graphql-api/cookies.mocks.ts b/test/graphql-api/cookies.mocks.ts index 66c5460cb..197395a35 100644 --- a/test/graphql-api/cookies.mocks.ts +++ b/test/graphql-api/cookies.mocks.ts @@ -1,12 +1,18 @@ -import { setupWorker, graphql } from 'msw' +import { setupWorker, graphql, HttpResponse } from 'msw' const worker = setupWorker( - graphql.query('GetUser', (req, res, ctx) => { - return res( - ctx.cookie('test-cookie', 'value'), - ctx.data({ - firstName: 'John', - }), + graphql.query('GetUser', () => { + return HttpResponse.json( + { + data: { + firstName: 'John', + }, + }, + { + headers: { + 'Set-Cookie': 'test-cookie=value', + }, + }, ) }), ) diff --git a/test/graphql-api/document-node.mocks.ts b/test/graphql-api/document-node.mocks.ts index 399118d0c..b126ede62 100644 --- a/test/graphql-api/document-node.mocks.ts +++ b/test/graphql-api/document-node.mocks.ts @@ -1,5 +1,5 @@ import { parse } from 'graphql' -import { setupWorker, graphql } from 'msw' +import { setupWorker, graphql, HttpResponse } from 'msw' const GetUser = parse(` query GetUser { @@ -32,38 +32,38 @@ const github = graphql.link('https://api.github.com/graphql') const worker = setupWorker( // "DocumentNode" can be used as the expected query/mutation. - graphql.query(GetUser, (req, res, ctx) => { - return res( - ctx.data({ + graphql.query(GetUser, () => { + return HttpResponse.json({ + data: { // Note that inferring the query body and variables // is impossible with the native "DocumentNode". // Consider using tools like GraphQL Code Generator. user: { firstName: 'John', }, - }), - ) + }, + }) }), - graphql.mutation(Login, (req, res, ctx) => { - return res( - ctx.data({ + graphql.mutation(Login, ({ variables }) => { + return HttpResponse.json({ + data: { session: { id: 'abc-123', }, user: { - username: req.variables.username, + username: variables.username, }, - }), - ) + }, + }) }), - github.query(GetSubscription, (req, res, ctx) => { - return res( - ctx.data({ + github.query(GetSubscription, () => { + return HttpResponse.json({ + data: { subscription: { id: 123, }, - }), - ) + }, + }) }), ) diff --git a/test/graphql-api/errors.mocks.ts b/test/graphql-api/errors.mocks.ts index 46fe08634..35a69f1f5 100644 --- a/test/graphql-api/errors.mocks.ts +++ b/test/graphql-api/errors.mocks.ts @@ -1,9 +1,9 @@ -import { setupWorker, graphql } from 'msw' +import { setupWorker, graphql, HttpResponse } from 'msw' const worker = setupWorker( - graphql.query('Login', (req, res, ctx) => { - return res( - ctx.errors([ + graphql.query('Login', () => { + return HttpResponse.json({ + errors: [ { message: 'This is a mocked error', locations: [ @@ -13,8 +13,8 @@ const worker = setupWorker( }, ], }, - ]), - ) + ], + }) }), ) diff --git a/test/graphql-api/extensions.mocks.ts b/test/graphql-api/extensions.mocks.ts index 28246c6db..99b648c27 100644 --- a/test/graphql-api/extensions.mocks.ts +++ b/test/graphql-api/extensions.mocks.ts @@ -1,23 +1,31 @@ -import { setupWorker, graphql } from 'msw' +import { setupWorker, graphql, HttpResponse } from 'msw' + +interface LoginQuery { + user: { + id: number + name: string + password: string + } +} const worker = setupWorker( - graphql.query('Login', (_req, res, ctx) => { - return res( - ctx.data({ + graphql.query('Login', () => { + return HttpResponse.json({ + data: { user: { id: 1, name: 'Joe Bloggs', password: 'HelloWorld!', }, - }), - ctx.extensions({ + }, + extensions: { message: 'This is a mocked extension', tracking: { version: '0.1.2', page: '/test/', }, - }), - ) + }, + }) }), ) diff --git a/test/graphql-api/link.mocks.ts b/test/graphql-api/link.mocks.ts index 8481c35b7..b2f03b2e6 100644 --- a/test/graphql-api/link.mocks.ts +++ b/test/graphql-api/link.mocks.ts @@ -1,4 +1,4 @@ -import { setupWorker, graphql } from 'msw' +import { setupWorker, graphql, HttpResponse } from 'msw' const github = graphql.link('https://api.github.com/graphql') const stripe = graphql.link('https://api.stripe.com/graphql') @@ -24,36 +24,51 @@ interface GetUserQuery { } const worker = setupWorker( - github.query('GetUser', (req, res, ctx) => { - return res( - ctx.data({ - user: { - id: '46cfe8ff-a79b-42af-9699-b56e2239d1bb', - username: req.variables.username, + github.query( + 'GetUser', + ({ variables }) => { + return HttpResponse.json({ + data: { + user: { + id: '46cfe8ff-a79b-42af-9699-b56e2239d1bb', + username: variables.username, + }, }, - }), - ) - }), - stripe.mutation('Payment', (req, res, ctx) => { - return res( - ctx.data({ - bankAccount: { - totalFunds: 100 + req.variables.amount, + }) + }, + ), + stripe.mutation( + 'Payment', + ({ variables }) => { + return HttpResponse.json({ + data: { + bankAccount: { + totalFunds: 100 + variables.amount, + }, }, - }), - ) - }), - graphql.query('GetUser', (req, res, ctx) => { - return res( - ctx.set('x-request-handler', 'fallback'), - ctx.data({ - user: { - id: '46cfe8ff-a79b-42af-9699-b56e2239d1bb', - username: req.variables.username, + }) + }, + ), + graphql.query( + 'GetUser', + ({ variables }) => { + return HttpResponse.json( + { + data: { + user: { + id: '46cfe8ff-a79b-42af-9699-b56e2239d1bb', + username: variables.username, + }, + }, }, - }), - ) - }), + { + headers: { + 'X-Request-Handler': 'fallback', + }, + }, + ) + }, + ), ) worker.start() diff --git a/test/graphql-api/logging.mocks.ts b/test/graphql-api/logging.mocks.ts index 515fae03c..d5242b29e 100644 --- a/test/graphql-api/logging.mocks.ts +++ b/test/graphql-api/logging.mocks.ts @@ -1,4 +1,4 @@ -import { setupWorker, graphql } from 'msw' +import { setupWorker, graphql, HttpResponse } from 'msw' interface GetUserDetailQuery { user: { @@ -14,31 +14,35 @@ interface LoginQuery { } const worker = setupWorker( - graphql.query('GetUserDetail', (req, res, ctx) => { - return res( - ctx.data({ + graphql.query('GetUserDetail', () => { + return HttpResponse.json({ + data: { user: { firstName: 'John', lastName: 'Maverick', }, - }), - ) + }, + }) }), - graphql.mutation('Login', (req, res, ctx) => { - return res( - ctx.data({ + graphql.mutation('Login', () => { + return HttpResponse.json({ + data: { user: { id: 'abc-123', }, - }), - ) + }, + }) }), - graphql.operation((req, res, ctx) => { - return res( - ctx.status(301), - ctx.data({ - ok: true, - }), + graphql.operation(() => { + return HttpResponse.json( + { + data: { + ok: true, + }, + }, + { + status: 301, + }, ) }), ) diff --git a/test/graphql-api/multipart-data.mocks.ts b/test/graphql-api/multipart-data.mocks.ts index f1512c6bd..b889744ea 100644 --- a/test/graphql-api/multipart-data.mocks.ts +++ b/test/graphql-api/multipart-data.mocks.ts @@ -1,4 +1,4 @@ -import { setupWorker, graphql } from 'msw' +import { setupWorker, graphql, HttpResponse } from 'msw' const worker = setupWorker( graphql.mutation< @@ -6,29 +6,30 @@ const worker = setupWorker( multipart: { file1?: string file2?: string - files?: string[] + files?: Array plainText?: string } }, { file1?: File file2?: File - files?: File[] + files?: Array plainText?: string } - >('UploadFile', async (req, res, ctx) => { - const { file1, file2, files = [], plainText } = req.variables + >('UploadFile', async ({ variables }) => { + const { file1, file2, files = [], plainText } = variables const filesResponse = await Promise.all(files.map((file) => file.text())) - return res( - ctx.data({ + + return HttpResponse.json({ + data: { multipart: { file1: await file1?.text(), file2: await file2?.text(), files: filesResponse, plainText, }, - }), - ) + }, + }) }), ) diff --git a/test/graphql-api/mutation.mocks.ts b/test/graphql-api/mutation.mocks.ts index e748425c1..897fda676 100644 --- a/test/graphql-api/mutation.mocks.ts +++ b/test/graphql-api/mutation.mocks.ts @@ -1,4 +1,4 @@ -import { setupWorker, graphql } from 'msw' +import { setupWorker, graphql, HttpResponse } from 'msw' interface LogoutQuery { logout: { @@ -7,14 +7,14 @@ interface LogoutQuery { } const worker = setupWorker( - graphql.mutation('Logout', (req, res, ctx) => { - return res( - ctx.data({ + graphql.mutation('Logout', () => { + return HttpResponse.json({ + data: { logout: { userSession: false, }, - }), - ) + }, + }) }), ) diff --git a/test/graphql-api/operation-reference.mocks.ts b/test/graphql-api/operation-reference.mocks.ts index f291c5c88..66ec325e7 100644 --- a/test/graphql-api/operation-reference.mocks.ts +++ b/test/graphql-api/operation-reference.mocks.ts @@ -1,21 +1,21 @@ -import { setupWorker, graphql } from 'msw' +import { setupWorker, graphql, HttpResponse } from 'msw' const worker = setupWorker( - graphql.query('GetUser', (req, res, ctx) => { - return res( - ctx.data({ - query: req.body.query, - variables: req.body.variables, - }), - ) + graphql.query('GetUser', async ({ query, variables }) => { + return HttpResponse.json({ + data: { + query, + variables, + }, + }) }), - graphql.mutation('Login', (req, res, ctx) => { - return res( - ctx.data({ - query: req.body.query, - variables: req.body.variables, - }), - ) + graphql.mutation('Login', ({ query, variables }) => { + return HttpResponse.json({ + data: { + query, + variables, + }, + }) }), ) diff --git a/test/graphql-api/operation.mocks.ts b/test/graphql-api/operation.mocks.ts index d1f56b2fb..ce7dcf1c2 100644 --- a/test/graphql-api/operation.mocks.ts +++ b/test/graphql-api/operation.mocks.ts @@ -1,13 +1,13 @@ -import { setupWorker, graphql } from 'msw' +import { setupWorker, graphql, HttpResponse } from 'msw' const worker = setupWorker( - graphql.operation((req, res, ctx) => { - return res( - ctx.data({ - query: req.body.query, - variables: req.body.variables, - }), - ) + graphql.operation(async ({ query, variables }) => { + return HttpResponse.json({ + data: { + query, + variables, + }, + }) }), ) diff --git a/test/graphql-api/query.mocks.ts b/test/graphql-api/query.mocks.ts index e701b1326..249fb8f24 100644 --- a/test/graphql-api/query.mocks.ts +++ b/test/graphql-api/query.mocks.ts @@ -1,4 +1,4 @@ -import { setupWorker, graphql } from 'msw' +import { setupWorker, graphql, HttpResponse } from 'msw' interface GetUserDetailQuery { user: { @@ -8,15 +8,15 @@ interface GetUserDetailQuery { } const worker = setupWorker( - graphql.query('GetUserDetail', (req, res, ctx) => { - return res( - ctx.data({ + graphql.query('GetUserDetail', () => { + return HttpResponse.json({ + data: { user: { firstName: 'John', lastName: 'Maverick', }, - }), - ) + }, + }) }), ) diff --git a/test/graphql-api/query.test.ts b/test/graphql-api/query.test.ts index 96e978225..6c54cdd88 100644 --- a/test/graphql-api/query.test.ts +++ b/test/graphql-api/query.test.ts @@ -50,7 +50,7 @@ test('mocks a GraphQL query issued with a GET request', async () => { const headers = await res.allHeaders() const body = await res.json() - expect(res.status()).toEqual(200) + expect(res.status()).toBe(200) expect(headers).toHaveProperty('content-type', 'application/json') expect(body).toEqual({ data: { @@ -84,7 +84,7 @@ test('mocks a GraphQL query issued with a POST request', async () => { const headers = await res.allHeaders() const body = await res.json() - expect(res.status()).toEqual(200) + expect(res.status()).toBe(200) expect(headers).toHaveProperty('content-type', 'application/json') expect(body).toEqual({ data: { diff --git a/test/graphql-api/response-patching.mocks.ts b/test/graphql-api/response-patching.mocks.ts index 880bbedf2..1b257371d 100644 --- a/test/graphql-api/response-patching.mocks.ts +++ b/test/graphql-api/response-patching.mocks.ts @@ -1,4 +1,4 @@ -import { setupWorker, graphql } from 'msw' +import { setupWorker, graphql, bypass, HttpResponse } from 'msw' import { createGraphQLClient, gql } from '../support/graphql' interface GetUserQuery { @@ -9,19 +9,19 @@ interface GetUserQuery { } const worker = setupWorker( - graphql.query('GetUser', async (req, res, ctx) => { - const originalResponse = await ctx.fetch(req) + graphql.query('GetUser', async ({ request }) => { + const originalResponse = await fetch(bypass(request)) const originalJson = await originalResponse.json() - return res( - ctx.data({ + return HttpResponse.json({ + data: { user: { firstName: 'Christian', lastName: originalJson.data?.user?.lastName, }, - }), - ctx.errors(originalJson.errors), - ) + }, + errors: originalJson.errors, + }) }), ) diff --git a/test/graphql-api/variables.mocks.ts b/test/graphql-api/variables.mocks.ts index 9e7c2fc4a..48f1c9a6a 100644 --- a/test/graphql-api/variables.mocks.ts +++ b/test/graphql-api/variables.mocks.ts @@ -1,4 +1,4 @@ -import { setupWorker, graphql } from 'msw' +import { setupWorker, graphql, HttpResponse } from 'msw' interface GetGitHubUserQuery { user: { @@ -28,55 +28,55 @@ interface GetActiveUserQuery { } interface GetActiveUserQueryVariables { - foo: string + userId: string } const worker = setupWorker( graphql.query( 'GetGithubUser', - (req, res, ctx) => { - const { username } = req.variables + ({ variables }) => { + const { username } = variables - return res( - ctx.data({ + return HttpResponse.json({ + data: { user: { username, firstName: 'John', }, - }), - ) + }, + }) }, ), graphql.mutation( 'DeletePost', - (req, res, ctx) => { - const { postId } = req.variables + ({ variables }) => { + const { postId } = variables - return res( - ctx.data({ + return HttpResponse.json({ + data: { deletePost: { postId, }, - }), - ) + }, + }) }, ), graphql.query( 'GetActiveUser', - (req, res, ctx) => { + ({ variables }) => { // Intentionally unused variable // eslint-disable-next-line - const { foo } = req.variables + const { userId } = variables - return res( - ctx.data({ + return HttpResponse.json({ + data: { user: { id: 1, }, - }), - ) + }, + }) }, ), ) diff --git a/test/rest-api/body.mocks.ts b/test/rest-api/body.mocks.ts index ead939479..4b72542dc 100644 --- a/test/rest-api/body.mocks.ts +++ b/test/rest-api/body.mocks.ts @@ -1,43 +1,42 @@ import { ResponseResolver, RestContext, - MockedRequest, setupWorker, rest, + HttpResponse, } from 'msw' -const handleRequestBody: ResponseResolver = ( - req, - res, - ctx, -) => { - const { body } = req +const handleRequestBody: ResponseResolver = async ({ + request, +}) => { + const text = await request.text() + console.log({ request, text }) - return res(ctx.json({ body })) + return new Response(text, { headers: request.headers }) } -const handleMultipartRequestBody: ResponseResolver< - MockedRequest, - RestContext -> = async (req, res, ctx) => { - const { body } = req +const handleMultipartRequestBody: ResponseResolver = async ({ + request, +}) => { + const body = await request.json() - if (typeof body !== 'object') { - throw new Error( - 'Expected multipart request body to be parsed but got string', - ) - } + // if (typeof body !== 'object') { + // throw new Error( + // 'Expected multipart request body to be parsed but got string', + // ) + // } + + const responseBody: Record = {} - const resBody: Record = {} for (const [name, value] of Object.entries(body)) { if (value instanceof File) { - resBody[name] = await value.text() + responseBody[name] = await value.text() } else { - resBody[name] = value as string + responseBody[name] = value } } - return res(ctx.json({ body: resBody })) + return HttpResponse.json(responseBody) } const worker = setupWorker( From 71753c3b079419504cc5bdfff0d236d636539fb3 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 10 Oct 2022 19:05:55 +0200 Subject: [PATCH 012/210] chore: migrate "msw-api" tests --- src/{utils => }/NetworkError.ts | 0 src/index.ts | 1 + src/response.ts | 2 +- .../start/createRequestListener.ts | 2 +- src/utils/HttpResponse.ts | 8 ++++++ test/msw-api/hard-reload.mocks.ts | 12 ++++---- test/msw-api/integrity-check-invalid.mocks.ts | 8 ++++-- test/msw-api/integrity-check-valid.mocks.ts | 6 ++-- .../msw-api/regression/handle-stream.mocks.ts | 4 +-- test/msw-api/regression/null-body.mocks.ts | 6 ++-- test/msw-api/res/network-error.mocks.ts | 6 ++-- test/msw-api/res/network-error.node.test.ts | 6 ++-- .../setup-worker/input-validation.mocks.ts | 6 ++-- .../life-cycle-events/on.mocks.ts | 16 +++++------ .../scenarios/custom-transformers.mocks.ts | 20 ++++++------- .../scenarios/errors/network-error.mocks.ts | 6 ++-- .../scenarios/fall-through.mocks.ts | 4 +-- .../scenarios/iframe/iframe.mocks.ts | 6 ++-- .../scenarios/text-event-stream.mocks.ts | 10 +++++-- .../msw-api/setup-worker/start/error.mocks.ts | 4 +-- .../start/find-worker.error.mocks.ts | 4 +-- .../setup-worker/start/find-worker.mocks.ts | 4 +-- .../on-unhandled-request/bypass.mocks.ts | 6 ++-- .../callback-print.mocks.ts | 13 +++++---- .../callback-throws.mocks.ts | 10 +++---- .../on-unhandled-request/callback.mocks.ts | 10 +++---- .../on-unhandled-request/default.mocks.ts | 6 ++-- .../start/on-unhandled-request/error.mocks.ts | 6 ++-- .../start/on-unhandled-request/warn.mocks.ts | 6 ++-- .../start/options-sw-scope.mocks.ts | 6 ++-- .../msw-api/setup-worker/start/quiet.mocks.ts | 14 ++++------ .../msw-api/setup-worker/start/start.mocks.ts | 4 +-- .../start/wait-until-ready.error.mocks.ts | 10 +++---- .../start/wait-until-ready.false.mocks.ts | 10 +++---- .../start/wait-until-ready.mocks.ts | 10 +++---- test/msw-api/setup-worker/stop.mocks.ts | 6 ++-- .../stop/removes-all-listeners.mocks.ts | 6 ++-- test/msw-api/setup-worker/use.mocks.ts | 8 ++++-- test/msw-api/setup-worker/use.test.ts | 28 +++++++++++-------- test/msw-api/unregister.mocks.ts | 12 ++++---- 40 files changed, 164 insertions(+), 148 deletions(-) rename src/{utils => }/NetworkError.ts (100%) diff --git a/src/utils/NetworkError.ts b/src/NetworkError.ts similarity index 100% rename from src/utils/NetworkError.ts rename to src/NetworkError.ts diff --git a/src/index.ts b/src/index.ts index ecc07437b..4697fb74c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -63,3 +63,4 @@ export { ParsedGraphQLRequest } from './utils/internal/parseGraphQLRequest' export * from './utils/HttpResponse' export { bypass } from './utils/bypass' +export { NetworkError } from './NetworkError' diff --git a/src/response.ts b/src/response.ts index 674ffbd42..e77ffbd77 100644 --- a/src/response.ts +++ b/src/response.ts @@ -1,7 +1,7 @@ import { Headers } from 'headers-polyfill' import { DefaultBodyType } from './handlers/RequestHandler' import { compose } from './utils/internal/compose' -import { NetworkError } from './utils/NetworkError' +import { NetworkError } from './NetworkError' export type MaybePromise = ValueType | Promise diff --git a/src/setupWorker/start/createRequestListener.ts b/src/setupWorker/start/createRequestListener.ts index dc1ed837b..fe0e731dc 100644 --- a/src/setupWorker/start/createRequestListener.ts +++ b/src/setupWorker/start/createRequestListener.ts @@ -7,7 +7,7 @@ import { ServiceWorkerMessage, WorkerChannel, } from './utils/createMessageChannel' -import { NetworkError } from '../../utils/NetworkError' +import { NetworkError } from '../../NetworkError' import { parseWorkerRequest } from '../../utils/request/parseWorkerRequest' import { handleRequest } from '../../utils/handleRequest' import { RequiredDeep } from '../../typeUtils' diff --git a/src/utils/HttpResponse.ts b/src/utils/HttpResponse.ts index e0ae8b130..af618fb1c 100644 --- a/src/utils/HttpResponse.ts +++ b/src/utils/HttpResponse.ts @@ -13,6 +13,14 @@ export interface HttpResponseDecoratedInit extends HttpResponseInit { } export const HttpResponse = { + plain( + body?: BodyType, + init?: HttpResponseInit, + ): Response { + const responseInit = decorateResponseInit(init) + return createResponse(body, responseInit) + }, + /** * Define a `Response` with a `Content-Type: "text/plain"` body. * @example diff --git a/test/msw-api/hard-reload.mocks.ts b/test/msw-api/hard-reload.mocks.ts index 05bb9d7a5..f5b465b43 100644 --- a/test/msw-api/hard-reload.mocks.ts +++ b/test/msw-api/hard-reload.mocks.ts @@ -1,12 +1,10 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('https://api.github.com', (req, res, ctx) => { - return res( - ctx.json({ - mocked: true, - }), - ) + rest.get('https://api.github.com', () => { + return HttpResponse.json({ + mocked: true, + }) }), ) diff --git a/test/msw-api/integrity-check-invalid.mocks.ts b/test/msw-api/integrity-check-invalid.mocks.ts index e1c06a913..8558e0344 100644 --- a/test/msw-api/integrity-check-invalid.mocks.ts +++ b/test/msw-api/integrity-check-invalid.mocks.ts @@ -1,8 +1,10 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('https://api.github.com/users/:username', (req, res, ctx) => { - return res(ctx.json({ mocked: true })) + rest.get('https://api.github.com/users/:username', () => { + return HttpResponse.json({ + mocked: true, + }) }), ) diff --git a/test/msw-api/integrity-check-valid.mocks.ts b/test/msw-api/integrity-check-valid.mocks.ts index 42dae4379..a98bea75b 100644 --- a/test/msw-api/integrity-check-valid.mocks.ts +++ b/test/msw-api/integrity-check-valid.mocks.ts @@ -1,8 +1,8 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('https://api.github.com/users/octocat', (req, res, ctx) => { - return res(ctx.json({ mocked: true })) + rest.get('https://api.github.com/users/octocat', () => { + return HttpResponse.json({ mocked: true }) }), ) diff --git a/test/msw-api/regression/handle-stream.mocks.ts b/test/msw-api/regression/handle-stream.mocks.ts index 74b11b5bc..6a8eac4e7 100644 --- a/test/msw-api/regression/handle-stream.mocks.ts +++ b/test/msw-api/regression/handle-stream.mocks.ts @@ -3,8 +3,8 @@ import { setupWorker } from 'msw' const worker = setupWorker() worker.events.on('response:bypass', async (res) => { - const textResponse = await res.text() - console.warn(`[response:bypass] ${textResponse}`) + const responseText = await res.text() + console.warn(`[response:bypass] ${responseText}`) }) worker.start({ onUnhandledRequest: 'bypass' }) diff --git a/test/msw-api/regression/null-body.mocks.ts b/test/msw-api/regression/null-body.mocks.ts index e43b9b483..be96d38d2 100644 --- a/test/msw-api/regression/null-body.mocks.ts +++ b/test/msw-api/regression/null-body.mocks.ts @@ -1,8 +1,8 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('https://test.mswjs.io/api/books', (req, res, ctx) => { - return res(ctx.status(204)) + rest.get('https://test.mswjs.io/api/books', () => { + return HttpResponse.text(null, { status: 204 }) }), ) diff --git a/test/msw-api/res/network-error.mocks.ts b/test/msw-api/res/network-error.mocks.ts index a12c0ebdc..5ac0bc65f 100644 --- a/test/msw-api/res/network-error.mocks.ts +++ b/test/msw-api/res/network-error.mocks.ts @@ -1,8 +1,8 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, NetworkError } from 'msw' const worker = setupWorker( - rest.get('/user', (_, res) => { - return res.networkError('Custom network error message') + rest.get('/user', () => { + throw new NetworkError('Custom network error message') }), ) diff --git a/test/msw-api/res/network-error.node.test.ts b/test/msw-api/res/network-error.node.test.ts index 8de52578f..e2c34ff57 100644 --- a/test/msw-api/res/network-error.node.test.ts +++ b/test/msw-api/res/network-error.node.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { rest } from 'msw' +import { rest, NetworkError } from 'msw' import { setupServer } from 'msw/node' const server = setupServer() @@ -12,8 +12,8 @@ afterAll(() => server.close()) test('throws a network error when used with fetch', async () => { server.use( - rest.get('http://test.io/user', (_, res) => { - return res.networkError('Custom network error message') + rest.get('http://test.io/user', () => { + throw new NetworkError('Custom network error message') }), ) diff --git a/test/msw-api/setup-worker/input-validation.mocks.ts b/test/msw-api/setup-worker/input-validation.mocks.ts index 4c0260657..aeb95cd67 100644 --- a/test/msw-api/setup-worker/input-validation.mocks.ts +++ b/test/msw-api/setup-worker/input-validation.mocks.ts @@ -1,11 +1,11 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' // The next line will be ignored because we want to test that an Error // should be trown when `setupWorker` parameters are not valid //@ts-ignore const worker = setupWorker([ - rest.get('/book/:bookId', function originalResolver(req, res, ctx) { - return res(ctx.json({ title: 'Original title' })) + rest.get('/book/:bookId', function originalResolver() { + return HttpResponse.json({ title: 'Original title' }) }), ]) diff --git a/test/msw-api/setup-worker/life-cycle-events/on.mocks.ts b/test/msw-api/setup-worker/life-cycle-events/on.mocks.ts index f32eac7f9..3664de563 100644 --- a/test/msw-api/setup-worker/life-cycle-events/on.mocks.ts +++ b/test/msw-api/setup-worker/life-cycle-events/on.mocks.ts @@ -1,9 +1,9 @@ -import { rest, setupWorker } from 'msw' +import { HttpResponse, rest, setupWorker } from 'msw' import { ServerLifecycleEventsMap } from 'msw/src/node/glossary' const worker = setupWorker( - rest.get('/user', (req, res, ctx) => { - return res(ctx.text('response-body')) + rest.get('/user', () => { + return HttpResponse.text('response-body') }), rest.post('/no-response', () => { return @@ -14,19 +14,19 @@ const worker = setupWorker( ) worker.events.on('request:start', (req) => { - console.warn(`[request:start] ${req.method} ${req.url.href} ${req.id}`) + console.warn(`[request:start] ${req.method} ${req.url} ${req.id}`) }) worker.events.on('request:match', (req) => { - console.warn(`[request:match] ${req.method} ${req.url.href} ${req.id}`) + console.warn(`[request:match] ${req.method} ${req.url} ${req.id}`) }) worker.events.on('request:unhandled', (req) => { - console.warn(`[request:unhandled] ${req.method} ${req.url.href} ${req.id}`) + console.warn(`[request:unhandled] ${req.method} ${req.url} ${req.id}`) }) const requestEndListner: ServerLifecycleEventsMap['request:end'] = (req) => { - console.warn(`[request:end] ${req.method} ${req.url.href} ${req.id}`) + console.warn(`[request:end] ${req.method} ${req.url} ${req.id}`) } worker.events.on('request:end', requestEndListner) @@ -42,7 +42,7 @@ worker.events.on('response:bypass', async (res, requestId) => { worker.events.on('unhandledException', (error, req) => { console.warn( - `[unhandledException] ${req.method} ${req.url.href} ${req.id} ${error.message}`, + `[unhandledException] ${req.method} ${req.url} ${req.id} ${error.message}`, ) }) diff --git a/test/msw-api/setup-worker/scenarios/custom-transformers.mocks.ts b/test/msw-api/setup-worker/scenarios/custom-transformers.mocks.ts index 0b99bd5cf..75e9ec353 100644 --- a/test/msw-api/setup-worker/scenarios/custom-transformers.mocks.ts +++ b/test/msw-api/setup-worker/scenarios/custom-transformers.mocks.ts @@ -1,20 +1,18 @@ -import { ResponseTransformer, compose, context, setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' import * as JSONbig from 'json-bigint' -const jsonBig = (body: Record): ResponseTransformer => { - return compose( - context.set('Content-Type', 'application/json'), - context.body(JSONbig.stringify(body)), - ) -} - const worker = setupWorker( - rest.get('/user', (req, res) => { - return res( - jsonBig({ + rest.get('/user', () => { + return HttpResponse.plain( + JSONbig.stringify({ username: 'john.maverick', balance: BigInt(1597928668063727616), }), + { + headers: { + 'Content-Type': 'application/json', + }, + }, ) }), ) diff --git a/test/msw-api/setup-worker/scenarios/errors/network-error.mocks.ts b/test/msw-api/setup-worker/scenarios/errors/network-error.mocks.ts index 51338206b..5ac0bc65f 100644 --- a/test/msw-api/setup-worker/scenarios/errors/network-error.mocks.ts +++ b/test/msw-api/setup-worker/scenarios/errors/network-error.mocks.ts @@ -1,8 +1,8 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, NetworkError } from 'msw' const worker = setupWorker( - rest.get('/user', (req, res) => { - return res.networkError('Custom network error message') + rest.get('/user', () => { + throw new NetworkError('Custom network error message') }), ) diff --git a/test/msw-api/setup-worker/scenarios/fall-through.mocks.ts b/test/msw-api/setup-worker/scenarios/fall-through.mocks.ts index ada4803b3..d7cf8f72e 100644 --- a/test/msw-api/setup-worker/scenarios/fall-through.mocks.ts +++ b/test/msw-api/setup-worker/scenarios/fall-through.mocks.ts @@ -1,9 +1,9 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( rest.get('*', () => console.log('[get] first')), rest.get('/us*', () => console.log('[get] second')), - rest.get('/user', (req, res, ctx) => res(ctx.json({ firstName: 'John' }))), + rest.get('/user', () => HttpResponse.json({ firstName: 'John' })), rest.get('/user', () => console.log('[get] third')), rest.post('/blog/*', () => console.log('[post] first')), diff --git a/test/msw-api/setup-worker/scenarios/iframe/iframe.mocks.ts b/test/msw-api/setup-worker/scenarios/iframe/iframe.mocks.ts index 265f1bce3..57827f44c 100644 --- a/test/msw-api/setup-worker/scenarios/iframe/iframe.mocks.ts +++ b/test/msw-api/setup-worker/scenarios/iframe/iframe.mocks.ts @@ -1,8 +1,8 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/user', (req, res, ctx) => { - return res(ctx.json({ firstName: 'John' })) + rest.get('/user', () => { + return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/msw-api/setup-worker/scenarios/text-event-stream.mocks.ts b/test/msw-api/setup-worker/scenarios/text-event-stream.mocks.ts index d624f85aa..7dd44e90a 100644 --- a/test/msw-api/setup-worker/scenarios/text-event-stream.mocks.ts +++ b/test/msw-api/setup-worker/scenarios/text-event-stream.mocks.ts @@ -1,8 +1,12 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/user', (req, res) => { - return res() + rest.get('/user', () => { + /** + * @todo This is not strictly synonymous to "res()" + * as ".text()" will set the "Content-Type" header. + */ + return HttpResponse.text() }), ) diff --git a/test/msw-api/setup-worker/start/error.mocks.ts b/test/msw-api/setup-worker/start/error.mocks.ts index cf7105f5c..a43a5da2d 100644 --- a/test/msw-api/setup-worker/start/error.mocks.ts +++ b/test/msw-api/setup-worker/start/error.mocks.ts @@ -1,8 +1,8 @@ import { setupWorker, rest } from 'msw' const worker = setupWorker( - rest.get('/user', (req, res, ctx) => { - return res(ctx.status(200)) + rest.get('/user', () => { + return new Response() }), ) diff --git a/test/msw-api/setup-worker/start/find-worker.error.mocks.ts b/test/msw-api/setup-worker/start/find-worker.error.mocks.ts index 91829e2ce..dde3f8513 100644 --- a/test/msw-api/setup-worker/start/find-worker.error.mocks.ts +++ b/test/msw-api/setup-worker/start/find-worker.error.mocks.ts @@ -1,8 +1,8 @@ import { setupWorker, rest } from 'msw' const worker = setupWorker( - rest.get('/user', (req, res, ctx) => { - return res(ctx.status(200)) + rest.get('/user', () => { + return new Response() }), ) diff --git a/test/msw-api/setup-worker/start/find-worker.mocks.ts b/test/msw-api/setup-worker/start/find-worker.mocks.ts index 598040e26..93e80c20f 100644 --- a/test/msw-api/setup-worker/start/find-worker.mocks.ts +++ b/test/msw-api/setup-worker/start/find-worker.mocks.ts @@ -1,8 +1,8 @@ import { setupWorker, rest } from 'msw' const worker = setupWorker( - rest.get('/user', (req, res, ctx) => { - return res(ctx.status(200)) + rest.get('/user', () => { + return new Response() }), ) diff --git a/test/msw-api/setup-worker/start/on-unhandled-request/bypass.mocks.ts b/test/msw-api/setup-worker/start/on-unhandled-request/bypass.mocks.ts index fb897f053..1c4dc5602 100644 --- a/test/msw-api/setup-worker/start/on-unhandled-request/bypass.mocks.ts +++ b/test/msw-api/setup-worker/start/on-unhandled-request/bypass.mocks.ts @@ -1,8 +1,8 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/user', (req, res, ctx) => { - return res(ctx.json({ firstName: 'John' })) + rest.get('/user', () => { + return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/msw-api/setup-worker/start/on-unhandled-request/callback-print.mocks.ts b/test/msw-api/setup-worker/start/on-unhandled-request/callback-print.mocks.ts index 4dbb4a319..eaf3e8385 100644 --- a/test/msw-api/setup-worker/start/on-unhandled-request/callback-print.mocks.ts +++ b/test/msw-api/setup-worker/start/on-unhandled-request/callback-print.mocks.ts @@ -1,16 +1,17 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/user', (req, res, ctx) => { - return res(ctx.json({ firstName: 'John' })) + rest.get('/user', () => { + return HttpResponse.json({ firstName: 'John' }) }), ) worker.start({ - onUnhandledRequest(req, print) { - console.log(`Oops, unhandled ${req.method} ${req.url.href}`) + onUnhandledRequest(request, print) { + console.log(`Oops, unhandled ${request.method} ${request.url}`) + const url = new URL(request.url) - if (req.url.pathname.includes('/use-warn')) { + if (url.pathname.includes('/use-warn')) { // Using "print" allows you to execute the default strategy. print.warning() } else { diff --git a/test/msw-api/setup-worker/start/on-unhandled-request/callback-throws.mocks.ts b/test/msw-api/setup-worker/start/on-unhandled-request/callback-throws.mocks.ts index 22307717d..8fe930b55 100644 --- a/test/msw-api/setup-worker/start/on-unhandled-request/callback-throws.mocks.ts +++ b/test/msw-api/setup-worker/start/on-unhandled-request/callback-throws.mocks.ts @@ -1,13 +1,13 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/user', (req, res, ctx) => { - return res(ctx.json({ firstName: 'John' })) + rest.get('/user', () => { + return HttpResponse.json({ firstName: 'John' }) }), ) worker.start({ - onUnhandledRequest(req) { - throw new Error(`Forbid unhandled ${req.method} ${req.url.href}`) + onUnhandledRequest(request) { + throw new Error(`Forbid unhandled ${request.method} ${request.url}`) }, }) diff --git a/test/msw-api/setup-worker/start/on-unhandled-request/callback.mocks.ts b/test/msw-api/setup-worker/start/on-unhandled-request/callback.mocks.ts index 02e6aa86e..2e6675ce2 100644 --- a/test/msw-api/setup-worker/start/on-unhandled-request/callback.mocks.ts +++ b/test/msw-api/setup-worker/start/on-unhandled-request/callback.mocks.ts @@ -1,13 +1,13 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/user', (req, res, ctx) => { - return res(ctx.json({ firstName: 'John' })) + rest.get('/user', () => { + return HttpResponse.json({ firstName: 'John' }) }), ) worker.start({ - onUnhandledRequest(req) { - console.log(`Oops, unhandled ${req.method} ${req.url.href}`) + onUnhandledRequest(request) { + console.log(`Oops, unhandled ${request.method} ${request.url}`) }, }) diff --git a/test/msw-api/setup-worker/start/on-unhandled-request/default.mocks.ts b/test/msw-api/setup-worker/start/on-unhandled-request/default.mocks.ts index 280c0bb39..25174a8a0 100644 --- a/test/msw-api/setup-worker/start/on-unhandled-request/default.mocks.ts +++ b/test/msw-api/setup-worker/start/on-unhandled-request/default.mocks.ts @@ -1,8 +1,8 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/user', (req, res, ctx) => { - return res(ctx.json({ firstName: 'John' })) + rest.get('/user', () => { + return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/msw-api/setup-worker/start/on-unhandled-request/error.mocks.ts b/test/msw-api/setup-worker/start/on-unhandled-request/error.mocks.ts index ec53ffec4..f1060fd07 100644 --- a/test/msw-api/setup-worker/start/on-unhandled-request/error.mocks.ts +++ b/test/msw-api/setup-worker/start/on-unhandled-request/error.mocks.ts @@ -1,8 +1,8 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/user', (req, res, ctx) => { - return res(ctx.json({ firstName: 'John' })) + rest.get('/user', () => { + return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/msw-api/setup-worker/start/on-unhandled-request/warn.mocks.ts b/test/msw-api/setup-worker/start/on-unhandled-request/warn.mocks.ts index 4485bec7f..395b82a57 100644 --- a/test/msw-api/setup-worker/start/on-unhandled-request/warn.mocks.ts +++ b/test/msw-api/setup-worker/start/on-unhandled-request/warn.mocks.ts @@ -1,8 +1,8 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/user', (req, res, ctx) => { - return res(ctx.json({ firstName: 'John' })) + rest.get('/user', () => { + return HttpResponse.json({ firstName: 'John' }) }), rest.post('/explicit-return', () => { // Short-circuiting in a handler makes it perform the request as-is, diff --git a/test/msw-api/setup-worker/start/options-sw-scope.mocks.ts b/test/msw-api/setup-worker/start/options-sw-scope.mocks.ts index f0c99c499..569d91d6b 100644 --- a/test/msw-api/setup-worker/start/options-sw-scope.mocks.ts +++ b/test/msw-api/setup-worker/start/options-sw-scope.mocks.ts @@ -1,8 +1,8 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/user', (req, res, ctx) => { - return res(ctx.json({ firstName: 'John' })) + rest.get('/user', () => { + return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/msw-api/setup-worker/start/quiet.mocks.ts b/test/msw-api/setup-worker/start/quiet.mocks.ts index a8c580f76..ca0d23a78 100644 --- a/test/msw-api/setup-worker/start/quiet.mocks.ts +++ b/test/msw-api/setup-worker/start/quiet.mocks.ts @@ -1,13 +1,11 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/user', (req, res, ctx) => { - return res( - ctx.json({ - firstName: 'John', - age: 32, - }), - ) + rest.get('/user', () => { + return HttpResponse.json({ + firstName: 'John', + age: 32, + }) }), ) diff --git a/test/msw-api/setup-worker/start/start.mocks.ts b/test/msw-api/setup-worker/start/start.mocks.ts index 80274cfe0..7f9ca8d0d 100644 --- a/test/msw-api/setup-worker/start/start.mocks.ts +++ b/test/msw-api/setup-worker/start/start.mocks.ts @@ -1,8 +1,8 @@ import { setupWorker, rest } from 'msw' const worker = setupWorker( - rest.get('/user', (req, res, ctx) => { - return res(ctx.status(200)) + rest.get('/user', () => { + return new Response() }), ) diff --git a/test/msw-api/setup-worker/start/wait-until-ready.error.mocks.ts b/test/msw-api/setup-worker/start/wait-until-ready.error.mocks.ts index 382326570..baae0a2b2 100644 --- a/test/msw-api/setup-worker/start/wait-until-ready.error.mocks.ts +++ b/test/msw-api/setup-worker/start/wait-until-ready.error.mocks.ts @@ -1,11 +1,11 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/numbers', (req, res, ctx) => { - return res(ctx.json([1, 2, 3])) + rest.get('/numbers', () => { + return HttpResponse.json([1, 2, 3]) }), - rest.get('/letters', (req, res, ctx) => { - return res(ctx.json(['a', 'b', 'c'])) + rest.get('/letters', () => { + return HttpResponse.json(['a', 'b', 'c']) }), ) diff --git a/test/msw-api/setup-worker/start/wait-until-ready.false.mocks.ts b/test/msw-api/setup-worker/start/wait-until-ready.false.mocks.ts index 9ad01e223..26de15b8a 100644 --- a/test/msw-api/setup-worker/start/wait-until-ready.false.mocks.ts +++ b/test/msw-api/setup-worker/start/wait-until-ready.false.mocks.ts @@ -1,11 +1,11 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/numbers', (req, res, ctx) => { - return res(ctx.json([1, 2, 3])) + rest.get('/numbers', () => { + return HttpResponse.json([1, 2, 3]) }), - rest.get('/letters', (req, res, ctx) => { - return res(ctx.json(['a', 'b', 'c'])) + rest.get('/letters', () => { + return HttpResponse.json(['a', 'b', 'c']) }), ) diff --git a/test/msw-api/setup-worker/start/wait-until-ready.mocks.ts b/test/msw-api/setup-worker/start/wait-until-ready.mocks.ts index 44019cb12..35788d20c 100644 --- a/test/msw-api/setup-worker/start/wait-until-ready.mocks.ts +++ b/test/msw-api/setup-worker/start/wait-until-ready.mocks.ts @@ -1,11 +1,11 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/numbers', (req, res, ctx) => { - return res(ctx.json([1, 2, 3])) + rest.get('/numbers', () => { + return HttpResponse.json([1, 2, 3]) }), - rest.get('/letters', (req, res, ctx) => { - return res(ctx.json(['a', 'b', 'c'])) + rest.get('/letters', () => { + return HttpResponse.json(['a', 'b', 'c']) }), ) diff --git a/test/msw-api/setup-worker/stop.mocks.ts b/test/msw-api/setup-worker/stop.mocks.ts index 8aff37c57..024df13a8 100644 --- a/test/msw-api/setup-worker/stop.mocks.ts +++ b/test/msw-api/setup-worker/stop.mocks.ts @@ -1,8 +1,8 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('https://api.github.com', (req, res, ctx) => { - return res(ctx.json({ mocked: true })) + rest.get('https://api.github.com', () => { + return HttpResponse.json({ mocked: true }) }), ) diff --git a/test/msw-api/setup-worker/stop/removes-all-listeners.mocks.ts b/test/msw-api/setup-worker/stop/removes-all-listeners.mocks.ts index 2371e5e7e..04c578ce2 100644 --- a/test/msw-api/setup-worker/stop/removes-all-listeners.mocks.ts +++ b/test/msw-api/setup-worker/stop/removes-all-listeners.mocks.ts @@ -1,9 +1,9 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const createWorker = () => { return setupWorker( - rest.get('/user', (req, res, ctx) => { - return res(ctx.status(200)) + rest.get('/user', () => { + return HttpResponse.plain() }), ) } diff --git a/test/msw-api/setup-worker/use.mocks.ts b/test/msw-api/setup-worker/use.mocks.ts index b3dbcc3ed..1d1eaeb14 100644 --- a/test/msw-api/setup-worker/use.mocks.ts +++ b/test/msw-api/setup-worker/use.mocks.ts @@ -1,8 +1,10 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/book/:bookId', function originalResolver(req, res, ctx) { - return res(ctx.json({ title: 'Original title' })) + rest.get('/book/:bookId', function originalResolver() { + return HttpResponse.json({ + title: 'Original title', + }) }), ) diff --git a/test/msw-api/setup-worker/use.test.ts b/test/msw-api/setup-worker/use.test.ts index c3d6c0feb..b540e1ea2 100644 --- a/test/msw-api/setup-worker/use.test.ts +++ b/test/msw-api/setup-worker/use.test.ts @@ -1,6 +1,6 @@ import * as path from 'path' import { pageWith } from 'page-with' -import { SetupWorkerApi, rest } from 'msw' +import { SetupWorkerApi, rest, HttpResponse } from 'msw' declare namespace window { export const msw: { @@ -18,8 +18,8 @@ test('returns a mocked response from a runtime request handler upon match', asyn const { msw } = window msw.worker.use( - msw.rest.post('/login', function postLoginResolver(req, res, ctx) { - return res(ctx.json({ accepted: true })) + msw.rest.post('/login', function postLoginResolver() { + return HttpResponse.json({ accepted: true }) }), ) }) @@ -49,8 +49,8 @@ test('returns a mocked response from a persistent request handler override', asy const { msw } = window msw.worker.use( - msw.rest.get('/book/:bookId', function permanentOverride(req, res, ctx) { - return res(ctx.json({ title: 'Permanent override' })) + msw.rest.get('/book/:bookId', function permanentOverride() { + return HttpResponse.json({ title: 'Permanent override' }) }), ) }) @@ -77,8 +77,8 @@ test('returns a mocked response from a one-time request handler override only up const { msw } = window msw.worker.use( - msw.rest.get('/book/:bookId', function oneTimeOverride(req, res, ctx) { - return res.once(ctx.json({ title: 'One-time override' })) + msw.rest.get('/book/:bookId', function oneTimeOverride() { + return HttpResponse.json({ title: 'One-time override' }) }), ) }) @@ -105,10 +105,16 @@ test('returns a mocked response from a one-time request handler override only up const { msw } = window msw.worker.use( - msw.rest.get('/book/:bookId', function oneTimeOverride(req, res, ctx) { - const { bookId } = req.params - return res.once(ctx.json({ title: 'One-time override', bookId })) - }), + msw.rest.get<{ bookId: string }>( + '/book/:bookId', + function oneTimeOverride({ params }) { + /* eslint-disable-next-line */ + const { bookId } = params + + throw new Error('Support res.once()') + // return res.once(ctx.json({ title: 'One-time override', bookId })) + }, + ), ) }) diff --git a/test/msw-api/unregister.mocks.ts b/test/msw-api/unregister.mocks.ts index 24b664da2..fca16a712 100644 --- a/test/msw-api/unregister.mocks.ts +++ b/test/msw-api/unregister.mocks.ts @@ -1,12 +1,10 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('https://api.github.com', (req, res, ctx) => { - return res( - ctx.json({ - mocked: true, - }), - ) + rest.get('https://api.github.com', () => { + return HttpResponse.json({ + mocked: true, + }) }), ) From a5a91dcbd2673352c40912de3ffb3ad36e104832 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 10 Oct 2022 21:15:57 +0200 Subject: [PATCH 013/210] feat: add "delay()" --- src/delay.ts | 67 +++++++++++++++++++++++++ src/index.ts | 1 + test/msw-api/context/delay.mocks.ts | 17 ++++--- test/msw-api/context/delay.node.test.ts | 17 ++++--- test/rest-api/context.mocks.ts | 25 ++++----- 5 files changed, 100 insertions(+), 27 deletions(-) create mode 100644 src/delay.ts diff --git a/src/delay.ts b/src/delay.ts new file mode 100644 index 000000000..9bbe68bf8 --- /dev/null +++ b/src/delay.ts @@ -0,0 +1,67 @@ +import { isNodeProcess } from 'is-node-process' + +export const SET_TIMEOUT_MAX_ALLOWED_INT = 2147483647 +export const MIN_SERVER_RESPONSE_TIME = 100 +export const MAX_SERVER_RESPONSE_TIME = 400 +export const NODE_SERVER_RESPONSE_TIME = 5 + +function getRealisticResponseTime(): number { + if (isNodeProcess()) { + return NODE_SERVER_RESPONSE_TIME + } + + return Math.floor( + Math.random() * (MAX_SERVER_RESPONSE_TIME - MIN_SERVER_RESPONSE_TIME) + + MIN_SERVER_RESPONSE_TIME, + ) +} + +export type DelayMode = 'real' | 'infinite' + +/** + * Delays the response by the given duration (ms). + * @example + * await delay() // emulate realistic server response time + * await delay(1200) // delay response by 1200ms + * await delay('infinite') // delay response infinitely + */ +export async function delay( + durationOrMode?: DelayMode | number, +): Promise { + let delayTime: number + + if (typeof durationOrMode === 'string') { + switch (durationOrMode) { + case 'infinite': { + // Using `Infinity` as a delay value executes the response timeout immediately. + // Instead, use the maximum allowed integer for `setTimeout`. + delayTime = SET_TIMEOUT_MAX_ALLOWED_INT + break + } + case 'real': { + delayTime = getRealisticResponseTime() + break + } + default: { + throw new Error( + `Failed to delay a response: unknown delay mode "${durationOrMode}". Please make sure you provide one of the supported modes ("real", "infinite") or a number.`, + ) + } + } + } else if (typeof durationOrMode === 'undefined') { + // Use random realistic server response time when no explicit delay duration was provided. + delayTime = getRealisticResponseTime() + } else { + // Guard against passing values like `Infinity` or `Number.MAX_VALUE` + // as the response delay duration. They don't produce the result you may expect. + if (durationOrMode > SET_TIMEOUT_MAX_ALLOWED_INT) { + throw new Error( + `Failed to delay a response: provided delay duration (${durationOrMode}) exceeds the maximum allowed duration for "setTimeout" (${SET_TIMEOUT_MAX_ALLOWED_INT}). This will cause the response to be returned immediately. Please use a number within the allowed range to delay the response by exact duration, or consider the "infinite" delay mode to delay the response indefinitely.`, + ) + } + + delayTime = durationOrMode + } + + return new Promise((resolve) => setTimeout(resolve, delayTime)) +} diff --git a/src/index.ts b/src/index.ts index 4697fb74c..9db40ef0e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -62,5 +62,6 @@ export type { DelayMode } from './context/delay' export { ParsedGraphQLRequest } from './utils/internal/parseGraphQLRequest' export * from './utils/HttpResponse' +export * from './delay' export { bypass } from './utils/bypass' export { NetworkError } from './NetworkError' diff --git a/test/msw-api/context/delay.mocks.ts b/test/msw-api/context/delay.mocks.ts index 8207fa8e8..271533a5a 100644 --- a/test/msw-api/context/delay.mocks.ts +++ b/test/msw-api/context/delay.mocks.ts @@ -1,13 +1,14 @@ -import { setupWorker, rest, DelayMode } from 'msw' +import { setupWorker, rest, delay, DelayMode, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/delay', (req, res, ctx) => { - const mode = req.url.searchParams.get('mode') as DelayMode - const duration = req.url.searchParams.get('duration') - return res( - ctx.delay(duration ? Number(duration) : mode || undefined), - ctx.json({ mocked: true }), - ) + rest.get('/delay', async ({ request }) => { + const url = new URL(request.url) + const mode = url.searchParams.get('mode') as DelayMode + const duration = url.searchParams.get('duration') + + await delay(duration ? Number(duration) : mode || undefined) + + return HttpResponse.json({ mocked: true }) }), ) diff --git a/test/msw-api/context/delay.node.test.ts b/test/msw-api/context/delay.node.test.ts index adc685ae1..a3ebefbe6 100644 --- a/test/msw-api/context/delay.node.test.ts +++ b/test/msw-api/context/delay.node.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { rest } from 'msw' +import { delay, HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' import { performance } from 'perf_hooks' @@ -31,8 +31,9 @@ async function makeRequest(url: string) { test('uses explicit server response time', async () => { server.use( - rest.get('http://localhost/user', (req, res, ctx) => { - return res(ctx.delay(500), ctx.text('john')) + rest.get('http://localhost/user', async () => { + await delay(500) + return HttpResponse.text('john') }), ) @@ -44,8 +45,9 @@ test('uses explicit server response time', async () => { test('uses realistic server response time when no duration is provided', async () => { server.use( - rest.get('http://localhost/user', (req, res, ctx) => { - return res(ctx.delay(), ctx.text('john')) + rest.get('http://localhost/user', async () => { + await delay() + return HttpResponse.text('john') }), ) @@ -58,8 +60,9 @@ test('uses realistic server response time when no duration is provided', async ( test('uses realistic server response time when "real" mode is provided', async () => { server.use( - rest.get('http://localhost/user', (req, res, ctx) => { - return res(ctx.delay('real'), ctx.text('john')) + rest.get('http://localhost/user', async () => { + await delay('real') + return HttpResponse.text('john') }), ) diff --git a/test/rest-api/context.mocks.ts b/test/rest-api/context.mocks.ts index fc22e5d34..51ed7858d 100644 --- a/test/rest-api/context.mocks.ts +++ b/test/rest-api/context.mocks.ts @@ -1,17 +1,18 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse, delay } from 'msw' const worker = setupWorker( - rest.get('https://test.mswjs.io/', (req, res, ctx) => { - return res( - ctx.delay(2000), - ctx.set({ - Accept: 'foo/bar', - 'Custom-Header': 'arbitrary-value', - }), - ctx.status(201, 'Yahoo!'), - ctx.json({ - mocked: true, - }), + rest.get('https://test.mswjs.io/', async () => { + await delay(2000) + return HttpResponse.json( + { mocked: true }, + { + status: 201, + statusText: 'Yahoo!', + headers: { + Accept: 'foo/bar', + 'Custom-Header': 'arbitrary-value', + }, + }, ) }), ) From 0ee92d8f56197d7ea420e3d8f6bce08c447b34b8 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 14 Oct 2022 14:57:03 +0200 Subject: [PATCH 014/210] feat: migrate to new interceptors --- package.json | 1 + src/context/fetch.test.ts | 36 --- src/context/fetch.ts | 60 ----- src/context/index.ts | 1 - src/handlers/RequestHandler.ts | 3 - src/index.ts | 1 - src/node/createSetupServer.ts | 65 ++--- src/node/glossary.ts | 7 +- src/setupWorker/glossary.ts | 6 +- src/setupWorker/setupWorker.ts | 10 +- .../start/createFallbackRequestListener.ts | 43 +--- .../start/createRequestListener.ts | 3 + src/sharedOptions.ts | 32 ++- src/utils/HttpResponse.ts | 3 + src/utils/handleRequest.ts | 19 +- src/utils/request/MockedRequest.test.ts | 234 ------------------ src/utils/request/MockedRequest.ts | 180 -------------- test/msw-api/req/passthrough.node.test.ts | 12 +- test/msw-api/req/passthrough.test.ts | 15 +- .../setup-server/input-validation.test.ts | 8 +- .../setup-server/life-cycle-events/on.test.ts | 36 +-- .../removeAllListeners.test.ts | 6 +- .../life-cycle-events/removeListener.test.ts | 6 +- .../setup-server/resetHandlers.test.ts | 18 +- .../setup-server/restoreHandlers.test.ts | 10 +- .../scenarios/cookies-request.test.ts | 6 +- .../scenarios/custom-transformers.test.ts | 25 +- .../scenarios/fake-timers.test.ts | 6 +- .../scenarios/fall-through.node.test.ts | 8 +- .../setup-server/scenarios/fetch.test.ts | 31 ++- .../scenarios/generator.node.test.ts | 80 +++--- .../setup-server/scenarios/graphql.test.ts | 26 +- .../setup-server/scenarios/http.test.ts | 18 +- .../setup-server/scenarios/https.test.ts | 18 +- .../on-unhandled-request/bypass.test.ts | 6 +- .../callback-throws.test.ts | 10 +- .../on-unhandled-request/callback.test.ts | 6 +- .../on-unhandled-request/default.test.ts | 6 +- .../on-unhandled-request/error.test.ts | 6 +- .../on-unhandled-request/warn.test.ts | 6 +- .../scenarios/relative-url.test.ts | 10 +- .../scenarios/response-patching.test.ts | 39 +-- .../setup-server/scenarios/xhr.test.ts | 18 +- test/msw-api/setup-server/use.test.ts | 36 +-- .../setup-worker/resetHandlers.test.ts | 15 +- .../setup-worker/restoreHandlers.test.ts | 7 +- test/msw-api/setup-worker/use.mocks.ts | 1 + yarn.lock | 56 ++++- 48 files changed, 386 insertions(+), 869 deletions(-) delete mode 100644 src/context/fetch.test.ts delete mode 100644 src/context/fetch.ts delete mode 100644 src/utils/request/MockedRequest.test.ts delete mode 100644 src/utils/request/MockedRequest.ts diff --git a/package.json b/package.json index b59219ee0..7ff4eccb6 100644 --- a/package.json +++ b/package.json @@ -89,6 +89,7 @@ "@mswjs/cookies": "^0.2.2", "@mswjs/interceptors": "^0.17.5", "@open-draft/until": "^1.0.3", + "@remix-run/web-fetch": "^4.3.0", "@types/cookie": "^0.4.1", "@types/js-levenshtein": "^1.1.1", "chalk": "4.1.1", diff --git a/src/context/fetch.test.ts b/src/context/fetch.test.ts deleted file mode 100644 index 01c1ae13a..000000000 --- a/src/context/fetch.test.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** - * @jest-environment jsdom - */ -import { augmentRequestInit } from './fetch' - -test('augments RequestInit with the Headers instance', () => { - const result = augmentRequestInit({ - headers: new Headers({ Authorization: 'token' }), - }) - const headers = new Headers(result.headers) - - expect(headers.get('Authorization')).toEqual('token') - expect(headers.get('x-msw-bypass')).toEqual('true') -}) - -test('augments RequestInit with the string[][] headers object', () => { - const result = augmentRequestInit({ - headers: [['Authorization', 'token']], - }) - const headers = new Headers(result.headers) - - expect(headers.get('x-msw-bypass')).toEqual('true') - expect(headers.get('authorization')).toEqual('token') -}) - -test('aguments RequestInit with the Record headers', () => { - const result = augmentRequestInit({ - headers: { - Authorization: 'token', - }, - }) - const headers = new Headers(result.headers) - - expect(headers.get('x-msw-bypass')).toEqual('true') - expect(headers.get('authorization')).toEqual('token') -}) diff --git a/src/context/fetch.ts b/src/context/fetch.ts deleted file mode 100644 index a596d43d7..000000000 --- a/src/context/fetch.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { isNodeProcess } from 'is-node-process' -import { Headers } from 'headers-polyfill' -import { MockedRequest } from '../utils/request/MockedRequest' - -const useFetch: (input: RequestInfo, init?: RequestInit) => Promise = - isNodeProcess() ? require('node-fetch') : window.fetch - -export const augmentRequestInit = (requestInit: RequestInit): RequestInit => { - const headers = new Headers(requestInit.headers) - headers.set('x-msw-bypass', 'true') - - return { - ...requestInit, - headers: headers.all(), - } -} - -const createFetchRequestParameters = (input: MockedRequest): RequestInit => { - const { body, method } = input - const requestParameters: RequestInit = { - ...input, - body: undefined, - } - - if (['GET', 'HEAD'].includes(method)) { - return requestParameters - } - - if ( - typeof body === 'object' || - typeof body === 'number' || - typeof body === 'boolean' - ) { - requestParameters.body = JSON.stringify(body) - } else { - requestParameters.body = body - } - - return requestParameters -} - -/** - * Performs a bypassed request inside a request handler. - * @example - * const originalResponse = await ctx.fetch(req) - * @see {@link https://mswjs.io/docs/api/context/fetch `ctx.fetch()`} - */ -export const fetch = ( - input: string | MockedRequest, - requestInit: RequestInit = {}, -): Promise => { - if (typeof input === 'string') { - return useFetch(input, augmentRequestInit(requestInit)) - } - - const requestParameters = createFetchRequestParameters(input) - const derivedRequestInit = augmentRequestInit(requestParameters) - - return useFetch(input.url.href, derivedRequestInit) -} diff --git a/src/context/index.ts b/src/context/index.ts index 6cbed148d..a03ff6777 100644 --- a/src/context/index.ts +++ b/src/context/index.ts @@ -6,7 +6,6 @@ export { data } from './data' export { extensions } from './extensions' export { delay } from './delay' export { errors } from './errors' -export { fetch } from './fetch' export { json } from './json' export { text } from './text' export { xml } from './xml' diff --git a/src/handlers/RequestHandler.ts b/src/handlers/RequestHandler.ts index 729cabba0..b8388fa3f 100644 --- a/src/handlers/RequestHandler.ts +++ b/src/handlers/RequestHandler.ts @@ -4,7 +4,6 @@ import { isIterable } from '../utils/internal/isIterable' import { status } from '../context/status' import { set } from '../context/set' import { delay } from '../context/delay' -import { fetch } from '../context/fetch' import { type ResponseResolutionContext } from '../utils/getResponse' import { type SerializedResponse } from '../setupWorker/glossary' @@ -12,14 +11,12 @@ export type DefaultContext = { status: typeof status set: typeof set delay: typeof delay - fetch: typeof fetch } export const defaultContext: DefaultContext = { status, set, delay, - fetch, } export type DefaultRequestMultipartBody = Record< diff --git a/src/index.ts b/src/index.ts index 9db40ef0e..91a6fb87d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -27,7 +27,6 @@ export { cleanUrl } from './utils/url/cleanUrl' export type { SetupWorkerApi, StartOptions } from './setupWorker/glossary' export type { SharedOptions } from './sharedOptions' -export * from './utils/request/MockedRequest' export type { ResponseResolver, ResponseResolverReturnType, diff --git a/src/node/createSetupServer.ts b/src/node/createSetupServer.ts index 56b501ace..f6cb45691 100644 --- a/src/node/createSetupServer.ts +++ b/src/node/createSetupServer.ts @@ -3,7 +3,6 @@ import { isNodeProcess } from 'is-node-process' import { StrictEventEmitter } from 'strict-event-emitter' import { BatchInterceptor, - MockedResponse as MockedInterceptedResponse, Interceptor, HttpRequestEventMap, } from '@mswjs/interceptors' @@ -16,7 +15,6 @@ import { mergeRight } from '../utils/internal/mergeRight' import { devUtils } from '../utils/internal/devUtils' import { pipeEvents } from '../utils/internal/pipeEvents' import { RequiredDeep } from '../typeUtils' -import { MockedRequest } from '../utils/request/MockedRequest' import { toReadonlyArray } from '../utils/internal/toReadonlyArray' const DEFAULT_LISTEN_OPTIONS: RequiredDeep = { @@ -28,14 +26,14 @@ const DEFAULT_LISTEN_OPTIONS: RequiredDeep = { * Useful to generate identical API using different patches to request issuing modules. */ export function createSetupServer( - ...interceptors: { new (): Interceptor }[] + ...interceptors: Array> ) { const emitter = new StrictEventEmitter() const publicEmitter = new StrictEventEmitter() pipeEvents(emitter, publicEmitter) return function setupServer( - ...requestHandlers: RequestHandler[] + ...requestHandlers: Array ): SetupServerApi { requestHandlers.forEach((handler) => { if (Array.isArray(handler)) @@ -48,7 +46,7 @@ export function createSetupServer( // Store the list of request handlers for the current server instance, // so it could be modified at a runtime. - let currentHandlers: RequestHandler[] = [...requestHandlers] + let currentHandlers: Array = [...requestHandlers] // Error when attempting to run this function in a browser environment. if (!isNodeProcess()) { @@ -66,51 +64,30 @@ export function createSetupServer( interceptors: interceptors.map((Interceptor) => new Interceptor()), }) - interceptor.on('request', async function setupServerListener(request) { - const mockedRequest = new MockedRequest(request.url, { - ...request, - body: await request.arrayBuffer(), - }) - - const response = await handleRequest< - MockedInterceptedResponse & { delay?: number } - >(mockedRequest, currentHandlers, resolvedOptions, emitter, { - transformResponse(response) { - return { - status: response.status, - statusText: response.statusText, - headers: response.headers.all(), - body: response.body, - delay: response.delay, - } - }, - }) - - if (response) { - // Delay Node.js responses in the listener so that - // the response lookup logic is not concerned with responding - // in any way. The same delay is implemented in the worker. - if (response.delay) { - await new Promise((resolve) => { - setTimeout(resolve, response.delay) - }) - } - - request.respondWith(response) - } + interceptor.on( + 'request', + async function setupServerListener(request, requestId) { + const response = await handleRequest( + request, + requestId, + currentHandlers, + resolvedOptions, + emitter, + ) - return - }) + if (response) { + request.respondWith(response) + } - interceptor.on('response', (request, response) => { - if (!request.id) { return - } + }, + ) + interceptor.on('response', (response, _, requestId) => { if (response.headers.get('x-powered-by') === 'msw') { - emitter.emit('response:mocked', response, request.id) + emitter.emit('response:mocked', response, requestId) } else { - emitter.emit('response:bypass', response, request.id) + emitter.emit('response:bypass', response, requestId) } }) diff --git a/src/node/glossary.ts b/src/node/glossary.ts index 1451e7051..f85730790 100644 --- a/src/node/glossary.ts +++ b/src/node/glossary.ts @@ -1,5 +1,4 @@ import type { PartialDeep } from 'type-fest' -import type { IsomorphicResponse } from '@mswjs/interceptors' import { RequestHandler, RequestHandlerDefaultInfo, @@ -10,7 +9,7 @@ import { SharedOptions, } from '../sharedOptions' -export type ServerLifecycleEventsMap = LifeCycleEventsMap +export type ServerLifecycleEventsMap = LifeCycleEventsMap export interface SetupServerApi { /** @@ -29,7 +28,7 @@ export interface SetupServerApi { * Prepends given request handlers to the list of existing handlers. * @see {@link https://mswjs.io/docs/api/setup-server/use `server.use()`} */ - use(...handlers: RequestHandler[]): void + use(...handlers: Array): void /** * Marks all request handlers that respond using `res.once()` as unused. @@ -41,7 +40,7 @@ export interface SetupServerApi { * Resets request handlers to the initial list given to the `setupServer` call, or to the explicit next request handlers list, if given. * @see {@link https://mswjs.io/docs/api/setup-server/reset-handlers `server.reset-handlers()`} */ - resetHandlers(...nextHandlers: RequestHandler[]): void + resetHandlers(...nextHandlers: Array): void /** * Returns a readonly list of currently active request handlers. diff --git a/src/setupWorker/glossary.ts b/src/setupWorker/glossary.ts index 03100faf7..0b99b73ff 100644 --- a/src/setupWorker/glossary.ts +++ b/src/setupWorker/glossary.ts @@ -94,15 +94,13 @@ export interface ServiceWorkerBroadcastChannelMessageMap { MOCK_RESPONSE_END(): void } -export type WorkerLifecycleEventsMap = LifeCycleEventsMap - export interface SetupWorkerInternalContext { isMockingEnabled: boolean startOptions?: RequiredDeep worker: ServiceWorker | null registration: ServiceWorkerRegistration | null requestHandlers: RequestHandler[] - emitter: StrictEventEmitter + emitter: StrictEventEmitter keepAliveInterval?: number workerChannel: { /** @@ -253,5 +251,5 @@ export interface SetupWorkerApi { */ printHandlers: () => void - events: LifeCycleEventEmitter + events: LifeCycleEventEmitter } diff --git a/src/setupWorker/setupWorker.ts b/src/setupWorker/setupWorker.ts index 4770ea60f..11a11c7a3 100644 --- a/src/setupWorker/setupWorker.ts +++ b/src/setupWorker/setupWorker.ts @@ -4,7 +4,6 @@ import { SetupWorkerInternalContext, SetupWorkerApi, ServiceWorkerIncomingEventsMap, - WorkerLifecycleEventsMap, } from './glossary' import { createStartHandler } from './start/createStartHandler' import { createStop } from './stop/createStop' @@ -18,6 +17,7 @@ import { createFallbackStop } from './stop/createFallbackStop' import { devUtils } from '../utils/internal/devUtils' import { pipeEvents } from '../utils/internal/pipeEvents' import { toReadonlyArray } from '../utils/internal/toReadonlyArray' +import { LifeCycleEventsMap } from '../sharedOptions' interface Listener { target: EventTarget @@ -27,7 +27,7 @@ interface Listener { // Declare the list of event handlers on the module's scope // so it persists between Fash refreshes of the application's code. -let listeners: Listener[] = [] +let listeners: Array = [] /** * Creates a new mock Service Worker registration @@ -36,7 +36,7 @@ let listeners: Listener[] = [] * @see {@link https://mswjs.io/docs/api/setup-worker `setupWorker`} */ export function setupWorker( - ...requestHandlers: RequestHandler[] + ...requestHandlers: Array ): SetupWorkerApi { requestHandlers.forEach((handler) => { if (Array.isArray(handler)) @@ -56,8 +56,8 @@ export function setupWorker( ) } - const emitter = new StrictEventEmitter() - const publicEmitter = new StrictEventEmitter() + const emitter = new StrictEventEmitter() + const publicEmitter = new StrictEventEmitter() pipeEvents(emitter, publicEmitter) const context: SetupWorkerInternalContext = { diff --git a/src/setupWorker/start/createFallbackRequestListener.ts b/src/setupWorker/start/createFallbackRequestListener.ts index 1ea85f88e..4b133062b 100644 --- a/src/setupWorker/start/createFallbackRequestListener.ts +++ b/src/setupWorker/start/createFallbackRequestListener.ts @@ -5,14 +5,9 @@ import { } from '@mswjs/interceptors' import { FetchInterceptor } from '@mswjs/interceptors/lib/interceptors/fetch' import { XMLHttpRequestInterceptor } from '@mswjs/interceptors/lib/interceptors/XMLHttpRequest' -import { - SerializedResponse, - SetupWorkerInternalContext, - StartOptions, -} from '../glossary' +import { SetupWorkerInternalContext, StartOptions } from '../glossary' import type { RequiredDeep } from '../../typeUtils' import { handleRequest } from '../../utils/handleRequest' -import { MockedRequest } from '../../utils/request/MockedRequest' import { serializeResponse } from '../../utils/logging/serializeResponse' import { createResponseFromIsomorphicResponse } from '../../utils/request/createResponseFromIsomorphicResponse' @@ -26,34 +21,16 @@ export function createFallbackRequestListener( }) interceptor.on('request', async (request) => { - const mockedRequest = new MockedRequest(request.url, { - ...request, - body: await request.arrayBuffer(), - }) - - const response = await handleRequest( - mockedRequest, + const response = await handleRequest( + request, context.requestHandlers, options, context.emitter, { - transformResponse(response) { - return { - status: response.status, - statusText: response.statusText, - headers: response.headers.all(), - body: response.body, - delay: response.delay, - } - }, - onMockedResponse(_, { handler, publicRequest, parsedRequest }) { + onMockedResponse(_, { handler, request, parsedRequest }) { if (!options.quiet) { context.emitter.once('response:mocked', (response) => { - handler.log( - publicRequest, - serializeResponse(response), - parsedRequest, - ) + handler.log(request, serializeResponse(response), parsedRequest) }) } }, @@ -65,17 +42,13 @@ export function createFallbackRequestListener( } }) - interceptor.on('response', (request, response) => { - if (!request.id) { - return - } - + interceptor.on('response', (response, request, requestId) => { const browserResponse = createResponseFromIsomorphicResponse(response) if (response.headers.get('x-powered-by') === 'msw') { - context.emitter.emit('response:mocked', browserResponse, request.id) + context.emitter.emit('response:mocked', browserResponse, requestId) } else { - context.emitter.emit('response:bypass', browserResponse, request.id) + context.emitter.emit('response:bypass', browserResponse, requestId) } }) diff --git a/src/setupWorker/start/createRequestListener.ts b/src/setupWorker/start/createRequestListener.ts index fe0e731dc..0d5fea95c 100644 --- a/src/setupWorker/start/createRequestListener.ts +++ b/src/setupWorker/start/createRequestListener.ts @@ -13,6 +13,7 @@ import { handleRequest } from '../../utils/handleRequest' import { RequiredDeep } from '../../typeUtils' import { devUtils } from '../../utils/internal/devUtils' import { serializeResponse } from '../../utils/logging/serializeResponse' +import { uuidv4 } from '../../utils/internal/uuidv4' export const createRequestListener = ( context: SetupWorkerInternalContext, @@ -26,11 +27,13 @@ export const createRequestListener = ( >, ) => { const messageChannel = new WorkerChannel(event.ports[0]) + const requestId = uuidv4() const request = parseWorkerRequest(message.payload) try { await handleRequest( request, + requestId, context.requestHandlers, options, context.emitter, diff --git a/src/sharedOptions.ts b/src/sharedOptions.ts index 1cc0e6c62..fb8e08c85 100644 --- a/src/sharedOptions.ts +++ b/src/sharedOptions.ts @@ -13,19 +13,31 @@ export interface SharedOptions { onUnhandledRequest?: UnhandledRequestStrategy } -export interface LifeCycleEventsMap { - 'request:start': (request: Request) => void - 'request:match': (request: Request) => void - 'request:unhandled': (request: Request) => void - 'request:end': (request: Request) => void - 'response:mocked': (response: ResponseType, requestId: string) => void - 'response:bypass': (response: ResponseType, requestId: string) => void - unhandledException: (error: Error, request: Request) => void +export interface LifeCycleEventsMap { + 'request:start': (request: Request, requestId: string) => void + 'request:match': (request: Request, requestId: string) => void + 'request:unhandled': (request: Request, requestId: string) => void + 'request:end': (request: Request, requestId: string) => void + 'response:mocked': ( + response: Response, + request: Request, + requestId: string, + ) => void + 'response:bypass': ( + response: Response, + request: Request, + requestId: string, + ) => void + unhandledException: ( + error: Error, + request: Request, + requestId: string, + ) => void } export type LifeCycleEventEmitter< - ResponseType extends Record, + EventsMap extends Record, > = Pick< - StrictEventEmitter, + StrictEventEmitter, 'on' | 'removeListener' | 'removeAllListeners' > diff --git a/src/utils/HttpResponse.ts b/src/utils/HttpResponse.ts index af618fb1c..ab165cb24 100644 --- a/src/utils/HttpResponse.ts +++ b/src/utils/HttpResponse.ts @@ -1,6 +1,9 @@ import * as cookieUtils from 'cookie' import httpStatusTexts from 'statuses/codes.json' import { Headers } from 'headers-polyfill' +import { Response as ResponsePolyfill } from '@remix-run/web-fetch' + +const Response = globalThis.Response || ResponsePolyfill export interface HttpResponseInit extends ResponseInit { type?: ResponseType diff --git a/src/utils/handleRequest.ts b/src/utils/handleRequest.ts index fb3b597a9..57430f738 100644 --- a/src/utils/handleRequest.ts +++ b/src/utils/handleRequest.ts @@ -39,16 +39,17 @@ export interface HandleRequestOptions { export async function handleRequest( request: Request, + requestId: string, handlers: Array, options: RequiredDeep, emitter: StrictEventEmitter, handleRequestOptions?: HandleRequestOptions, ): Promise { - emitter.emit('request:start', request) + emitter.emit('request:start', request, requestId) // Perform bypassed requests (i.e. issued via "ctx.fetch") as-is. if (request.headers.get('x-msw-bypass') === 'true') { - emitter.emit('request:end', request) + emitter.emit('request:end', request, requestId) handleRequestOptions?.onPassthroughResponse?.(request) return } @@ -64,7 +65,7 @@ export async function handleRequest( if (lookupError) { // Allow developers to react to unhandled exceptions in request handlers. - emitter.emit('unhandledException', lookupError, request) + emitter.emit('unhandledException', lookupError, request, requestId) throw lookupError } @@ -74,8 +75,8 @@ export async function handleRequest( // Allow the developer to react to such cases. if (!handler) { onUnhandledRequest(request, handlers, options.onUnhandledRequest) - emitter.emit('request:unhandled', request) - emitter.emit('request:end', request) + emitter.emit('request:unhandled', request, requestId) + emitter.emit('request:end', request, requestId) handleRequestOptions?.onPassthroughResponse?.(request) return } @@ -95,7 +96,7 @@ Expected response resolver to return a mocked response Object, but got %s. The o handler.info.callFrame, ) - emitter.emit('request:end', request) + emitter.emit('request:end', request, requestId) handleRequestOptions?.onPassthroughResponse?.(request) return } @@ -103,7 +104,7 @@ Expected response resolver to return a mocked response Object, but got %s. The o // When the developer explicitly returned "req.passthrough()" do not warn them. // Perform the request as-is. if (response.status === 101) { - emitter.emit('request:end', request) + emitter.emit('request:end', request, requestId) handleRequestOptions?.onPassthroughResponse?.(request) return } @@ -113,7 +114,7 @@ Expected response resolver to return a mocked response Object, but got %s. The o // Store all the received response cookies in the virtual cookie store. readResponseCookies(request, response) - emitter.emit('request:match', request) + emitter.emit('request:match', request, requestId) const requiredLookupResult = lookupResult as RequiredDeep @@ -127,7 +128,7 @@ Expected response resolver to return a mocked response Object, but got %s. The o requiredLookupResult, ) - emitter.emit('request:end', request) + emitter.emit('request:end', request, requestId) return transformedResponse } diff --git a/src/utils/request/MockedRequest.test.ts b/src/utils/request/MockedRequest.test.ts deleted file mode 100644 index 1565a77f2..000000000 --- a/src/utils/request/MockedRequest.test.ts +++ /dev/null @@ -1,234 +0,0 @@ -import { Headers } from 'headers-polyfill' -import { clearCookies } from '../../../test/support/utils' -import { MockedRequest } from './MockedRequest' - -const url = new URL('/resource', location.href) - -describe('cache', () => { - it('sets "default" as the default request cache', () => { - const request = new MockedRequest(url) - expect(request.cache).toBe('default') - }) - - it('respects custom request init cache', () => { - const request = new MockedRequest(url, { cache: 'no-cache' }) - expect(request.cache).toBe('no-cache') - }) -}) - -describe('credentials', () => { - it('sets "same-origin" as the default request credentials', () => { - const request = new MockedRequest(url) - expect(request.credentials).toBe('same-origin') - }) - - it('respects custom request init credentials', () => { - const request = new MockedRequest(url, { credentials: 'include' }) - expect(request.credentials).toBe('include') - }) -}) - -describe('destination', () => { - it('sets empty string as the default request destination', () => { - const request = new MockedRequest(url) - expect(request.destination).toBe('') - }) - - it('respects custom request init destination', () => { - const request = new MockedRequest(url, { destination: 'image' }) - expect(request.destination).toBe('image') - }) -}) - -describe('integrity', () => { - it('sets empty string as the default request integrity', () => { - const request = new MockedRequest(url) - expect(request.integrity).toBe('') - }) - - it('respects custom request init integrity', () => { - const request = new MockedRequest(url, { integrity: 'sha256-...' }) - expect(request.integrity).toBe('sha256-...') - }) -}) - -describe('keepalive', () => { - it('sets false as the default request keepalive', () => { - const request = new MockedRequest(url) - expect(request.keepalive).toBe(false) - }) - - it('respects custom request init keepalive', () => { - const request = new MockedRequest(url, { keepalive: true }) - expect(request.keepalive).toBe(true) - }) -}) - -describe('mode', () => { - it('sets "cors" as the default request mode', () => { - const request = new MockedRequest(url) - expect(request.mode).toBe('cors') - }) - - it('respects custom request init mode', () => { - const request = new MockedRequest(url, { mode: 'no-cors' }) - expect(request.mode).toBe('no-cors') - }) -}) - -describe('method', () => { - it('sets "GET" as the default request method', () => { - const request = new MockedRequest(url) - expect(request.method).toBe('GET') - }) - - it('respects custom request init method', () => { - const request = new MockedRequest(url, { method: 'POST' }) - expect(request.method).toBe('POST') - }) -}) - -describe('priority', () => { - it('sets "auto" as the default request priority', () => { - const request = new MockedRequest(url) - expect(request.priority).toBe('auto') - }) - - it('respects custom request init priority', () => { - const request = new MockedRequest(url, { priority: 'high' }) - expect(request.priority).toBe('high') - }) -}) - -describe('redirect', () => { - it('sets "follow" as the default request redirect', () => { - const request = new MockedRequest(url) - expect(request.redirect).toBe('follow') - }) - - it('respects custom request init redirect', () => { - const request = new MockedRequest(url, { redirect: 'error' }) - expect(request.redirect).toBe('error') - }) -}) - -describe('referrer', () => { - it('sets empty string as the default request referrer', () => { - const request = new MockedRequest(url) - expect(request.referrer).toBe('') - }) - - it('respects custom request init referrer', () => { - const request = new MockedRequest(url, { referrer: 'https://example.com' }) - expect(request.referrer).toBe('https://example.com') - }) -}) - -describe('referrerPolicy', () => { - it('sets "no-referrer" as the default request referrerPolicy', () => { - const request = new MockedRequest(url) - expect(request.referrerPolicy).toBe('no-referrer') - }) - - it('respects custom request init referrerPolicy', () => { - const request = new MockedRequest(url, { referrerPolicy: 'origin' }) - expect(request.referrerPolicy).toBe('origin') - }) -}) - -describe('cookies', () => { - beforeAll(() => { - clearCookies() - }) - - afterEach(() => { - clearCookies() - }) - - it('preserves request cookies when there are no document cookies to infer', () => { - const request = new MockedRequest(url, { - headers: new Headers({ Cookie: 'token=abc-123' }), - }) - - expect(request.cookies).toEqual({ token: 'abc-123' }) - expect(request.headers.get('cookie')).toBe('token=abc-123') - }) - - it('infers document cookies for request with "same-origin" credentials', () => { - document.cookie = 'documentCookie=yes' - - const request = new MockedRequest(url, { - headers: new Headers({ Cookie: 'token=abc-123' }), - credentials: 'same-origin', - }) - - expect(request.headers.get('cookie')).toEqual( - 'token=abc-123, documentCookie=yes', - ) - expect(request.cookies).toEqual({ - // Cookies present in the document must be forwarded. - documentCookie: 'yes', - token: 'abc-123', - }) - }) - - it('does not infer document cookies for request with "same-origin" credentials made to extraneous origin', () => { - document.cookie = 'documentCookie=yes' - - const request = new MockedRequest(new URL('https://example.com'), { - headers: new Headers({ Cookie: 'token=abc-123' }), - credentials: 'same-origin', - }) - - expect(request.headers.get('cookie')).toBe('token=abc-123') - expect(request.cookies).toEqual({ token: 'abc-123' }) - }) - - it('infers document cookies for request with "include" credentials', () => { - document.cookie = 'documentCookie=yes' - - const request = new MockedRequest(url, { - headers: new Headers({ Cookie: 'token=abc-123' }), - credentials: 'include', - }) - - expect(request.headers.get('cookie')).toBe( - 'token=abc-123, documentCookie=yes', - ) - expect(request.cookies).toEqual({ - // Cookies present in the document must be forwarded. - documentCookie: 'yes', - token: 'abc-123', - }) - }) - - it('infers document cookies for request with "include" credentials made to extraneous origin', () => { - document.cookie = 'documentCookie=yes' - - const request = new MockedRequest(new URL('https://example.com'), { - headers: new Headers({ Cookie: 'token=abc-123' }), - credentials: 'include', - }) - - expect(request.headers.get('cookie')).toBe( - 'token=abc-123, documentCookie=yes', - ) - expect(request.cookies).toEqual({ - // Document cookies are always included. - documentCookie: 'yes', - token: 'abc-123', - }) - }) - - it('does not infer document cookies for request with "omit" credentials', () => { - document.cookie = 'documentCookie=yes' - - const request = new MockedRequest(url, { - headers: new Headers({ Cookie: 'token=abc-123' }), - credentials: 'omit', - }) - - expect(request.headers.get('cookie')).toBe('token=abc-123') - expect(request.cookies).toEqual({ token: 'abc-123' }) - }) -}) diff --git a/src/utils/request/MockedRequest.ts b/src/utils/request/MockedRequest.ts deleted file mode 100644 index d142ad5a1..000000000 --- a/src/utils/request/MockedRequest.ts +++ /dev/null @@ -1,180 +0,0 @@ -import * as cookieUtils from 'cookie' -import { store } from '@mswjs/cookies' -import { IsomorphicRequest, RequestInit } from '@mswjs/interceptors' -import { decodeBuffer } from '@mswjs/interceptors/lib/utils/bufferUtils' -import { Headers } from 'headers-polyfill' -import { DefaultBodyType } from '../../handlers/RequestHandler' -import { MockedResponse } from '../../response' -import { getRequestCookies } from './getRequestCookies' -import { parseBody } from './parseBody' -import { isStringEqual } from '../internal/isStringEqual' - -export type RequestCache = - | 'default' - | 'no-store' - | 'reload' - | 'no-cache' - | 'force-cache' - | 'only-if-cached' - -export type RequestMode = 'navigate' | 'same-origin' | 'no-cors' | 'cors' - -export type RequestRedirect = 'follow' | 'error' | 'manual' - -export type RequestDestination = - | '' - | 'audio' - | 'audioworklet' - | 'document' - | 'embed' - | 'font' - | 'frame' - | 'iframe' - | 'image' - | 'manifest' - | 'object' - | 'paintworklet' - | 'report' - | 'script' - | 'sharedworker' - | 'style' - | 'track' - | 'video' - | 'xslt' - | 'worker' - -export type RequestPriority = 'high' | 'low' | 'auto' - -export type RequestReferrerPolicy = - | '' - | 'no-referrer' - | 'no-referrer-when-downgrade' - | 'origin' - | 'origin-when-cross-origin' - | 'same-origin' - | 'strict-origin' - | 'strict-origin-when-cross-origin' - | 'unsafe-url' - -export interface MockedRequestInit extends RequestInit { - id?: string - cache?: RequestCache - redirect?: RequestRedirect - integrity?: string - keepalive?: boolean - mode?: RequestMode - priority?: RequestPriority - destination?: RequestDestination - referrer?: string - referrerPolicy?: RequestReferrerPolicy - cookies?: Record -} - -export class MockedRequest< - RequestBody extends DefaultBodyType = DefaultBodyType, -> extends IsomorphicRequest { - public readonly cache: RequestCache - public readonly cookies: Record - public readonly destination: RequestDestination - public readonly integrity: string - public readonly keepalive: boolean - public readonly mode: RequestMode - public readonly priority: RequestPriority - public readonly redirect: RequestRedirect - public readonly referrer: string - public readonly referrerPolicy: RequestReferrerPolicy - - constructor(url: URL, init: MockedRequestInit = {}) { - super(url, init) - if (init.id) { - this.id = init.id - } - this.cache = init.cache || 'default' - this.destination = init.destination || '' - this.integrity = init.integrity || '' - this.keepalive = init.keepalive || false - this.mode = init.mode || 'cors' - this.priority = init.priority || 'auto' - this.redirect = init.redirect || 'follow' - this.referrer = init.referrer || '' - this.referrerPolicy = init.referrerPolicy || 'no-referrer' - this.cookies = init.cookies || this.getCookies() - } - - /** - * Get parsed request body. The type is inferred from the content type. - * - * @deprecated - Use `req.text()`, `req.json()` or `req.arrayBuffer()` - * to read the request body as a plain text, JSON, or ArrayBuffer. - */ - public get body(): RequestBody { - const text = decodeBuffer(this['_body']) - - /** - * @deprecated https://github.com/mswjs/msw/issues/1318 - * @fixme Remove this assumption and let the users read - * request body explicitly using ".json()"/".text()"/".arrayBuffer()". - */ - // Parse the request's body based on the "Content-Type" header. - const body = parseBody(text, this.headers) - - if (isStringEqual(this.method, 'GET') && body === '') { - return undefined as RequestBody - } - - return body as RequestBody - } - - /** - * Bypass the intercepted request. - * This will make a call to the actual endpoint requested. - */ - public passthrough(): MockedResponse { - return { - // Constructing a dummy "101 Continue" mocked response - // to keep the return type of the resolver consistent. - status: 101, - statusText: 'Continue', - headers: new Headers(), - body: null, - // Setting "passthrough" to true will signal the response pipeline - // to perform this intercepted request as-is. - passthrough: true, - once: false, - } - } - - private getCookies(): Record { - // Parse the cookies passed in the original request "cookie" header. - const requestCookiesString = this.headers.get('cookie') - const ownCookies = requestCookiesString - ? cookieUtils.parse(requestCookiesString) - : {} - - store.hydrate() - - const cookiesFromStore = Array.from( - store.get({ ...this, url: this.url.href })?.entries(), - ).reduce((cookies, [name, { value }]) => { - return Object.assign(cookies, { [name.trim()]: value }) - }, {}) - - // Get existing document cookies that are applicable - // to this request based on its "credentials" policy. - const cookiesFromDocument = getRequestCookies(this as any) - - const forwardedCookies = { - ...cookiesFromDocument, - ...cookiesFromStore, - } - - for (const [name, value] of Object.entries(forwardedCookies)) { - this.headers.append('cookie', `${name}=${value}`) - } - - return { - ...forwardedCookies, - ...ownCookies, - } - } -} diff --git a/test/msw-api/req/passthrough.node.test.ts b/test/msw-api/req/passthrough.node.test.ts index 9bed65782..9cb4beca1 100644 --- a/test/msw-api/req/passthrough.node.test.ts +++ b/test/msw-api/req/passthrough.node.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' import { ServerApi, createServer } from '@open-draft/test-server' @@ -39,7 +39,7 @@ afterAll(async () => { it('performs request as-is when returning "req.passthrough" call in the resolver', async () => { const endpointUrl = httpServer.http.makeUrl('/user') server.use( - rest.post(endpointUrl, (req) => { + rest.post(endpointUrl, (req) => { return req.passthrough() }), ) @@ -56,11 +56,11 @@ it('performs request as-is when returning "req.passthrough" call in the resolver it('does not allow fall-through when returning "req.passthrough" call in the resolver', async () => { const endpointUrl = httpServer.http.makeUrl('/user') server.use( - rest.post(endpointUrl, (req) => { + rest.post(endpointUrl, (req) => { return req.passthrough() }), - rest.post(endpointUrl, (req, res, ctx) => { - return res(ctx.json({ name: 'Kate' })) + rest.post(endpointUrl, () => { + return HttpResponse.json({ name: 'Kate' }) }), ) @@ -76,7 +76,7 @@ it('does not allow fall-through when returning "req.passthrough" call in the res it('prints a warning and performs a request as-is if nothing was returned from the resolver', async () => { const endpointUrl = httpServer.http.makeUrl('/user') server.use( - rest.post(endpointUrl, () => { + rest.post(endpointUrl, () => { return }), ) diff --git a/test/msw-api/req/passthrough.test.ts b/test/msw-api/req/passthrough.test.ts index 2a3d34a9a..680cd24b5 100644 --- a/test/msw-api/req/passthrough.test.ts +++ b/test/msw-api/req/passthrough.test.ts @@ -3,13 +3,14 @@ */ import * as path from 'path' import { pageWith } from 'page-with' -import { rest, SetupWorkerApi } from 'msw' +import { HttpResponse, rest, SetupWorkerApi } from 'msw' import { createServer, ServerApi } from '@open-draft/test-server' declare namespace window { export const msw: { worker: SetupWorkerApi rest: typeof rest + HttpResponse: typeof HttpResponse } } @@ -44,7 +45,7 @@ it('performs request as-is when returning "req.passthrough" call in the resolver await runtime.page.evaluate((endpointUrl) => { const { worker, rest } = window.msw worker.use( - rest.post(endpointUrl, (req) => { + rest.post(endpointUrl, (req) => { return req.passthrough() }), ) @@ -66,13 +67,13 @@ it('does not allow fall-through when returning "req.passthrough" call in the res const endpointUrl = httpServer.http.makeUrl('/user') await runtime.page.evaluate((endpointUrl) => { - const { worker, rest } = window.msw + const { worker, rest, HttpResponse } = window.msw worker.use( - rest.post(endpointUrl, (req) => { + rest.post(endpointUrl, (req) => { return req.passthrough() }), - rest.post(endpointUrl, (req, res, ctx) => { - return res(ctx.json({ name: 'Kate' })) + rest.post(endpointUrl, () => { + return HttpResponse.json({ name: 'Kate' }) }), ) }, endpointUrl) @@ -95,7 +96,7 @@ it('prints a warning and performs a request as-is if nothing was returned from t await runtime.page.evaluate((endpointUrl) => { const { worker, rest } = window.msw worker.use( - rest.post(endpointUrl, () => { + rest.post(endpointUrl, () => { return }), ) diff --git a/test/msw-api/setup-server/input-validation.test.ts b/test/msw-api/setup-server/input-validation.test.ts index a5223f986..ba84446c8 100644 --- a/test/msw-api/setup-server/input-validation.test.ts +++ b/test/msw-api/setup-server/input-validation.test.ts @@ -1,14 +1,14 @@ -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' -test('throws an error given an Array of request handlers to setupServer', async () => { +test('throws an error given an Array of request handlers to setupServer', () => { const createServer = () => { // The next line will be ignored because we want to test that an Error // should be thrown when `setupServer` parameters are not valid // @ts-ignore return setupServer([ - rest.get('https://test.mswjs.io/book/:bookId', (req, res, ctx) => { - return res(ctx.json({ title: 'Original title' })) + rest.get('https://test.mswjs.io/book/:bookId', () => { + return HttpResponse.json({ title: 'Original title' }) }), ]) } diff --git a/test/msw-api/setup-server/life-cycle-events/on.test.ts b/test/msw-api/setup-server/life-cycle-events/on.test.ts index f00e39f5c..6fbeb98f5 100644 --- a/test/msw-api/setup-server/life-cycle-events/on.test.ts +++ b/test/msw-api/setup-server/life-cycle-events/on.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' import { createServer, ServerApi } from '@open-draft/test-server' import { waitFor } from '../../../support/waitFor' @@ -29,8 +29,8 @@ beforeAll(async () => { }) server.use( - rest.get(httpServer.http.makeUrl('/user'), (req, res, ctx) => { - return res(ctx.text('response-body')) + rest.get(httpServer.http.makeUrl('/user'), () => { + return HttpResponse.text('response-body') }), rest.post(httpServer.http.makeUrl('/no-response'), () => { return @@ -41,33 +41,35 @@ beforeAll(async () => { ) server.listen() - server.events.on('request:start', (req) => { - listener(`[request:start] ${req.method} ${req.url.href} ${req.id}`) + server.events.on('request:start', (request, requestId) => { + listener(`[request:start] ${request.method} ${request.url} ${requestId}`) }) - server.events.on('request:match', (req) => { - listener(`[request:match] ${req.method} ${req.url.href} ${req.id}`) + server.events.on('request:match', (request, requestId) => { + listener(`[request:match] ${request.method} ${request.url} ${requestId}`) }) - server.events.on('request:unhandled', (req) => { - listener(`[request:unhandled] ${req.method} ${req.url.href} ${req.id}`) + server.events.on('request:unhandled', (request, requestId) => { + listener( + `[request:unhandled] ${request.method} ${request.url} ${requestId}`, + ) }) - server.events.on('request:end', (req) => { - listener(`[request:end] ${req.method} ${req.url.href} ${req.id}`) + server.events.on('request:end', (request, requestId) => { + listener(`[request:end] ${request.method} ${request.url} ${requestId}`) }) - server.events.on('response:mocked', (res, requestId) => { - listener(`[response:mocked] ${res.body} ${requestId}`) + server.events.on('response:mocked', async (response, requestId) => { + listener(`[response:mocked] ${await response.text()} ${requestId}`) }) - server.events.on('response:bypass', (res, requestId) => { - listener(`[response:bypass] ${res.body} ${requestId}`) + server.events.on('response:bypass', async (response, requestId) => { + listener(`[response:bypass] ${await response.text()} ${requestId}`) }) - server.events.on('unhandledException', (error, req) => { + server.events.on('unhandledException', (error, request, requestId) => { listener( - `[unhandledException] ${req.method} ${req.url.href} ${req.id} ${error.message}`, + `[unhandledException] ${request.method} ${request.url} ${requestId} ${error.message}`, ) }) diff --git a/test/msw-api/setup-server/life-cycle-events/removeAllListeners.test.ts b/test/msw-api/setup-server/life-cycle-events/removeAllListeners.test.ts index 3b7383889..48314ab95 100644 --- a/test/msw-api/setup-server/life-cycle-events/removeAllListeners.test.ts +++ b/test/msw-api/setup-server/life-cycle-events/removeAllListeners.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' import { createServer, ServerApi } from '@open-draft/test-server' @@ -17,8 +17,8 @@ beforeAll(async () => { }) server.use( - rest.get(httpServer.http.makeUrl('/user'), (req, res, ctx) => { - return res(ctx.json({ firstName: 'John' })) + rest.get(httpServer.http.makeUrl('/user'), () => { + return HttpResponse.json({ firstName: 'John' }) }), ) server.listen() diff --git a/test/msw-api/setup-server/life-cycle-events/removeListener.test.ts b/test/msw-api/setup-server/life-cycle-events/removeListener.test.ts index 739b96437..47b19648d 100644 --- a/test/msw-api/setup-server/life-cycle-events/removeListener.test.ts +++ b/test/msw-api/setup-server/life-cycle-events/removeListener.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' import { createServer, ServerApi } from '@open-draft/test-server' @@ -17,8 +17,8 @@ beforeAll(async () => { }) server.use( - rest.get(httpServer.http.makeUrl('/user'), (req, res, ctx) => { - return res(ctx.json({ firstName: 'John' })) + rest.get(httpServer.http.makeUrl('/user'), () => { + return HttpResponse.json({ firstName: 'John' }) }), ) server.listen() diff --git a/test/msw-api/setup-server/resetHandlers.test.ts b/test/msw-api/setup-server/resetHandlers.test.ts index 4173eb4fb..e1fe39a75 100644 --- a/test/msw-api/setup-server/resetHandlers.test.ts +++ b/test/msw-api/setup-server/resetHandlers.test.ts @@ -2,12 +2,12 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' const server = setupServer( - rest.get('https://test.mswjs.io/books', (req, res, ctx) => { - return res(ctx.json({ title: 'Original title' })) + rest.get('https://test.mswjs.io/books', () => { + return HttpResponse.json({ title: 'Original title' }) }), ) @@ -23,8 +23,8 @@ afterAll(() => { test('removes all runtime request handlers when resetting without explicit next handlers', async () => { server.use( - rest.post('https://test.mswjs.io/login', (req, res, ctx) => { - return res(ctx.json({ accepted: true })) + rest.post('https://test.mswjs.io/login', () => { + return HttpResponse.json({ accepted: true }) }), ) @@ -53,16 +53,16 @@ test('removes all runtime request handlers when resetting without explicit next test('replaces all handlers with the explicit next runtime handlers upon reset', async () => { server.use( - rest.post('https://test.mswjs.io/login', (req, res, ctx) => { - return res(ctx.json({ accepted: true })) + rest.post('https://test.mswjs.io/login', () => { + return HttpResponse.json({ accepted: true }) }), ) // Once reset with explicit next requets handlers, // replaces all present requets handlers with those. server.resetHandlers( - rest.get('https://test.mswjs.io/products', (req, res, ctx) => { - return res(ctx.json([1, 2, 3])) + rest.get('https://test.mswjs.io/products', () => { + return HttpResponse.json([1, 2, 3]) }), ) diff --git a/test/msw-api/setup-server/restoreHandlers.test.ts b/test/msw-api/setup-server/restoreHandlers.test.ts index b8862c925..8ea136e13 100644 --- a/test/msw-api/setup-server/restoreHandlers.test.ts +++ b/test/msw-api/setup-server/restoreHandlers.test.ts @@ -2,12 +2,12 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' const server = setupServer( - rest.get('https://test.mswjs.io/book/:bookId', (req, res, ctx) => { - return res(ctx.json({ title: 'Original title' })) + rest.get('https://test.mswjs.io/book/:bookId', () => { + return HttpResponse.json({ title: 'Original title' }) }), ) @@ -16,8 +16,8 @@ afterAll(() => server.close()) test('returns a mocked response from the used one-time request handler when restored', async () => { server.use( - rest.get('https://test.mswjs.io/book/:bookId', (req, res, ctx) => { - return res.once(ctx.json({ title: 'Overridden title' })) + rest.get('https://test.mswjs.io/book/:bookId', () => { + return HttpResponse.json({ title: 'Overridden title' }) }), ) diff --git a/test/msw-api/setup-server/scenarios/cookies-request.test.ts b/test/msw-api/setup-server/scenarios/cookies-request.test.ts index 6ae1dfe33..43399dbac 100644 --- a/test/msw-api/setup-server/scenarios/cookies-request.test.ts +++ b/test/msw-api/setup-server/scenarios/cookies-request.test.ts @@ -1,5 +1,5 @@ import * as https from 'https' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' import { setupServer, SetupServerApi } from 'msw/node' import { ServerApi, createServer } from '@open-draft/test-server' @@ -14,8 +14,8 @@ beforeAll(async () => { }) server = setupServer( - rest.get(httpServer.https.makeUrl('/user'), (req, res, ctx) => { - return res(ctx.json({ cookies: req.cookies })) + rest.get(httpServer.https.makeUrl('/user'), ({ cookies }) => { + return HttpResponse.json({ cookies }) }), ) diff --git a/test/msw-api/setup-server/scenarios/custom-transformers.test.ts b/test/msw-api/setup-server/scenarios/custom-transformers.test.ts index 39bc1099e..9d9a7f0e0 100644 --- a/test/msw-api/setup-server/scenarios/custom-transformers.test.ts +++ b/test/msw-api/setup-server/scenarios/custom-transformers.test.ts @@ -1,23 +1,18 @@ import fetch from 'node-fetch' import * as JSONbig from 'json-bigint' -import { ResponseTransformer, compose, context, rest } from 'msw' +import { rest, HttpResponse } from 'msw' import { setupServer } from 'msw/node' -const jsonBig = (body: Record): ResponseTransformer => { - return compose( - context.set('Content-Type', 'application/json'), - context.body(JSONbig.stringify(body)), - ) -} - const server = setupServer( - rest.get('http://test.mswjs.io/me', (req, res) => { - return res( - jsonBig({ - username: 'john.maverick', - balance: BigInt(1597928668063727616), - }), - ) + rest.get('http://test.mswjs.io/me', () => { + /** + * @todo Shouldn't "HttpResponse.json()" support strings? + */ + return HttpResponse.plain(JSONbig.stringify(BigInt(1597928668063727616)), { + headers: { + 'Content-Tpye': 'application/json', + }, + }) }), ) diff --git a/test/msw-api/setup-server/scenarios/fake-timers.test.ts b/test/msw-api/setup-server/scenarios/fake-timers.test.ts index a6835f560..050ecbeb3 100644 --- a/test/msw-api/setup-server/scenarios/fake-timers.test.ts +++ b/test/msw-api/setup-server/scenarios/fake-timers.test.ts @@ -1,10 +1,10 @@ import fetch from 'node-fetch' import { setupServer } from 'msw/node' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' const server = setupServer( - rest.get('https://test.mswjs.io/pull', (req, res, ctx) => { - return res(ctx.json({ status: 'pulled' })) + rest.get('https://test.mswjs.io/pull', () => { + return HttpResponse.json({ status: 'pulled' }) }), ) diff --git a/test/msw-api/setup-server/scenarios/fall-through.node.test.ts b/test/msw-api/setup-server/scenarios/fall-through.node.test.ts index e1f128141..6f1547d95 100644 --- a/test/msw-api/setup-server/scenarios/fall-through.node.test.ts +++ b/test/msw-api/setup-server/scenarios/fall-through.node.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' const log = jest.fn() @@ -10,9 +10,9 @@ const log = jest.fn() const server = setupServer( rest.get('https://test.mswjs.io/*', () => log('[get] first')), rest.get('https://test.mswjs.io/us*', () => log('[get] second')), - rest.get('https://test.mswjs.io/user', (req, res, ctx) => - res(ctx.json({ firstName: 'John' })), - ), + rest.get('https://test.mswjs.io/user', () => { + return HttpResponse.json({ firstName: 'John' }) + }), rest.get('https://test.mswjs.io/user', () => log('[get] third')), rest.post('https://test.mswjs.io/blog/*', () => log('[post] first')), diff --git a/test/msw-api/setup-server/scenarios/fetch.test.ts b/test/msw-api/setup-server/scenarios/fetch.test.ts index 7b8070430..798e5a774 100644 --- a/test/msw-api/setup-server/scenarios/fetch.test.ts +++ b/test/msw-api/setup-server/scenarios/fetch.test.ts @@ -1,25 +1,30 @@ import fetch, { Response } from 'node-fetch' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' describe('setupServer / fetch', () => { const server = setupServer( - rest.get('http://test.mswjs.io', (req, res, ctx) => { - return res( - ctx.status(401), - ctx.set('x-header', 'yes'), - ctx.json({ + rest.get('http://test.mswjs.io', () => { + return HttpResponse.json( + { firstName: 'John', age: 32, - }), + }, + { + status: 401, + headers: { + 'X-Header': 'yes', + }, + }, ) }), - rest.post('https://test.mswjs.io', (req, res, ctx) => { - return res( - ctx.status(403), - ctx.set('x-header', 'yes'), - ctx.json(req.body as Record), - ) + rest.post('https://test.mswjs.io', async ({ request }) => { + return HttpResponse.json(await request.json(), { + status: 403, + headers: { + 'X-Header': 'yes', + }, + }) }), ) diff --git a/test/msw-api/setup-server/scenarios/generator.node.test.ts b/test/msw-api/setup-server/scenarios/generator.node.test.ts index 178c3aaea..e6c95928f 100644 --- a/test/msw-api/setup-server/scenarios/generator.node.test.ts +++ b/test/msw-api/setup-server/scenarios/generator.node.test.ts @@ -1,63 +1,49 @@ import fetch from 'node-fetch' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' const server = setupServer( - rest.get( - '/polling/:maxCount', - function* (req, res, ctx) { - const maxCount = parseInt(req.params.maxCount) - let count = 0 - - while (count < maxCount) { - count += 1 - yield res( - ctx.json({ - status: 'pending', - count, - }), - ) - } - - return res( - ctx.json({ - status: 'complete', - count, - }), - ) - }, - ), - - rest.get( + rest.get<{ maxCount: string }>('/polling/:maxCount', function* ({ params }) { + const maxCount = parseInt(params.maxCount) + let count = 0 + + while (count < maxCount) { + count += 1 + yield HttpResponse.json({ + status: 'pending', + count, + }) + } + + return HttpResponse.json({ + status: 'complete', + count, + }) + }), + + rest.get<{ maxCount: string }>( '/polling/once/:maxCount', - function* (req, res, ctx) { - const maxCount = parseInt(req.params.maxCount) + function* ({ params }) { + const maxCount = parseInt(params.maxCount) let count = 0 while (count < maxCount) { count += 1 - yield res( - ctx.json({ - status: 'pending', - count, - }), - ) + yield HttpResponse.json({ + status: 'pending', + count, + }) } - return res.once( - ctx.json({ - status: 'complete', - count, - }), - ) - }, - ), - rest.get( - '/polling/once/:maxCount', - (req, res, ctx) => { - return res(ctx.json({ status: 'done' })) + return HttpResponse.json({ + status: 'complete', + count, + }) }, ), + rest.get<{ maxCount: string }>('/polling/once/:maxCount', () => { + return HttpResponse.json({ status: 'done' }) + }), ) beforeAll(() => { diff --git a/test/msw-api/setup-server/scenarios/graphql.test.ts b/test/msw-api/setup-server/scenarios/graphql.test.ts index f0986fdb3..16d081cd3 100644 --- a/test/msw-api/setup-server/scenarios/graphql.test.ts +++ b/test/msw-api/setup-server/scenarios/graphql.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import fetch from 'cross-fetch' -import { graphql } from 'msw' +import { graphql, HttpResponse } from 'msw' import { setupServer } from 'msw/node' import { createGraphQLClient, gql } from '../../../support/graphql' @@ -30,24 +30,24 @@ const LOGIN = gql` ` const server = setupServer( - graphql.query('GetUserDetail', (req, res, ctx) => { - const { userId } = req.variables + graphql.query('GetUserDetail', ({ variables }) => { + const { userId } = variables - return res( - ctx.data({ + return HttpResponse.json({ + data: { user: { id: userId, firstName: 'John', age: 32, }, - }), - ) + }, + }) }), - graphql.mutation('Login', (req, res, ctx) => { - const { username } = req.variables + graphql.mutation('Login', ({ variables }) => { + const { username } = variables - return res( - ctx.errors([ + return HttpResponse.json({ + errors: [ { message: `User "${username}" is not found`, locations: [ @@ -57,8 +57,8 @@ const server = setupServer( }, ], }, - ]), - ) + ], + }) }), ) diff --git a/test/msw-api/setup-server/scenarios/http.test.ts b/test/msw-api/setup-server/scenarios/http.test.ts index 5aff75a92..2c85124b6 100644 --- a/test/msw-api/setup-server/scenarios/http.test.ts +++ b/test/msw-api/setup-server/scenarios/http.test.ts @@ -2,18 +2,22 @@ * @jest-environment node */ import * as http from 'http' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' describe('setupServer / http', () => { const server = setupServer( - rest.get('http://test.mswjs.io', (req, res, ctx) => { - return res( - ctx.status(401), - ctx.set('x-header', 'yes'), - ctx.json({ + rest.get('http://test.mswjs.io', () => { + return HttpResponse.json( + { firstName: 'John', - }), + }, + { + status: 401, + headers: { + 'X-Header': 'yes', + }, + }, ) }), ) diff --git a/test/msw-api/setup-server/scenarios/https.test.ts b/test/msw-api/setup-server/scenarios/https.test.ts index 27e80ab77..e8f5a49d1 100644 --- a/test/msw-api/setup-server/scenarios/https.test.ts +++ b/test/msw-api/setup-server/scenarios/https.test.ts @@ -3,18 +3,22 @@ */ import * as https from 'https' import { IncomingMessage } from 'http' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' describe('setupServer / https', () => { const server = setupServer( - rest.get('https://test.mswjs.io', (req, res, ctx) => { - return res( - ctx.status(401), - ctx.set('x-header', 'yes'), - ctx.json({ + rest.get('https://test.mswjs.io', () => { + return HttpResponse.json( + { firstName: 'John', - }), + }, + { + status: 401, + headers: { + 'X-Header': 'yes', + }, + }, ) }), ) diff --git a/test/msw-api/setup-server/scenarios/on-unhandled-request/bypass.test.ts b/test/msw-api/setup-server/scenarios/on-unhandled-request/bypass.test.ts index 6905fdd2f..5ba555b67 100644 --- a/test/msw-api/setup-server/scenarios/on-unhandled-request/bypass.test.ts +++ b/test/msw-api/setup-server/scenarios/on-unhandled-request/bypass.test.ts @@ -4,7 +4,7 @@ import fetch from 'node-fetch' import { createServer, ServerApi } from '@open-draft/test-server' import { setupServer } from 'msw/node' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' let httpServer: ServerApi const server = setupServer() @@ -20,8 +20,8 @@ beforeAll(async () => { }) server.use( - rest.get(httpServer.http.makeUrl('/user'), (req, res, ctx) => { - return res(ctx.json({ firstName: 'John' })) + rest.get(httpServer.http.makeUrl('/user'), () => { + return HttpResponse.json({ firstName: 'John' }) }), ) server.listen({ onUnhandledRequest: 'bypass' }) diff --git a/test/msw-api/setup-server/scenarios/on-unhandled-request/callback-throws.test.ts b/test/msw-api/setup-server/scenarios/on-unhandled-request/callback-throws.test.ts index 36507e7a1..f702af082 100644 --- a/test/msw-api/setup-server/scenarios/on-unhandled-request/callback-throws.test.ts +++ b/test/msw-api/setup-server/scenarios/on-unhandled-request/callback-throws.test.ts @@ -3,18 +3,18 @@ */ import fetch from 'node-fetch' import { setupServer } from 'msw/node' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' const server = setupServer( - rest.get('https://test.mswjs.io/user', (req, res, ctx) => { - return res(ctx.json({ firstName: 'John' })) + rest.get('https://test.mswjs.io/user', () => { + return HttpResponse.json({ firstName: 'John' }) }), ) beforeAll(() => server.listen({ - onUnhandledRequest(req) { - throw new Error(`Custom error for ${req.method} ${req.url}`) + onUnhandledRequest(request) { + throw new Error(`Custom error for ${request.method} ${request.url}`) }, }), ) diff --git a/test/msw-api/setup-server/scenarios/on-unhandled-request/callback.test.ts b/test/msw-api/setup-server/scenarios/on-unhandled-request/callback.test.ts index 251c652a9..3efc5d3d1 100644 --- a/test/msw-api/setup-server/scenarios/on-unhandled-request/callback.test.ts +++ b/test/msw-api/setup-server/scenarios/on-unhandled-request/callback.test.ts @@ -3,11 +3,11 @@ */ import fetch from 'node-fetch' import { setupServer } from 'msw/node' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' const server = setupServer( - rest.get('https://test.mswjs.io/user', (req, res, ctx) => { - return res(ctx.json({ firstName: 'John' })) + rest.get('https://test.mswjs.io/user', () => { + return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/msw-api/setup-server/scenarios/on-unhandled-request/default.test.ts b/test/msw-api/setup-server/scenarios/on-unhandled-request/default.test.ts index 1e7103e74..51457e104 100644 --- a/test/msw-api/setup-server/scenarios/on-unhandled-request/default.test.ts +++ b/test/msw-api/setup-server/scenarios/on-unhandled-request/default.test.ts @@ -3,11 +3,11 @@ */ import fetch from 'node-fetch' import { setupServer } from 'msw/node' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' const server = setupServer( - rest.get('https://test.mswjs.io/user', (req, res, ctx) => { - return res(ctx.json({ firstName: 'John' })) + rest.get('https://test.mswjs.io/user', () => { + return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/msw-api/setup-server/scenarios/on-unhandled-request/error.test.ts b/test/msw-api/setup-server/scenarios/on-unhandled-request/error.test.ts index dc3e7113c..1b2ee3cca 100644 --- a/test/msw-api/setup-server/scenarios/on-unhandled-request/error.test.ts +++ b/test/msw-api/setup-server/scenarios/on-unhandled-request/error.test.ts @@ -3,7 +3,7 @@ */ import fetch from 'node-fetch' import { createServer, ServerApi } from '@open-draft/test-server' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' let httpServer: ServerApi @@ -23,8 +23,8 @@ beforeAll(async () => { }) server.use( - rest.get(httpServer.http.makeUrl('/user'), (req, res, ctx) => { - return res(ctx.json({ mocked: true })) + rest.get(httpServer.http.makeUrl('/user'), () => { + return HttpResponse.json({ mocked: true }) }), rest.post(httpServer.http.makeUrl('/explicit-return'), () => { // Short-circuiting in a handler makes it perform the request as-is, diff --git a/test/msw-api/setup-server/scenarios/on-unhandled-request/warn.test.ts b/test/msw-api/setup-server/scenarios/on-unhandled-request/warn.test.ts index f88f1472a..f92d8ba94 100644 --- a/test/msw-api/setup-server/scenarios/on-unhandled-request/warn.test.ts +++ b/test/msw-api/setup-server/scenarios/on-unhandled-request/warn.test.ts @@ -3,11 +3,11 @@ */ import fetch from 'node-fetch' import { setupServer } from 'msw/node' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' const server = setupServer( - rest.get('https://test.mswjs.io/user', (req, res, ctx) => { - return res(ctx.json({ firstName: 'John' })) + rest.get('https://test.mswjs.io/user', () => { + return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/msw-api/setup-server/scenarios/relative-url.test.ts b/test/msw-api/setup-server/scenarios/relative-url.test.ts index 042232a53..af646e855 100644 --- a/test/msw-api/setup-server/scenarios/relative-url.test.ts +++ b/test/msw-api/setup-server/scenarios/relative-url.test.ts @@ -2,15 +2,15 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' const server = setupServer( - rest.get('/books', (req, res, ctx) => { - return res(ctx.json([1, 2, 3])) + rest.get('/books', () => { + return HttpResponse.json([1, 2, 3]) }), - rest.get('https://api.backend.com/path', (req, res, ctx) => { - return res(ctx.json({ success: true })) + rest.get('https://api.backend.com/path', () => { + return HttpResponse.json({ success: true }) }), ) diff --git a/test/msw-api/setup-server/scenarios/response-patching.test.ts b/test/msw-api/setup-server/scenarios/response-patching.test.ts index be13c8196..58c0163df 100644 --- a/test/msw-api/setup-server/scenarios/response-patching.test.ts +++ b/test/msw-api/setup-server/scenarios/response-patching.test.ts @@ -3,7 +3,7 @@ */ import fetch from 'node-fetch' import { createServer, ServerApi } from '@open-draft/test-server' -import { rest } from 'msw' +import { HttpResponse, rest, bypass } from 'msw' import { setupServer } from 'msw/node' let httpServer: ServerApi @@ -16,22 +16,24 @@ interface ResponseBody { const server = setupServer( rest.get( 'https://test.mswjs.io/user', - async (req, res, ctx) => { - const originalResponse = await ctx.fetch(httpServer.http.makeUrl('/user')) + async () => { + const originalResponse = await fetch( + bypass(httpServer.http.makeUrl('/user')), + ) const body = await originalResponse.json() - return res( - ctx.json({ - id: body.id, - mocked: true, - }), - ) + return HttpResponse.json({ + id: body.id, + mocked: true, + }) }, ), rest.get( 'https://test.mswjs.io/complex-request', - async (req, res, ctx) => { - const shouldBypass = req.url.searchParams.get('bypass') === 'true' + async ({ request }) => { + const url = new URL(request.url) + + const shouldBypass = url.searchParams.get('bypass') === 'true' const performRequest = shouldBypass ? () => ctx @@ -41,18 +43,17 @@ const server = setupServer( fetch('https://httpbin.org/post', { method: 'POST' }).then((res) => res.json(), ) + const originalResponse = await performRequest() - return res( - ctx.json({ - id: originalResponse.id, - mocked: true, - }), - ) + return HttpResponse.json({ + id: originalResponse.id, + mocked: true, + }) }, ), - rest.post('https://httpbin.org/post', (req, res, ctx) => { - return res(ctx.json({ id: 303 })) + rest.post('https://httpbin.org/post', () => { + return HttpResponse.json({ id: 303 }) }), ) diff --git a/test/msw-api/setup-server/scenarios/xhr.test.ts b/test/msw-api/setup-server/scenarios/xhr.test.ts index ab1a1b2cb..41667aa68 100644 --- a/test/msw-api/setup-server/scenarios/xhr.test.ts +++ b/test/msw-api/setup-server/scenarios/xhr.test.ts @@ -1,17 +1,21 @@ -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' import { stringToHeaders } from 'headers-polyfill' describe('setupServer / XHR', () => { const server = setupServer( - rest.get('http://test.mswjs.io', (req, res, ctx) => { - return res( - ctx.status(401), - ctx.set('x-header', 'yes'), - ctx.json({ + rest.get('http://test.mswjs.io', () => { + return HttpResponse.json( + { firstName: 'John', age: 32, - }), + }, + { + status: 401, + headers: { + 'X-Header': 'yes', + }, + }, ) }), ) diff --git a/test/msw-api/setup-server/use.test.ts b/test/msw-api/setup-server/use.test.ts index 17c7ffd2a..153c92ab9 100644 --- a/test/msw-api/setup-server/use.test.ts +++ b/test/msw-api/setup-server/use.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { rest } from 'msw' +import { HttpResponse, rest } from 'msw' import { setupServer, SetupServerApi } from 'msw/node' import { RequestHandler as ExpressRequestHandler } from 'express' import { createServer, ServerApi } from '@open-draft/test-server' @@ -12,7 +12,7 @@ let server: SetupServerApi beforeAll(async () => { httpServer = await createServer((app) => { - const handler: ExpressRequestHandler = (req, res) => { + const handler: ExpressRequestHandler = (_, res) => { res.status(500).send('') } app.get('/book/:bookId', handler) @@ -20,8 +20,8 @@ beforeAll(async () => { }) server = setupServer( - rest.get(httpServer.http.makeUrl('/book/:bookId'), (req, res, ctx) => { - return res(ctx.json({ title: 'Original title' })) + rest.get(httpServer.http.makeUrl('/book/:bookId'), () => { + return HttpResponse.json({ title: 'Original title' }) }), ) server.listen() @@ -38,8 +38,8 @@ afterAll(async () => { test('returns a mocked response from a runtime request handler upon match', async () => { server.use( - rest.post(httpServer.http.makeUrl('/login'), (req, res, ctx) => { - return res(ctx.json({ accepted: true })) + rest.post(httpServer.http.makeUrl('/login'), () => { + return HttpResponse.json({ accepted: true }) }), ) @@ -60,8 +60,8 @@ test('returns a mocked response from a runtime request handler upon match', asyn test('returns a mocked response from a persistent request handler override', async () => { server.use( - rest.get(httpServer.http.makeUrl('/book/:bookId'), (req, res, ctx) => { - return res(ctx.json({ title: 'Permanent override' })) + rest.get(httpServer.http.makeUrl('/book/:bookId'), () => { + return HttpResponse.json({ title: 'Permanent override' }) }), ) @@ -78,10 +78,13 @@ test('returns a mocked response from a persistent request handler override', asy expect(anotherBookBody).toEqual({ title: 'Permanent override' }) }) -test('returns a mocked response from a one-time request handler override only upon first request match', async () => { +test.skip('returns a mocked response from a one-time request handler override only upon first request match', async () => { server.use( - rest.get(httpServer.http.makeUrl('/book/:bookId'), (req, res, ctx) => { - return res.once(ctx.json({ title: 'One-time override' })) + rest.get(httpServer.http.makeUrl('/book/:bookId'), () => { + /** + * @todo `res.once()` + */ + return HttpResponse.json({ title: 'One-time override' }) }), ) @@ -98,11 +101,14 @@ test('returns a mocked response from a one-time request handler override only up expect(anotherBookBody).toEqual({ title: 'Original title' }) }) -test('returns a mocked response from a one-time request handler override only upon first request match with parallel requests', async () => { +test.skip('returns a mocked response from a one-time request handler override only upon first request match with parallel requests', async () => { server.use( - rest.get(httpServer.http.makeUrl('/book/:bookId'), (req, res, ctx) => { - const { bookId } = req.params - return res.once(ctx.json({ title: 'One-time override', bookId })) + /** + * @todo `res.once()` + */ + rest.get(httpServer.http.makeUrl('/book/:bookId'), ({ params }) => { + const { bookId } = params + return HttpResponse.json({ title: 'One-time override', bookId }) }), ) diff --git a/test/msw-api/setup-worker/resetHandlers.test.ts b/test/msw-api/setup-worker/resetHandlers.test.ts index efee97782..2e0878926 100644 --- a/test/msw-api/setup-worker/resetHandlers.test.ts +++ b/test/msw-api/setup-worker/resetHandlers.test.ts @@ -1,12 +1,13 @@ import * as path from 'path' import { pageWith } from 'page-with' -import { SetupWorkerApi, rest } from 'msw' +import { SetupWorkerApi, rest, HttpResponse } from 'msw' declare namespace window { // Annotate global references to the worker and rest request handlers. export const msw: { worker: SetupWorkerApi rest: typeof rest + HttpResponse: typeof HttpResponse } } @@ -24,8 +25,8 @@ test('removes all runtime request handlers when resetting without explicit next // Add a request handler on runtime msw.worker.use( - msw.rest.post('/login', (req, res, ctx) => { - return res(ctx.json({ accepted: true })) + msw.rest.post('/login', () => { + return msw.HttpResponse.json({ accepted: true }) }), ) }) @@ -69,8 +70,8 @@ test('replaces all handlers with the explicit next runtime handlers upon reset', const { msw } = window msw.worker.use( - msw.rest.post('/login', (req, res, ctx) => { - return res(ctx.json({ accepted: true })) + msw.rest.post('/login', () => { + return msw.HttpResponse.json({ accepted: true }) }), ) }) @@ -80,8 +81,8 @@ test('replaces all handlers with the explicit next runtime handlers upon reset', const { msw } = window msw.worker.resetHandlers( - msw.rest.get('/products', (req, res, ctx) => { - return res(ctx.json([1, 2, 3])) + msw.rest.get('/products', () => { + return msw.HttpResponse.json([1, 2, 3]) }), ) }) diff --git a/test/msw-api/setup-worker/restoreHandlers.test.ts b/test/msw-api/setup-worker/restoreHandlers.test.ts index d76bea101..bb91dc66d 100644 --- a/test/msw-api/setup-worker/restoreHandlers.test.ts +++ b/test/msw-api/setup-worker/restoreHandlers.test.ts @@ -1,11 +1,12 @@ import * as path from 'path' import { pageWith } from 'page-with' -import { SetupWorkerApi, rest } from 'msw' +import { SetupWorkerApi, rest, HttpResponse } from 'msw' declare namespace window { export const msw: { worker: SetupWorkerApi rest: typeof rest + HttpResponse: typeof HttpResponse } } @@ -22,8 +23,8 @@ test('returns a mocked response from the used one-time request handler when rest const { msw } = window msw.worker.use( - msw.rest.get('/book/:bookId', (req, res, ctx) => { - return res.once(ctx.json({ title: 'One-time override' })) + msw.rest.get('/book/:bookId', () => { + return msw.HttpResponse.json({ title: 'One-time override' }) }), ) }) diff --git a/test/msw-api/setup-worker/use.mocks.ts b/test/msw-api/setup-worker/use.mocks.ts index 1d1eaeb14..e44474732 100644 --- a/test/msw-api/setup-worker/use.mocks.ts +++ b/test/msw-api/setup-worker/use.mocks.ts @@ -16,4 +16,5 @@ worker.start() window.msw = { worker, rest, + HttpResponse, } diff --git a/yarn.lock b/yarn.lock index bcb9cc503..9591b8aec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1806,6 +1806,40 @@ semver "^7.3.7" yargs "^17.4.1" +"@remix-run/web-blob@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@remix-run/web-blob/-/web-blob-3.0.4.tgz#99c67b9d0fb641bd0c07d267fd218ae5aa4ae5ed" + integrity sha512-AfegzZvSSDc+LwnXV+SwROTrDtoLiPxeFW+jxgvtDAnkuCX1rrzmVJ6CzqZ1Ai0bVfmJadkG5GxtAfYclpPmgw== + dependencies: + "@remix-run/web-stream" "^1.0.0" + web-encoding "1.1.5" + +"@remix-run/web-fetch@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@remix-run/web-fetch/-/web-fetch-4.3.0.tgz#8990c58352ecefed2ea32e13a924c4cc0d7d7328" + integrity sha512-//VynoWVu/hocB0TWfoUZdg6Yy/320cO4r0dN/eZUSM5/rLUGEy+NqAykyY8GKHjYYZimw96kRMFa3aQbwmp8g== + dependencies: + "@remix-run/web-blob" "^3.0.4" + "@remix-run/web-form-data" "^3.0.3" + "@remix-run/web-stream" "^1.0.3" + "@web3-storage/multipart-parser" "^1.0.0" + data-uri-to-buffer "^3.0.1" + mrmime "^1.0.0" + +"@remix-run/web-form-data@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@remix-run/web-form-data/-/web-form-data-3.0.3.tgz#f89a7f971aaf1084d2da87affbb7f4e01c32b8ce" + integrity sha512-wL4veBtVPazSpXfPMzrbmeV3IxuxCfcQYPerQ8BXRO5ahAEVw23tv7xS+yoX0XDO5j+vpRaSbhHJK1H5gF7eYQ== + dependencies: + web-encoding "1.1.5" + +"@remix-run/web-stream@^1.0.0", "@remix-run/web-stream@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@remix-run/web-stream/-/web-stream-1.0.3.tgz#3284a6a45675d1455c4d9c8f31b89225c9006438" + integrity sha512-wlezlJaA5NF6SsNMiwQnnAW6tnPzQ5I8qk0Y0pSohm0eHKa2FQ1QhEKLVVcDDu02TmkfHgnux0igNfeYhDOXiA== + dependencies: + web-streams-polyfill "^3.1.1" + "@sinonjs/commons@^1.7.0": version "1.8.2" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.2.tgz#858f5c4b48d80778fde4b9d541f27edc0d56488b" @@ -2298,6 +2332,11 @@ "@typescript-eslint/types" "5.11.0" eslint-visitor-keys "^3.0.0" +"@web3-storage/multipart-parser@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@web3-storage/multipart-parser/-/multipart-parser-1.0.0.tgz#6b69dc2a32a5b207ba43e556c25cc136a56659c4" + integrity sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw== + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" @@ -3925,6 +3964,11 @@ dargs@^7.0.0: resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== +data-uri-to-buffer@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" + integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== + data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -7273,6 +7317,11 @@ mri@1.1.4: resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== +mrmime@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" + integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -10046,7 +10095,7 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" -web-encoding@^1.1.5: +web-encoding@1.1.5, web-encoding@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/web-encoding/-/web-encoding-1.1.5.tgz#fc810cf7667364a6335c939913f5051d3e0c4864" integrity sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA== @@ -10055,6 +10104,11 @@ web-encoding@^1.1.5: optionalDependencies: "@zxing/text-encoding" "0.9.0" +web-streams-polyfill@^3.1.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" + integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" From 7fcadf2a844064fc30dc6f6574c38ac98927270a Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 14 Oct 2022 18:54:47 +0200 Subject: [PATCH 015/210] fix(RequestHandler): clone response in generator --- src/handlers/RequestHandler.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/handlers/RequestHandler.ts b/src/handlers/RequestHandler.ts index b8388fa3f..8817b0a15 100644 --- a/src/handlers/RequestHandler.ts +++ b/src/handlers/RequestHandler.ts @@ -1,3 +1,4 @@ +import { invariant } from 'outvariant' import { MaybePromise } from '../response' import { getCallFrame } from '../utils/internal/getCallFrame' import { isIterable } from '../utils/internal/isIterable' @@ -98,7 +99,7 @@ export abstract class RequestHandler< MaybeAsyncResponseResolverReturnType, MaybeAsyncResponseResolverReturnType > - private resolverGeneratorResult?: MaybeAsyncResponseResolverReturnType + private resolverGeneratorResult?: ResponseResolverReturnType protected resolver: ResponseResolver @@ -226,14 +227,19 @@ export abstract class RequestHandler< // If the generator is done and there is no next value, // return the previous generator's value. if (!nextResponse && done) { - return this.resolverGeneratorResult + invariant( + this.resolverGeneratorResult, + 'Failed to returned a previously stored generator response: the value is not a valid Response.', + ) + + return this.resolverGeneratorResult.clone() } if (!this.resolverGenerator) { this.resolverGenerator = result } - this.resolverGeneratorResult = nextResponse + this.resolverGeneratorResult = nextResponse?.clone() return nextResponse } From d64713a8c09a3174af9f27d3bb0d30cea0149fa5 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 14 Oct 2022 18:57:14 +0200 Subject: [PATCH 016/210] chore: migrate to fetch api in node --- src/index.ts | 8 ++ src/node/createSetupServer.ts | 11 +- src/utils/request/getPublicUrlFromRequest.ts | 8 +- .../setup-server/life-cycle-events/on.test.ts | 10 +- .../setup-server/restoreHandlers.test.ts | 3 + .../scenarios/custom-transformers.test.ts | 17 ++- .../setup-server/scenarios/fetch.test.ts | 132 +++++++----------- .../scenarios/generator.node.test.ts | 10 +- .../setup-server/scenarios/http.test.ts | 114 +++++++-------- .../setup-server/scenarios/https.test.ts | 113 +++++++-------- .../callback-throws.test.ts | 14 +- .../scenarios/relative-url.test.ts | 1 + .../scenarios/response-patching.test.ts | 41 +++--- .../setup-server/scenarios/xhr.test.ts | 96 ++++++------- 14 files changed, 269 insertions(+), 309 deletions(-) diff --git a/src/index.ts b/src/index.ts index 91a6fb87d..a93ca8292 100644 --- a/src/index.ts +++ b/src/index.ts @@ -64,3 +64,11 @@ export * from './utils/HttpResponse' export * from './delay' export { bypass } from './utils/bypass' export { NetworkError } from './NetworkError' + +export { + Request, + Response, + ReadableStream, + Blob, + FormData, +} from '@remix-run/web-fetch' diff --git a/src/node/createSetupServer.ts b/src/node/createSetupServer.ts index f6cb45691..968b09e74 100644 --- a/src/node/createSetupServer.ts +++ b/src/node/createSetupServer.ts @@ -61,6 +61,9 @@ export function createSetupServer( const interceptor = new BatchInterceptor({ name: 'setup-server', + /** + * @todo Needs a symbol. Really? A type issue? + */ interceptors: interceptors.map((Interceptor) => new Interceptor()), }) @@ -78,16 +81,14 @@ export function createSetupServer( if (response) { request.respondWith(response) } - - return }, ) - interceptor.on('response', (response, _, requestId) => { + interceptor.on('response', (response, request, requestId) => { if (response.headers.get('x-powered-by') === 'msw') { - emitter.emit('response:mocked', response, requestId) + emitter.emit('response:mocked', response, request, requestId) } else { - emitter.emit('response:bypass', response, requestId) + emitter.emit('response:bypass', response, request, requestId) } }) diff --git a/src/utils/request/getPublicUrlFromRequest.ts b/src/utils/request/getPublicUrlFromRequest.ts index 12c233412..8c0f05b43 100644 --- a/src/utils/request/getPublicUrlFromRequest.ts +++ b/src/utils/request/getPublicUrlFromRequest.ts @@ -5,7 +5,9 @@ export function getPublicUrlFromRequest(request: Request): string { const url = new URL(request.url) - return url.origin === origin - ? url.pathname - : new URL(url.pathname, `${url.protocol}//${url.host}`).href + if (typeof origin === 'undefined') { + return url.href + } + + return url.origin === origin ? url.pathname : url.href } diff --git a/test/msw-api/setup-server/life-cycle-events/on.test.ts b/test/msw-api/setup-server/life-cycle-events/on.test.ts index 6fbeb98f5..31d255cc0 100644 --- a/test/msw-api/setup-server/life-cycle-events/on.test.ts +++ b/test/msw-api/setup-server/life-cycle-events/on.test.ts @@ -59,11 +59,11 @@ beforeAll(async () => { listener(`[request:end] ${request.method} ${request.url} ${requestId}`) }) - server.events.on('response:mocked', async (response, requestId) => { + server.events.on('response:mocked', async (response, _, requestId) => { listener(`[response:mocked] ${await response.text()} ${requestId}`) }) - server.events.on('response:bypass', async (response, requestId) => { + server.events.on('response:bypass', async (response, _, requestId) => { listener(`[response:bypass] ${await response.text()} ${requestId}`) }) @@ -93,6 +93,12 @@ test('emits events for a handler request and mocked response', async () => { await fetch(url) const requestId = getRequestId(listener) + await waitFor(() => { + expect(listener).toHaveBeenCalledWith( + expect.stringContaining('[response:mocked]'), + ) + }) + expect(listener).toHaveBeenNthCalledWith( 1, `[request:start] GET ${url} ${requestId}`, diff --git a/test/msw-api/setup-server/restoreHandlers.test.ts b/test/msw-api/setup-server/restoreHandlers.test.ts index 8ea136e13..c95688ecb 100644 --- a/test/msw-api/setup-server/restoreHandlers.test.ts +++ b/test/msw-api/setup-server/restoreHandlers.test.ts @@ -17,6 +17,9 @@ afterAll(() => server.close()) test('returns a mocked response from the used one-time request handler when restored', async () => { server.use( rest.get('https://test.mswjs.io/book/:bookId', () => { + /** + * @todo @fixme This needs to use one-time response. + */ return HttpResponse.json({ title: 'Overridden title' }) }), ) diff --git a/test/msw-api/setup-server/scenarios/custom-transformers.test.ts b/test/msw-api/setup-server/scenarios/custom-transformers.test.ts index 9d9a7f0e0..4e8b79bae 100644 --- a/test/msw-api/setup-server/scenarios/custom-transformers.test.ts +++ b/test/msw-api/setup-server/scenarios/custom-transformers.test.ts @@ -5,14 +5,17 @@ import { setupServer } from 'msw/node' const server = setupServer( rest.get('http://test.mswjs.io/me', () => { - /** - * @todo Shouldn't "HttpResponse.json()" support strings? - */ - return HttpResponse.plain(JSONbig.stringify(BigInt(1597928668063727616)), { - headers: { - 'Content-Tpye': 'application/json', + return HttpResponse.plain( + JSONbig.stringify({ + username: 'john.maverick', + balance: BigInt(1597928668063727616), + }), + { + headers: { + 'Content-Tpye': 'application/json', + }, }, - }) + ) }), ) diff --git a/test/msw-api/setup-server/scenarios/fetch.test.ts b/test/msw-api/setup-server/scenarios/fetch.test.ts index 798e5a774..b0c2a1cc8 100644 --- a/test/msw-api/setup-server/scenarios/fetch.test.ts +++ b/test/msw-api/setup-server/scenarios/fetch.test.ts @@ -1,96 +1,68 @@ -import fetch, { Response } from 'node-fetch' +import fetch from 'node-fetch' import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' -describe('setupServer / fetch', () => { - const server = setupServer( - rest.get('http://test.mswjs.io', () => { - return HttpResponse.json( - { - firstName: 'John', - age: 32, - }, - { - status: 401, - headers: { - 'X-Header': 'yes', - }, - }, - ) - }), - rest.post('https://test.mswjs.io', async ({ request }) => { - return HttpResponse.json(await request.json(), { - status: 403, +const server = setupServer( + rest.get('http://test.mswjs.io', () => { + return HttpResponse.json( + { + firstName: 'John', + age: 32, + }, + { + status: 401, headers: { 'X-Header': 'yes', }, - }) - }), - ) - - beforeAll(() => { - server.listen() - }) - - afterAll(() => { - server.close() - }) - - describe('given I perform a GET request using fetch', () => { - let res: Response - - beforeAll(async () => { - res = await fetch('http://test.mswjs.io') - }) - - test('should return mocked status code', async () => { - expect(res.status).toEqual(401) - }) - - test('should return mocked headers', () => { - expect(res.headers.get('content-type')).toEqual('application/json') - expect(res.headers.get('x-header')).toEqual('yes') + }, + ) + }), + rest.post('https://test.mswjs.io', async ({ request }) => { + return HttpResponse.json(await request.json(), { + status: 403, + headers: { + 'X-Header': 'yes', + }, }) + }), +) - test('should return mocked body', async () => { - const body = await res.json() +beforeAll(() => { + server.listen() +}) - expect(body).toEqual({ - firstName: 'John', - age: 32, - }) - }) - }) +afterAll(() => { + server.close() +}) - describe('given I perform a POST request using fetch', () => { - let res: Response +it('returns a mocked response to a GET request using fetch', async () => { + const res = await fetch('http://test.mswjs.io') - beforeAll(async () => { - res = await fetch('https://test.mswjs.io', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - payload: 'info', - }), - }) - }) + expect(res.status).toEqual(401) + expect(res.headers.get('content-type')).toEqual('application/json') + expect(res.headers.get('x-header')).toEqual('yes') - test('should return mocked status code', () => { - expect(res.status).toEqual(403) - }) + expect(await res.json()).toEqual({ + firstName: 'John', + age: 32, + }) +}) - test('should return mocked headers', () => { - expect(res.headers.get('content-type')).toEqual('application/json') - expect(res.headers.get('x-header')).toEqual('yes') - }) +it('returns a mocked response to a POST request using fetch', async () => { + const res = await fetch('https://test.mswjs.io', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + payload: 'info', + }), + }) - test('should return mocked and parsed JSON body', async () => { - const body = await res.json() - expect(body).toEqual({ - payload: 'info', - }) - }) + expect(res.status).toEqual(403) + expect(res.headers.get('content-type')).toEqual('application/json') + expect(res.headers.get('x-header')).toEqual('yes') + expect(await res.json()).toEqual({ + payload: 'info', }) }) diff --git a/test/msw-api/setup-server/scenarios/generator.node.test.ts b/test/msw-api/setup-server/scenarios/generator.node.test.ts index e6c95928f..fb151df25 100644 --- a/test/msw-api/setup-server/scenarios/generator.node.test.ts +++ b/test/msw-api/setup-server/scenarios/generator.node.test.ts @@ -62,10 +62,10 @@ test('supports generator as the response resolver', async () => { const assertRequest = async (expectedBody: ExpectedResponseBody) => { const res = await fetch('http://localhost/polling/3') - const body = await res.json() + expect(res.status).toBe(200) - expect(res.headers.get('x-powered-by')).toEqual('msw') - expect(body).toEqual(expectedBody) + expect(res.headers.get('x-powered-by')).toBe('msw') + expect(await res.json()).toEqual(expectedBody) } await assertRequest({ status: 'pending', count: 1 }) @@ -79,7 +79,7 @@ test('supports generator as the response resolver', async () => { await assertRequest({ status: 'complete', count: 3 }) }) -test('supports one-time handlers with the generator as the response resolver', async () => { +test.skip('supports one-time handlers with the generator as the response resolver', async () => { type ExpectedResponseBody = | { status: 'pending' | 'complete' @@ -91,7 +91,7 @@ test('supports one-time handlers with the generator as the response resolver', a const res = await fetch('http://localhost/polling/once/3') const body = await res.json() expect(res.status).toBe(200) - expect(res.headers.get('x-powered-by')).toEqual('msw') + expect(res.headers.get('x-powered-by')).toBe('msw') expect(body).toEqual(expectedBody) } diff --git a/test/msw-api/setup-server/scenarios/http.test.ts b/test/msw-api/setup-server/scenarios/http.test.ts index 2c85124b6..a58c74965 100644 --- a/test/msw-api/setup-server/scenarios/http.test.ts +++ b/test/msw-api/setup-server/scenarios/http.test.ts @@ -5,84 +5,66 @@ import * as http from 'http' import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' -describe('setupServer / http', () => { - const server = setupServer( - rest.get('http://test.mswjs.io', () => { - return HttpResponse.json( - { - firstName: 'John', +const server = setupServer( + rest.get('http://test.mswjs.io', () => { + return HttpResponse.json( + { + firstName: 'John', + }, + { + status: 401, + headers: { + 'X-Header': 'yes', }, - { - status: 401, - headers: { - 'X-Header': 'yes', - }, - }, - ) - }), - ) - - beforeAll(() => { - server.listen() - }) + }, + ) + }), +) - afterAll(() => { - server.close() - }) - - describe('given I perform a request using http.get', () => { - let res: http.IncomingMessage - let resBody = '' - - beforeAll((done) => { - http.get('http://test.mswjs.io', (message) => { - res = message - res.setEncoding('utf8') - res.on('data', (chunk) => (resBody += chunk)) - res.on('end', done) - }) - }) +beforeAll(() => { + server.listen() +}) - test('should return mocked status code', () => { - expect(res.statusCode).toEqual(401) - }) +afterAll(() => { + server.close() +}) - test('should return mocked headers', () => { - expect(res.headers).toHaveProperty('content-type', 'application/json') - expect(res.headers).toHaveProperty('x-header', 'yes') - }) +it('returns a mocked response to a http.get request', async () => { + let res: http.IncomingMessage + let resBody = '' - test('should return mocked body', () => { - expect(resBody).toEqual('{"firstName":"John"}') + await new Promise((resolve) => { + http.get('http://test.mswjs.io', (message) => { + res = message + res.setEncoding('utf8') + res.on('data', (chunk) => (resBody += chunk)) + res.on('end', () => resolve()) }) }) - describe('given I perform a request using http.request', () => { - let res: http.IncomingMessage - let resBody = '' + expect(res.statusCode).toEqual(401) + expect(res.headers).toHaveProperty('content-type', 'application/json') + expect(res.headers).toHaveProperty('x-header', 'yes') + expect(resBody).toEqual('{"firstName":"John"}') +}) + +it('returns a mocked response to a http.request request', async () => { + let res: http.IncomingMessage + let resBody = '' - beforeAll((done) => { - const req = http.request('http://test.mswjs.io', (message) => { + await new Promise((resolve) => { + http + .request('http://test.mswjs.io', (message) => { res = message res.setEncoding('utf8') res.on('data', (chunk) => (resBody += chunk)) - res.on('end', done) + res.on('end', () => resolve()) }) - - req.end() - }) - - test('should return mocked status code', () => { - expect(res.statusCode).toEqual(401) - }) - - test('should return mocked headers', () => { - expect(res.headers).toHaveProperty('content-type', 'application/json') - expect(res.headers).toHaveProperty('x-header', 'yes') - }) - - test('should return mocked body', () => { - expect(resBody).toEqual('{"firstName":"John"}') - }) + .end() }) + + expect(res.statusCode).toEqual(401) + expect(res.headers).toHaveProperty('content-type', 'application/json') + expect(res.headers).toHaveProperty('x-header', 'yes') + expect(resBody).toEqual('{"firstName":"John"}') }) diff --git a/test/msw-api/setup-server/scenarios/https.test.ts b/test/msw-api/setup-server/scenarios/https.test.ts index e8f5a49d1..6f2806331 100644 --- a/test/msw-api/setup-server/scenarios/https.test.ts +++ b/test/msw-api/setup-server/scenarios/https.test.ts @@ -6,84 +6,67 @@ import { IncomingMessage } from 'http' import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' -describe('setupServer / https', () => { - const server = setupServer( - rest.get('https://test.mswjs.io', () => { - return HttpResponse.json( - { - firstName: 'John', +const server = setupServer( + rest.get('https://test.mswjs.io', () => { + return HttpResponse.json( + { + firstName: 'John', + }, + { + status: 401, + headers: { + 'X-Header': 'yes', }, - { - status: 401, - headers: { - 'X-Header': 'yes', - }, - }, - ) - }), - ) + }, + ) + }), +) - beforeAll(() => { - server.listen() - }) +beforeAll(() => { + server.listen() +}) - afterAll(() => { - server.close() - }) +afterAll(() => { + server.close() +}) - describe('given I perform a request using https.get', () => { - let res: IncomingMessage - let resBody = '' +it('returns a mocked response to a https.get request', async () => { + let res: IncomingMessage + let resBody = '' - beforeAll((done) => { - https.get('https://test.mswjs.io', (message) => { - res = message - res.setEncoding('utf8') - res.on('data', (chunk) => (resBody += chunk)) - res.on('end', done) - }) - }) - - test('should return mocked status code', () => { - expect(res.statusCode).toEqual(401) + await new Promise((resolve) => { + https.get('https://test.mswjs.io', (message) => { + res = message + res.setEncoding('utf8') + res.on('data', (chunk) => (resBody += chunk)) + res.on('end', () => resolve()) }) + }) - test('should return mocked headers', () => { - expect(res.headers).toHaveProperty('content-type', 'application/json') - expect(res.headers).toHaveProperty('x-header', 'yes') - }) + expect(res.statusCode).toEqual(401) - test('should return mocked body', () => { - expect(resBody).toEqual('{"firstName":"John"}') - }) - }) + expect(res.headers).toHaveProperty('content-type', 'application/json') + expect(res.headers).toHaveProperty('x-header', 'yes') + expect(resBody).toEqual('{"firstName":"John"}') +}) - describe('given I perform a request using https.request', () => { - let res: IncomingMessage - let resBody = '' +it('returns a mocked response to a https.request request', async () => { + let res: IncomingMessage + let resBody = '' - beforeAll((done) => { - const req = https.request('https://test.mswjs.io', (message) => { + await new Promise((resolve) => { + https + .request('https://test.mswjs.io', (message) => { res = message res.setEncoding('utf8') res.on('data', (chunk) => (resBody += chunk)) - res.on('end', done) + res.on('end', () => resolve()) }) - - req.end() - }) - - test('should return mocked status code', () => { - expect(res.statusCode).toEqual(401) - }) - - test('should return mocked headers', () => { - expect(res.headers).toHaveProperty('content-type', 'application/json') - expect(res.headers).toHaveProperty('x-header', 'yes') - }) - - test('should return mocked body', () => { - expect(resBody).toEqual('{"firstName":"John"}') - }) + .end() }) + + expect(res.statusCode).toEqual(401) + expect(res.headers).toHaveProperty('content-type', 'application/json') + expect(res.headers).toHaveProperty('x-header', 'yes') + expect(resBody).toEqual('{"firstName":"John"}') }) diff --git a/test/msw-api/setup-server/scenarios/on-unhandled-request/callback-throws.test.ts b/test/msw-api/setup-server/scenarios/on-unhandled-request/callback-throws.test.ts index f702af082..5189aed59 100644 --- a/test/msw-api/setup-server/scenarios/on-unhandled-request/callback-throws.test.ts +++ b/test/msw-api/setup-server/scenarios/on-unhandled-request/callback-throws.test.ts @@ -14,17 +14,25 @@ const server = setupServer( beforeAll(() => server.listen({ onUnhandledRequest(request) { + /** + * @fixme @todo For some reason, the exception from the "onUnhandledRequest" + * callback doesn't propagate to the captured request but instead is thrown + * in this test's context. + */ throw new Error(`Custom error for ${request.method} ${request.url}`) }, }), ) -afterAll(() => server.close()) + +afterAll(() => { + server.close() +}) test('prevents a request when a custom callback throws an exception', async () => { - const getResponse = () => fetch('https://test.mswjs.io') + const getResponse = () => fetch('https://example.com') // Request should be cancelled with a fetch error, since the callback threw. await expect(getResponse()).rejects.toThrow( - 'request to https://test.mswjs.io/ failed, reason: Custom error for GET https://test.mswjs.io/', + 'request to https://example.com/ failed, reason: Custom error for GET https://example.com/', ) }) diff --git a/test/msw-api/setup-server/scenarios/relative-url.test.ts b/test/msw-api/setup-server/scenarios/relative-url.test.ts index af646e855..edeaa1a60 100644 --- a/test/msw-api/setup-server/scenarios/relative-url.test.ts +++ b/test/msw-api/setup-server/scenarios/relative-url.test.ts @@ -15,6 +15,7 @@ const server = setupServer( ) beforeAll(() => server.listen()) + afterAll(() => server.close()) test('tolerates relative request handlers on the server', async () => { diff --git a/test/msw-api/setup-server/scenarios/response-patching.test.ts b/test/msw-api/setup-server/scenarios/response-patching.test.ts index 58c0163df..3d1ba8cf0 100644 --- a/test/msw-api/setup-server/scenarios/response-patching.test.ts +++ b/test/msw-api/setup-server/scenarios/response-patching.test.ts @@ -1,9 +1,9 @@ /** * @jest-environment node */ -import fetch from 'node-fetch' +import fetch from '@remix-run/web-fetch' import { createServer, ServerApi } from '@open-draft/test-server' -import { HttpResponse, rest, bypass } from 'msw' +import { HttpResponse, Request, rest, bypass } from 'msw' import { setupServer } from 'msw/node' let httpServer: ServerApi @@ -14,21 +14,18 @@ interface ResponseBody { } const server = setupServer( - rest.get( - 'https://test.mswjs.io/user', - async () => { - const originalResponse = await fetch( - bypass(httpServer.http.makeUrl('/user')), - ) - const body = await originalResponse.json() - - return HttpResponse.json({ - id: body.id, - mocked: true, - }) - }, - ), - rest.get( + rest.get('https://test.mswjs.io/user', async () => { + const originalResponse = await fetch( + bypass(httpServer.http.makeUrl('/user')), + ) + const body = await originalResponse.json() + + return HttpResponse.json({ + id: body.id, + mocked: true, + }) + }), + rest.get( 'https://test.mswjs.io/complex-request', async ({ request }) => { const url = new URL(request.url) @@ -36,9 +33,13 @@ const server = setupServer( const shouldBypass = url.searchParams.get('bypass') === 'true' const performRequest = shouldBypass ? () => - ctx - .fetch(httpServer.http.makeUrl('/user'), { method: 'POST' }) - .then((res) => res.json()) + fetch( + bypass( + new Request(httpServer.http.makeUrl('/user'), { + method: 'POST', + }), + ), + ).then((res) => res.json()) : () => fetch('https://httpbin.org/post', { method: 'POST' }).then((res) => res.json(), diff --git a/test/msw-api/setup-server/scenarios/xhr.test.ts b/test/msw-api/setup-server/scenarios/xhr.test.ts index 41667aa68..cf9def716 100644 --- a/test/msw-api/setup-server/scenarios/xhr.test.ts +++ b/test/msw-api/setup-server/scenarios/xhr.test.ts @@ -2,63 +2,53 @@ import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' import { stringToHeaders } from 'headers-polyfill' -describe('setupServer / XHR', () => { - const server = setupServer( - rest.get('http://test.mswjs.io', () => { - return HttpResponse.json( - { - firstName: 'John', - age: 32, - }, - { - status: 401, - headers: { - 'X-Header': 'yes', - }, +const server = setupServer( + rest.get('http://test.mswjs.io', () => { + return HttpResponse.json( + { + firstName: 'John', + age: 32, + }, + { + status: 401, + headers: { + 'X-Header': 'yes', }, - ) - }), - ) - - beforeAll(() => { - server.listen() - }) - - afterAll(() => { - server.close() - }) + }, + ) + }), +) - describe('given I perform an XMLHttpRequest', () => { - let statusCode: number - let headers: Headers - let body: string - - beforeAll((done) => { - const req = new XMLHttpRequest() - req.open('GET', 'http://test.mswjs.io') - req.onload = function () { - statusCode = this.status - body = JSON.parse(this.response) - headers = stringToHeaders(this.getAllResponseHeaders()) - done() - } - req.send() - }) +beforeAll(() => { + server.listen() +}) - test('returns mocked status code', () => { - expect(statusCode).toEqual(401) - }) +afterAll(() => { + server.close() +}) - test('returns mocked headers', () => { - expect(headers.get('content-type')).toEqual('application/json') - expect(headers.get('x-header')).toEqual('yes') - }) +it('returns a mocked response to an XMLHttpRequest', async () => { + let statusCode: number + let headers: Headers + let body: string + + await new Promise((resolve) => { + const req = new XMLHttpRequest() + req.open('GET', 'http://test.mswjs.io') + req.onload = function () { + statusCode = this.status + body = JSON.parse(this.response) + headers = stringToHeaders(this.getAllResponseHeaders()) + resolve() + } + req.send() + }) - test('returns mocked body', () => { - expect(body).toEqual({ - firstName: 'John', - age: 32, - }) - }) + expect(statusCode).toBe(401) + expect(headers.get('content-type')).toBe('application/json') + expect(headers.get('x-header')).toBe('yes') + expect(body).toEqual({ + firstName: 'John', + age: 32, }) }) From fd89534a24f2f4147aa4cf979326a3d8e7f8e4af Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 14 Oct 2022 22:09:27 +0200 Subject: [PATCH 017/210] feat: export universal fetch classes --- jest.setup.js | 2 -- src/{utils => }/bypass.test.ts | 0 src/{utils => }/bypass.ts | 4 +++- src/fetch.ts | 20 ++++++++++++++++++++ src/handlers/RequestHandler.ts | 4 ++++ src/index.ts | 10 ++-------- src/utils/HttpResponse.ts | 4 +--- 7 files changed, 30 insertions(+), 14 deletions(-) rename src/{utils => }/bypass.test.ts (100%) rename src/{utils => }/bypass.ts (90%) create mode 100644 src/fetch.ts diff --git a/jest.setup.js b/jest.setup.js index 11e2b5108..50eb416a3 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -1,8 +1,6 @@ const fetch = require('node-fetch') if (typeof window !== 'undefined') { - globalThis.Request = fetch.Request - // Provide "Headers" to be accessible in test cases // since they are not, by default. Object.defineProperty(window, 'Headers', { diff --git a/src/utils/bypass.test.ts b/src/bypass.test.ts similarity index 100% rename from src/utils/bypass.test.ts rename to src/bypass.test.ts diff --git a/src/utils/bypass.ts b/src/bypass.ts similarity index 90% rename from src/utils/bypass.ts rename to src/bypass.ts index c39d3961d..dfa3e464e 100644 --- a/src/utils/bypass.ts +++ b/src/bypass.ts @@ -1,3 +1,5 @@ +import { Request } from './fetch' + /** * Creates a "Request" instance that, when fetched, will * ignore any otherwise matching request handlers and will @@ -24,5 +26,5 @@ function toRequest(input: string | URL | Request): Request { return input.clone() } - return new Request(input) + return new Request(input.toString()) } diff --git a/src/fetch.ts b/src/fetch.ts new file mode 100644 index 000000000..22ee26380 --- /dev/null +++ b/src/fetch.ts @@ -0,0 +1,20 @@ +export const Request: typeof globalThis.Request = globalThis.Request + ? globalThis.Request + : require('@remix-run/web-fetch').Request + +export const Response: typeof globalThis.Response = globalThis.Response + ? globalThis.Response + : require('@remix-run/web-fetch').Response + +export const ReadableStream: typeof globalThis.ReadableStream = + globalThis.ReadableStream + ? globalThis.ReadableStream + : require('@remix-run/web-fetch').ReadableStream + +export const Blob: typeof globalThis.Blob = globalThis.Blob + ? globalThis.Blob + : require('@remix-run/web-fetch').Blob + +export const FormData: typeof globalThis.FormData = globalThis.FormData + ? globalThis.FormData + : require('@remix-run/web-fetch').FormData diff --git a/src/handlers/RequestHandler.ts b/src/handlers/RequestHandler.ts index 8817b0a15..10a7c498e 100644 --- a/src/handlers/RequestHandler.ts +++ b/src/handlers/RequestHandler.ts @@ -232,6 +232,8 @@ export abstract class RequestHandler< 'Failed to returned a previously stored generator response: the value is not a valid Response.', ) + // Clone the previously stored response from the generator + // so that it could be read again. return this.resolverGeneratorResult.clone() } @@ -239,6 +241,8 @@ export abstract class RequestHandler< this.resolverGenerator = result } + // Also clone the response before storing it + // so it could be read again. this.resolverGeneratorResult = nextResponse?.clone() return nextResponse } diff --git a/src/index.ts b/src/index.ts index a93ca8292..e17ef7e00 100644 --- a/src/index.ts +++ b/src/index.ts @@ -62,13 +62,7 @@ export { ParsedGraphQLRequest } from './utils/internal/parseGraphQLRequest' export * from './utils/HttpResponse' export * from './delay' -export { bypass } from './utils/bypass' +export { bypass } from './bypass' export { NetworkError } from './NetworkError' -export { - Request, - Response, - ReadableStream, - Blob, - FormData, -} from '@remix-run/web-fetch' +export * from './fetch' diff --git a/src/utils/HttpResponse.ts b/src/utils/HttpResponse.ts index ab165cb24..c8b5d74b9 100644 --- a/src/utils/HttpResponse.ts +++ b/src/utils/HttpResponse.ts @@ -1,9 +1,7 @@ import * as cookieUtils from 'cookie' import httpStatusTexts from 'statuses/codes.json' import { Headers } from 'headers-polyfill' -import { Response as ResponsePolyfill } from '@remix-run/web-fetch' - -const Response = globalThis.Response || ResponsePolyfill +import { Response } from '../fetch' export interface HttpResponseInit extends ResponseInit { type?: ResponseType From 5166b5e63476a803e222c8564cafa963c53e4734 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 15 Oct 2022 02:17:05 +0200 Subject: [PATCH 018/210] fix(bypass): use compatible Request type --- src/bypass.ts | 9 +-- .../scenarios/response-patching.test.ts | 55 +++++++++---------- 2 files changed, 31 insertions(+), 33 deletions(-) diff --git a/src/bypass.ts b/src/bypass.ts index dfa3e464e..b8a2f6fa8 100644 --- a/src/bypass.ts +++ b/src/bypass.ts @@ -1,3 +1,4 @@ +import type { Request as RemixRequest } from '@remix-run/web-fetch' import { Request } from './fetch' /** @@ -10,7 +11,7 @@ import { Request } from './fetch' * bypass(new URL('/resource', 'api.example.com')) * bypass(new Request('/user')) */ -export function bypass(input: string | URL | Request): Request { +export function bypass(input: string | URL | Request): RemixRequest { const request = toRequest(input) // Set the custom MSW bypass header. @@ -21,10 +22,10 @@ export function bypass(input: string | URL | Request): Request { return request } -function toRequest(input: string | URL | Request): Request { +function toRequest(input: string | URL | Request): RemixRequest { if (input instanceof Request) { - return input.clone() + return input.clone() as RemixRequest } - return new Request(input.toString()) + return new Request(input) as RemixRequest } diff --git a/test/msw-api/setup-server/scenarios/response-patching.test.ts b/test/msw-api/setup-server/scenarios/response-patching.test.ts index 3d1ba8cf0..5e4cd2165 100644 --- a/test/msw-api/setup-server/scenarios/response-patching.test.ts +++ b/test/msw-api/setup-server/scenarios/response-patching.test.ts @@ -14,7 +14,7 @@ interface ResponseBody { } const server = setupServer( - rest.get('https://test.mswjs.io/user', async () => { + rest.get('https://test.mswjs.io/user', async () => { const originalResponse = await fetch( bypass(httpServer.http.makeUrl('/user')), ) @@ -25,34 +25,31 @@ const server = setupServer( mocked: true, }) }), - rest.get( - 'https://test.mswjs.io/complex-request', - async ({ request }) => { - const url = new URL(request.url) - - const shouldBypass = url.searchParams.get('bypass') === 'true' - const performRequest = shouldBypass - ? () => - fetch( - bypass( - new Request(httpServer.http.makeUrl('/user'), { - method: 'POST', - }), - ), - ).then((res) => res.json()) - : () => - fetch('https://httpbin.org/post', { method: 'POST' }).then((res) => - res.json(), - ) - - const originalResponse = await performRequest() - - return HttpResponse.json({ - id: originalResponse.id, - mocked: true, - }) - }, - ), + rest.get('https://test.mswjs.io/complex-request', async ({ request }) => { + const url = new URL(request.url) + + const shouldBypass = url.searchParams.get('bypass') === 'true' + const performRequest = shouldBypass + ? () => + fetch( + bypass( + new Request(httpServer.http.makeUrl('/user'), { + method: 'POST', + }), + ), + ).then((res) => res.json()) + : () => + fetch('https://httpbin.org/post', { method: 'POST' }).then((res) => + res.json(), + ) + + const originalResponse = await performRequest() + + return HttpResponse.json({ + id: originalResponse.id, + mocked: true, + }) + }), rest.post('https://httpbin.org/post', () => { return HttpResponse.json({ id: 303 }) }), From 11fa7c681e472ea9f5ccb699cd46c3d9cbd1f627 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 15 Oct 2022 11:59:28 +0200 Subject: [PATCH 019/210] feat: support one-time request handlers --- src/handlers/RequestHandler.ts | 40 +++++++---- src/handlers/RestHandler.ts | 25 +------ src/rest.ts | 8 ++- src/utils/getResponse.ts | 9 +-- .../setup-server/restoreHandlers.test.ts | 13 ++-- test/msw-api/setup-server/use.test.ts | 72 +++++++++++-------- test/msw-api/setup-worker/use.test.ts | 16 +++-- test/rest-api/generator.mocks.ts | 1 + 8 files changed, 96 insertions(+), 88 deletions(-) diff --git a/src/handlers/RequestHandler.ts b/src/handlers/RequestHandler.ts index 10a7c498e..2ebe406fa 100644 --- a/src/handlers/RequestHandler.ts +++ b/src/handlers/RequestHandler.ts @@ -72,12 +72,17 @@ export type ResponseResolver< info: ResponseResolverInfo, ) => AsyncResponseResolverReturnType -export interface RequestHandlerOptions { +export interface RequestHandlerOptions + extends RequestHandlerPublicOptions { info: HandlerInfo resolver: ResponseResolver ctx?: ContextMap } +export interface RequestHandlerPublicOptions { + once?: boolean +} + export interface RequestHandlerExecutionResult { handler: RequestHandler parsedResult: any | undefined @@ -91,8 +96,13 @@ export abstract class RequestHandler< ResolverExtras extends Record = any, > { public info: HandlerInfo & RequestHandlerInternalInfo - public shouldSkip: boolean + /** + * Indicates whether this request handler has been used + * (its resolver has successfully executed). + */ + public isUsed: boolean + private once: boolean private ctx: ContextMap private resolverGenerator?: Generator< MaybeAsyncResponseResolverReturnType, @@ -104,9 +114,9 @@ export abstract class RequestHandler< protected resolver: ResponseResolver constructor(options: RequestHandlerOptions) { - this.shouldSkip = false this.ctx = options.ctx || defaultContext this.resolver = options.resolver + this.once = options.once || false const callFrame = getCallFrame(new Error()) @@ -114,6 +124,8 @@ export abstract class RequestHandler< ...options.info, callFrame, } + + this.isUsed = false } /** @@ -159,10 +171,6 @@ export abstract class RequestHandler< ) } - public markAsSkipped(shouldSkip = true): void { - this.shouldSkip = shouldSkip - } - protected extendInfo( _request: Request, _parsedResult: ParsedResult, @@ -178,10 +186,15 @@ export abstract class RequestHandler< request: Request, resolutionContext?: ResponseResolutionContext, ): Promise { - if (this.shouldSkip) { + if (this.isUsed && this.once) { return null } + // Immediately mark the handler as used. + // Can't await the resolver to be resolved because it's potentially + // asynchronous, and there may be multiple requests hitting this handler. + this.isUsed = true + const requestClone = request.clone() const parsedResult = await this.parse(requestClone, resolutionContext) @@ -200,18 +213,19 @@ export abstract class RequestHandler< const executeResolver = this.wrapResolver(this.resolver) const resolverExtras = this.extendInfo(requestClone, parsedResult) - const mockedResponse = await executeResolver({ + const mockedResponse = (await executeResolver({ ...resolverExtras, request, ctx: this.ctx, - }) + })) as Response - return this.createExecutionResult( + const executionResult = this.createExecutionResult( request, parsedResult, - // @ts-ignore @todo - mockedResponse as any, + mockedResponse, ) + + return executionResult } private wrapResolver( diff --git a/src/handlers/RestHandler.ts b/src/handlers/RestHandler.ts index f027ecd0a..dfb8db4a4 100644 --- a/src/handlers/RestHandler.ts +++ b/src/handlers/RestHandler.ts @@ -21,6 +21,7 @@ import { DefaultContext, RequestHandler, RequestHandlerDefaultInfo, + RequestHandlerPublicOptions, ResponseResolver, } from './RequestHandler' @@ -74,28 +75,6 @@ export type RestRequestResolverExtras = { cookies: Record> } -// export class RestRequest< -// RequestBody extends DefaultBodyType = DefaultBodyType, -// RequestParams extends PathParams = PathParams, -// > extends Request { -// constructor( -// request: MockedRequest, -// public readonly params: RequestParams, -// ) { -// super(request.url, { -// ...request, -// /** -// * @deprecated https://github.com/mswjs/msw/issues/1318 -// * @note Use internal request body buffer as the body init -// * because "request.body" is a getter that will trigger -// * request body parsing at this step. -// */ -// body: request['_body'], -// }) -// this.id = request.id -// } -// } - /** * Request handler for REST API requests. * Provides request matching based on method and URL. @@ -109,6 +88,7 @@ export class RestHandler extends RequestHandler< method: RestHandlerMethod, path: Path, resolver: ResponseResolver>, + options?: RequestHandlerPublicOptions, ) { super({ info: { @@ -118,6 +98,7 @@ export class RestHandler extends RequestHandler< }, ctx: restContext, resolver, + once: options?.once, }) this.checkRedundantQueryParameters() diff --git a/src/rest.ts b/src/rest.ts index 3e330f55b..41d868c7c 100644 --- a/src/rest.ts +++ b/src/rest.ts @@ -1,4 +1,7 @@ -import { type ResponseResolver } from './handlers/RequestHandler' +import { + type RequestHandlerPublicOptions, + type ResponseResolver, +} from './handlers/RequestHandler' import { RESTMethods, type RestContext, @@ -16,8 +19,9 @@ function createRestHandler( >( path: Path, resolver: ResponseResolver>, + options: RequestHandlerPublicOptions = {}, ) => { - return new RestHandler(method, path, resolver) + return new RestHandler(method, path, resolver, options) } } diff --git a/src/utils/getResponse.ts b/src/utils/getResponse.ts index 41894f790..a91074866 100644 --- a/src/utils/getResponse.ts +++ b/src/utils/getResponse.ts @@ -53,7 +53,7 @@ export const getResponse = async >( const result = await handler.run(request, resolutionContext) - if (result === null || result.handler.shouldSkip) { + if (result === null) { return null } @@ -66,13 +66,6 @@ export const getResponse = async >( } } - /** - * @todo Support `res.once()` alternative. - */ - // if (result.response.once) { - // handler.markAsSkipped(true) - // } - return result }, Promise.resolve(null)) diff --git a/test/msw-api/setup-server/restoreHandlers.test.ts b/test/msw-api/setup-server/restoreHandlers.test.ts index c95688ecb..6d4200a67 100644 --- a/test/msw-api/setup-server/restoreHandlers.test.ts +++ b/test/msw-api/setup-server/restoreHandlers.test.ts @@ -16,12 +16,13 @@ afterAll(() => server.close()) test('returns a mocked response from the used one-time request handler when restored', async () => { server.use( - rest.get('https://test.mswjs.io/book/:bookId', () => { - /** - * @todo @fixme This needs to use one-time response. - */ - return HttpResponse.json({ title: 'Overridden title' }) - }), + rest.get( + 'https://test.mswjs.io/book/:bookId', + () => { + return HttpResponse.json({ title: 'Overridden title' }) + }, + { once: true }, + ), ) const firstResponse = await fetch('https://test.mswjs.io/book/abc-123') diff --git a/test/msw-api/setup-server/use.test.ts b/test/msw-api/setup-server/use.test.ts index 153c92ab9..05de084ae 100644 --- a/test/msw-api/setup-server/use.test.ts +++ b/test/msw-api/setup-server/use.test.ts @@ -20,9 +20,12 @@ beforeAll(async () => { }) server = setupServer( - rest.get(httpServer.http.makeUrl('/book/:bookId'), () => { - return HttpResponse.json({ title: 'Original title' }) - }), + rest.get<{ bookId: string }>( + httpServer.http.makeUrl('/book/:bookId'), + () => { + return HttpResponse.json({ title: 'Original title' }) + }, + ), ) server.listen() }) @@ -53,16 +56,18 @@ test('returns a mocked response from a runtime request handler upon match', asyn // Other request handlers are preserved, if there are no overlaps. const bookResponse = await fetch(httpServer.http.makeUrl('/book/abc-123')) - const bookBody = await bookResponse.json() expect(bookResponse.status).toBe(200) - expect(bookBody).toEqual({ title: 'Original title' }) + expect(await bookResponse.json()).toEqual({ title: 'Original title' }) }) test('returns a mocked response from a persistent request handler override', async () => { server.use( - rest.get(httpServer.http.makeUrl('/book/:bookId'), () => { - return HttpResponse.json({ title: 'Permanent override' }) - }), + rest.get<{ bookId: string }>( + httpServer.http.makeUrl('/book/:bookId'), + () => { + return HttpResponse.json({ title: 'Permanent override' }) + }, + ), ) const bookResponse = await fetch(httpServer.http.makeUrl('/book/abc-123')) @@ -73,19 +78,21 @@ test('returns a mocked response from a persistent request handler override', asy const anotherBookResponse = await fetch( httpServer.http.makeUrl('/book/abc-123'), ) - const anotherBookBody = await anotherBookResponse.json() expect(anotherBookResponse.status).toBe(200) - expect(anotherBookBody).toEqual({ title: 'Permanent override' }) + expect(await anotherBookResponse.json()).toEqual({ + title: 'Permanent override', + }) }) -test.skip('returns a mocked response from a one-time request handler override only upon first request match', async () => { +test('returns a mocked response from a one-time request handler override only upon first request match', async () => { server.use( - rest.get(httpServer.http.makeUrl('/book/:bookId'), () => { - /** - * @todo `res.once()` - */ - return HttpResponse.json({ title: 'One-time override' }) - }), + rest.get<{ bookId: string }>( + httpServer.http.makeUrl('/book/:bookId'), + () => { + return HttpResponse.json({ title: 'One-time override' }) + }, + { once: true }, + ), ) const bookResponse = await fetch(httpServer.http.makeUrl('/book/abc-123')) @@ -96,20 +103,22 @@ test.skip('returns a mocked response from a one-time request handler override on const anotherBookResponse = await fetch( httpServer.http.makeUrl('/book/abc-123'), ) - const anotherBookBody = await anotherBookResponse.json() expect(anotherBookResponse.status).toBe(200) - expect(anotherBookBody).toEqual({ title: 'Original title' }) + expect(await anotherBookResponse.json()).toEqual({ title: 'Original title' }) }) -test.skip('returns a mocked response from a one-time request handler override only upon first request match with parallel requests', async () => { +test('returns a mocked response from a one-time request handler override only upon first request match with parallel requests', async () => { server.use( - /** - * @todo `res.once()` - */ - rest.get(httpServer.http.makeUrl('/book/:bookId'), ({ params }) => { - const { bookId } = params - return HttpResponse.json({ title: 'One-time override', bookId }) - }), + rest.get<{ bookId: string }>( + httpServer.http.makeUrl('/book/:bookId'), + ({ params }) => { + return HttpResponse.json({ + title: 'One-time override', + bookId: params.bookId, + }) + }, + { once: true }, + ), ) const bookRequestPromise = fetch(httpServer.http.makeUrl('/book/abc-123')) @@ -118,12 +127,13 @@ test.skip('returns a mocked response from a one-time request handler override on ) const bookResponse = await bookRequestPromise - const bookBody = await bookResponse.json() expect(bookResponse.status).toBe(200) - expect(bookBody).toEqual({ title: 'One-time override', bookId: 'abc-123' }) + expect(await bookResponse.json()).toEqual({ + title: 'One-time override', + bookId: 'abc-123', + }) const anotherBookResponse = await anotherBookRequestPromise - const anotherBookBody = await anotherBookResponse.json() expect(anotherBookResponse.status).toBe(200) - expect(anotherBookBody).toEqual({ title: 'Original title' }) + expect(await anotherBookResponse.json()).toEqual({ title: 'Original title' }) }) diff --git a/test/msw-api/setup-worker/use.test.ts b/test/msw-api/setup-worker/use.test.ts index b540e1ea2..7026fc660 100644 --- a/test/msw-api/setup-worker/use.test.ts +++ b/test/msw-api/setup-worker/use.test.ts @@ -6,6 +6,7 @@ declare namespace window { export const msw: { worker: SetupWorkerApi rest: typeof rest + HttpResponse: typeof HttpResponse } } @@ -77,9 +78,13 @@ test('returns a mocked response from a one-time request handler override only up const { msw } = window msw.worker.use( - msw.rest.get('/book/:bookId', function oneTimeOverride() { - return HttpResponse.json({ title: 'One-time override' }) - }), + msw.rest.get( + '/book/:bookId', + function oneTimeOverride() { + return HttpResponse.json({ title: 'One-time override' }) + }, + { once: true }, + ), ) }) @@ -108,12 +113,11 @@ test('returns a mocked response from a one-time request handler override only up msw.rest.get<{ bookId: string }>( '/book/:bookId', function oneTimeOverride({ params }) { - /* eslint-disable-next-line */ const { bookId } = params - throw new Error('Support res.once()') - // return res.once(ctx.json({ title: 'One-time override', bookId })) + return msw.HttpResponse.json({ title: 'One-time override', bookId }) }, + { once: true }, ), ) }) diff --git a/test/rest-api/generator.mocks.ts b/test/rest-api/generator.mocks.ts index a70f196ed..13c11b783 100644 --- a/test/rest-api/generator.mocks.ts +++ b/test/rest-api/generator.mocks.ts @@ -40,6 +40,7 @@ const worker = setupWorker( count, }) }, + { once: true }, ), rest.get('/polling/once/:maxCount', () => { return HttpResponse.json({ status: 'done' }) From adab915384d678694396c0060a65e8cf984e7dc6 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sun, 16 Oct 2022 01:56:18 +0200 Subject: [PATCH 020/210] feat: add "passthrough", fix tests --- CONTRIBUTING.md | 42 ++-- jest.config.js | 1 - src/bypass.test.ts | 13 +- src/bypass.ts | 20 +- src/graphql.ts | 12 +- src/handlers/GraphQLHandler.test.ts | 141 +++++++------- src/handlers/GraphQLHandler.ts | 13 +- src/handlers/RequestHandler.ts | 45 ++--- src/handlers/RestHandler.test.ts | 184 ++++++++++-------- src/handlers/RestHandler.ts | 13 +- src/index.ts | 1 + src/mockServiceWorker.js | 45 +++-- src/passthrough.test.ts | 14 ++ src/passthrough.ts | 20 ++ src/setupWorker/glossary.ts | 20 +- .../start/createFallbackRequestListener.ts | 13 +- .../start/createRequestListener.ts | 27 ++- .../start/createResponseListener.ts | 20 +- .../start/utils/createMessageChannel.ts | 4 +- src/setupWorker/start/utils/streamResponse.ts | 56 ------ src/utils/getResponse.ts | 2 +- src/utils/handleRequest.test.ts | 113 +++++++---- src/utils/handleRequest.ts | 11 +- .../internal/parseGraphQLRequest.test.ts | 116 +++++------ src/utils/internal/requestHandlerUtils.ts | 12 +- src/utils/internal/uuidv4.ts | 8 +- src/utils/logging/prepareRequest.test.ts | 28 --- src/utils/logging/prepareResponse.test.ts | 52 ----- src/utils/logging/prepareResponse.ts | 16 -- src/utils/logging/serializeRequest.test.ts | 25 +++ ...{prepareRequest.ts => serializeRequest.ts} | 18 +- src/utils/logging/serializeResponse.test.ts | 78 ++++++++ src/utils/logging/serializeResponse.ts | 25 ++- .../createResponseFromIsomorphicResponse.ts | 34 ---- .../request/getPublicUrlFromRequest.test.ts | 30 +-- src/utils/request/getPublicUrlFromRequest.ts | 12 +- .../request/getRequestCookies.node.test.ts | 4 +- src/utils/request/getRequestCookies.test.ts | 10 +- src/utils/request/onUnhandledRequest.test.ts | 119 ++++++----- src/utils/request/onUnhandledRequest.ts | 2 +- src/utils/request/parseBody.test.ts | 114 ----------- src/utils/request/parseBody.ts | 33 ---- src/utils/toResponseInit.ts | 9 + test/graphql-api/compatibility.node.test.ts | 14 +- test/graphql-api/cookies.node.test.ts | 20 +- test/graphql-api/document-node.test.ts | 6 +- test/graphql-api/extensions.node.test.ts | 22 +-- test/graphql-api/extensions.test.ts | 2 +- test/graphql-api/link.test.ts | 4 +- test/graphql-api/multipart-data.test.ts | 2 +- test/graphql-api/mutation.test.ts | 2 +- test/graphql-api/operation.test.ts | 6 +- .../response-patching.node.test.ts | 20 +- .../async-response-transformer.mocks.ts | 41 ---- .../async-response-transformer.test.ts | 42 ---- test/msw-api/distribution/iife.mocks.js | 6 +- test/msw-api/distribution/iife.test.ts | 2 +- test/msw-api/regression/null-body.mocks.ts | 4 +- test/msw-api/regression/null-body.test.ts | 2 +- test/msw-api/req/passthrough.mocks.ts | 7 +- test/msw-api/req/passthrough.node.test.ts | 10 +- test/msw-api/req/passthrough.test.ts | 15 +- .../scenarios/generator.node.test.ts | 3 +- .../on-unhandled-request/bypass.test.ts | 2 +- .../fallback-mode/fallback-mode.test.ts | 2 +- .../life-cycle-events/on.mocks.ts | 34 ++-- .../setup-worker/restoreHandlers.test.ts | 19 +- .../scenarios/fall-through.test.ts | 3 +- test/msw-api/setup-worker/use.test.ts | 26 +-- test/rest-api/body.mocks.ts | 49 ++--- test/rest-api/body.test.ts | 100 ++++------ .../rest-api/cookies-inheritance.node.test.ts | 32 +-- test/rest-api/custom-request-handler.mocks.ts | 93 --------- test/rest-api/custom-request-handler.test.ts | 42 ---- test/rest-api/headers-multiple.test.ts | 4 +- .../body/body-arraybuffer.node.test.ts | 16 +- .../request/body/body-form-data.node.test.ts | 22 ++- .../request/body/body-form-data.test.ts | 7 +- .../request/body/body-json.node.test.ts | 38 +--- .../request/body/body-text.node.test.ts | 7 +- test/rest-api/request/body/body.mocks.ts | 21 +- .../request/matching/all.node.test.ts | 16 +- test/rest-api/request/matching/all.test.ts | 6 +- .../matching/path-params-decode.node.test.ts | 15 +- .../matching/path-params-decode.test.ts | 2 +- test/rest-api/request/matching/uri.test.ts | 12 +- test/rest-api/response-patching.test.ts | 2 +- .../response/body/body-binary.node.test.ts | 15 +- .../response/body/body-json.node.test.ts | 10 +- .../response/body/body-text.node.test.ts | 7 +- .../response/body/body-xml.node.test.ts | 10 +- test/rest-api/xhr.mocks.ts | 6 +- 92 files changed, 1030 insertions(+), 1393 deletions(-) create mode 100644 src/passthrough.test.ts create mode 100644 src/passthrough.ts delete mode 100644 src/setupWorker/start/utils/streamResponse.ts delete mode 100644 src/utils/logging/prepareRequest.test.ts delete mode 100644 src/utils/logging/prepareResponse.test.ts delete mode 100644 src/utils/logging/prepareResponse.ts create mode 100644 src/utils/logging/serializeRequest.test.ts rename src/utils/logging/{prepareRequest.ts => serializeRequest.ts} (57%) create mode 100644 src/utils/logging/serializeResponse.test.ts delete mode 100644 src/utils/request/createResponseFromIsomorphicResponse.ts delete mode 100644 src/utils/request/parseBody.test.ts delete mode 100644 src/utils/request/parseBody.ts create mode 100644 src/utils/toResponseInit.ts delete mode 100644 test/msw-api/context/async-response-transformer.mocks.ts delete mode 100644 test/msw-api/context/async-response-transformer.test.ts delete mode 100644 test/rest-api/custom-request-handler.mocks.ts delete mode 100644 test/rest-api/custom-request-handler.test.ts diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5a406d3f4..26f359312 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -132,19 +132,17 @@ Let's write an integration test that asserts the interception of a GET request. ```js // test/rest-api/basic.mocks.ts -import { rest, setupWorker } from 'msw' +import { rest, setupWorker, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('/books', (req, res, ctx) => { - return res( - ctx.json([ - { - id: 'ea42ffcb-e729-4dd5-bfac-7a5b645cb1da', - title: 'The Lord of the Rings', - publishedAt: -486867600, - }, - ]), - ) + rest.get('/books', () => { + return HttpResponse.json([ + { + id: 'ea42ffcb-e729-4dd5-bfac-7a5b645cb1da', + title: 'The Lord of the Rings', + publishedAt: -486867600, + }, + ]) }), ) @@ -192,28 +190,28 @@ Let's replicate the same `GET /books` integration test in Node.js. ```ts // test/setup-server/basic.test.ts import fetch from 'node-fetch' -import { rest } from 'msw' +import { rest, HttpResponse } from 'msw' import { setupServer } from 'msw/node' const server = setupServer( - rest.get('/books', (req, res, ctx) => { - return res( - ctx.json([ - { - id: 'ea42ffcb-e729-4dd5-bfac-7a5b645cb1da', - title: 'The Lord of the Rings', - publishedAt: -486867600, - }, - ]), - ) + rest.get('/books', () => { + return HttpResponse.json([ + { + id: 'ea42ffcb-e729-4dd5-bfac-7a5b645cb1da', + title: 'The Lord of the Rings', + publishedAt: -486867600, + }, + ]) }), ) beforeAll(() => server.listen()) + afterAll(() => server.close()) test('returns a mocked response', async () => { const res = await fetch('/books') + expect(await res.json()).toEqual([ { id: 'ea42ffcb-e729-4dd5-bfac-7a5b645cb1da', diff --git a/jest.config.js b/jest.config.js index fe8696b85..516f8170e 100644 --- a/jest.config.js +++ b/jest.config.js @@ -7,5 +7,4 @@ module.exports = { testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.(j|t)sx?$', moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'], setupFiles: ['./jest.setup.js'], - timeout: 9999999, } diff --git a/src/bypass.test.ts b/src/bypass.test.ts index 9e1c33ea1..f68868235 100644 --- a/src/bypass.test.ts +++ b/src/bypass.test.ts @@ -1,24 +1,25 @@ /** * @jest-environment jsdom */ +import { Request } from './fetch' import { bypass } from './bypass' it('returns bypassed request given a request url string', () => { const request = bypass('/user') - expect(request.url).toBe('/user') - expect(request.headers.get('x-msw-bypass')).toBe('true') + expect(request.url).toBe('http://localhost/user') + expect(request.headers.get('x-msw-intention')).toBe('bypass') }) it('returns bypassed request given a request url', () => { const request = bypass(new URL('/user', 'https://api.github.com')) expect(request.url).toBe('https://api.github.com/user') - expect(request.headers.get('x-msw-bypass')).toBe('true') + expect(request.headers.get('x-msw-intention')).toBe('bypass') }) it('returns bypassed request given request instance', async () => { - const original = new Request('/resource', { + const original = new Request('http://localhost/resource', { method: 'POST', headers: { 'X-My-Header': 'value', @@ -28,8 +29,8 @@ it('returns bypassed request given request instance', async () => { const request = bypass(original) expect(request.method).toBe('POST') - expect(request.url).toBe('/resource') - expect(request.headers.get('x-msw-bypass')).toBe('true') + expect(request.url).toBe('http://localhost/resource') + expect(request.headers.get('x-msw-intention')).toBe('bypass') expect(request.headers.get('x-my-header')).toBe('value') expect(await request.text()).toBe('hello world') }) diff --git a/src/bypass.ts b/src/bypass.ts index b8a2f6fa8..5b0cfd20a 100644 --- a/src/bypass.ts +++ b/src/bypass.ts @@ -14,18 +14,28 @@ import { Request } from './fetch' export function bypass(input: string | URL | Request): RemixRequest { const request = toRequest(input) - // Set the custom MSW bypass header. - // The worker recognizes this header, strips it away, - // and performs the intercepted request as-is. - request.headers.set('x-msw-bypass', 'true') + // Set the internal header that would instruct MSW + // to bypass this request from any further request matching. + // Unlike "passthrough()", bypass is meant for performing + // additional requests within pending request resolution. + request.headers.set('x-msw-intention', 'bypass') return request } function toRequest(input: string | URL | Request): RemixRequest { if (input instanceof Request) { + /** + * @note When using "node-fetch", if the request instance + * hasn't been constructed using ONLY the "node-fetch"'s Request, + * the input to its "fetch()" will be invalid. "node-fetch" will + * think it's given a URL object, and will throw on it being invalid. + */ return input.clone() as RemixRequest } - return new Request(input) as RemixRequest + const baseUrl = typeof location !== 'undefined' ? location.href : undefined + const requestUrl = new URL(input, baseUrl) + + return new Request(requestUrl) as RemixRequest } diff --git a/src/graphql.ts b/src/graphql.ts index 837bf06da..fbe5e18b6 100644 --- a/src/graphql.ts +++ b/src/graphql.ts @@ -55,8 +55,8 @@ const standardGraphQLHandlers = { /** * Captures any GraphQL operation, regardless of its name, under the current scope. * @example - * graphql.operation((req, res, ctx) => { - * return res(ctx.data({ name: 'John' })) + * graphql.operation(() => { + * return HttpResponse.json({ data: { name: 'John' } }) * }) * @see {@link https://mswjs.io/docs/api/graphql/operation `graphql.operation()`} */ @@ -65,8 +65,8 @@ const standardGraphQLHandlers = { /** * Captures a GraphQL query by a given name. * @example - * graphql.query('GetUser', (req, res, ctx) => { - * return res(ctx.data({ user: { name: 'John' } })) + * graphql.query('GetUser', () => { + * return HttpResponse.json({ data: { user: { name: 'John' } } }) * }) * @see {@link https://mswjs.io/docs/api/graphql/query `graphql.query()`} */ @@ -75,8 +75,8 @@ const standardGraphQLHandlers = { /** * Captures a GraphQL mutation by a given name. * @example - * graphql.mutation('SavePost', (req, res, ctx) => { - * return res(ctx.data({ post: { id: 'abc-123' } })) + * graphql.mutation('SavePost', () => { + * return HttpResponse.json({ data: { post: { id: 'abc-123 } } }) * }) * @see {@link https://mswjs.io/docs/api/graphql/mutation `graphql.mutation()`} */ diff --git a/src/handlers/GraphQLHandler.test.ts b/src/handlers/GraphQLHandler.test.ts index 6a60e51f8..9eb375a22 100644 --- a/src/handlers/GraphQLHandler.test.ts +++ b/src/handlers/GraphQLHandler.test.ts @@ -4,26 +4,28 @@ import { encodeBuffer } from '@mswjs/interceptors' import { OperationTypeNode, parse } from 'graphql' import { Headers } from 'headers-polyfill' -import { context, MockedRequest, MockedRequestInit } from '..' -import { response } from '../response' import { GraphQLContext, GraphQLHandler, - GraphQLRequest, GraphQLRequestBody, + GraphQLResolverExtras, isDocumentNode, } from './GraphQLHandler' +import { HttpResponse } from '../utils/HttpResponse' import { ResponseResolver } from './RequestHandler' +import { Request } from '../fetch' const resolver: ResponseResolver< - GraphQLRequest<{ userId: string }>, - GraphQLContext -> = (req, res, ctx) => { - return res( - ctx.data({ - user: { id: req.variables.userId }, - }), - ) + GraphQLContext, + GraphQLResolverExtras<{ userId: string }> +> = ({ variables }) => { + return HttpResponse.json({ + data: { + user: { + id: variables.userId, + }, + }, + }) } function createGetGraphQLRequest( @@ -33,17 +35,15 @@ function createGetGraphQLRequest( const requestUrl = new URL(hostname) requestUrl.searchParams.set('query', body?.query) requestUrl.searchParams.set('variables', JSON.stringify(body?.variables)) - return new MockedRequest(requestUrl) + return new Request(requestUrl) } function createPostGraphQLRequest( body: GraphQLRequestBody, hostname = 'https://example.com', - requestInit: MockedRequestInit = {}, ) { - return new MockedRequest(new URL(hostname), { + return new Request(new URL(hostname), { method: 'POST', - ...requestInit, headers: new Headers({ 'Content-Type': 'application/json' }), body: encodeBuffer(JSON.stringify(body)), }) @@ -152,7 +152,7 @@ describe('info', () => { describe('parse', () => { describe('query', () => { - test('parses a query without variables (GET)', () => { + test('parses a query without variables (GET)', async () => { const handler = new GraphQLHandler( OperationTypeNode.QUERY, 'GetUser', @@ -163,14 +163,15 @@ describe('parse', () => { query: GET_USER, }) - expect(handler.parse(request)).toEqual({ + expect(await handler.parse(request)).toEqual({ operationType: 'query', operationName: 'GetUser', + query: GET_USER, variables: undefined, }) }) - test('parses a query with variables (GET)', () => { + test('parses a query with variables (GET)', async () => { const handler = new GraphQLHandler( OperationTypeNode.QUERY, 'GetUser', @@ -184,16 +185,17 @@ describe('parse', () => { }, }) - expect(handler.parse(request)).toEqual({ + expect(await handler.parse(request)).toEqual({ operationType: 'query', operationName: 'GetUser', + query: GET_USER, variables: { userId: 'abc-123', }, }) }) - test('parses a query without variables (POST)', () => { + test('parses a query without variables (POST)', async () => { const handler = new GraphQLHandler( OperationTypeNode.QUERY, 'GetUser', @@ -204,14 +206,15 @@ describe('parse', () => { query: GET_USER, }) - expect(handler.parse(request)).toEqual({ + expect(await handler.parse(request)).toEqual({ operationType: 'query', operationName: 'GetUser', + query: GET_USER, variables: undefined, }) }) - test('parses a query with variables (POST)', () => { + test('parses a query with variables (POST)', async () => { const handler = new GraphQLHandler( OperationTypeNode.QUERY, 'GetUser', @@ -225,9 +228,10 @@ describe('parse', () => { }, }) - expect(handler.parse(request)).toEqual({ + expect(await handler.parse(request)).toEqual({ operationType: 'query', operationName: 'GetUser', + query: GET_USER, variables: { userId: 'abc-123', }, @@ -236,7 +240,7 @@ describe('parse', () => { }) describe('mutation', () => { - test('parses a mutation without variables (GET)', () => { + test('parses a mutation without variables (GET)', async () => { const handler = new GraphQLHandler( OperationTypeNode.MUTATION, 'GetUser', @@ -247,14 +251,15 @@ describe('parse', () => { query: LOGIN, }) - expect(handler.parse(request)).toEqual({ + expect(await handler.parse(request)).toEqual({ operationType: 'mutation', operationName: 'Login', + query: LOGIN, variables: undefined, }) }) - test('parses a mutation with variables (GET)', () => { + test('parses a mutation with variables (GET)', async () => { const handler = new GraphQLHandler( OperationTypeNode.MUTATION, 'GetUser', @@ -268,16 +273,17 @@ describe('parse', () => { }, }) - expect(handler.parse(request)).toEqual({ + expect(await handler.parse(request)).toEqual({ operationType: 'mutation', operationName: 'Login', + query: LOGIN, variables: { userId: 'abc-123', }, }) }) - test('parses a mutation without variables (POST)', () => { + test('parses a mutation without variables (POST)', async () => { const handler = new GraphQLHandler( OperationTypeNode.MUTATION, 'GetUser', @@ -288,14 +294,15 @@ describe('parse', () => { query: LOGIN, }) - expect(handler.parse(request)).toEqual({ + expect(await handler.parse(request)).toEqual({ operationType: 'mutation', operationName: 'Login', + query: LOGIN, variables: undefined, }) }) - test('parses a mutation with variables (POST)', () => { + test('parses a mutation with variables (POST)', async () => { const handler = new GraphQLHandler( OperationTypeNode.MUTATION, 'GetUser', @@ -309,9 +316,10 @@ describe('parse', () => { }, }) - expect(handler.parse(request)).toEqual({ + expect(await handler.parse(request)).toEqual({ operationType: 'mutation', operationName: 'Login', + query: LOGIN, variables: { userId: 'abc-123', }, @@ -321,7 +329,7 @@ describe('parse', () => { }) describe('predicate', () => { - test('respects operation type', () => { + test('respects operation type', async () => { const handler = new GraphQLHandler( OperationTypeNode.QUERY, 'GetUser', @@ -335,13 +343,13 @@ describe('predicate', () => { query: LOGIN, }) - expect(handler.predicate(request, handler.parse(request))).toBe(true) - expect(handler.predicate(alienRequest, handler.parse(alienRequest))).toBe( - false, - ) + expect(handler.predicate(request, await handler.parse(request))).toBe(true) + expect( + handler.predicate(alienRequest, await handler.parse(alienRequest)), + ).toBe(false) }) - test('respects operation name', () => { + test('respects operation name', async () => { const handler = new GraphQLHandler( OperationTypeNode.QUERY, 'GetUser', @@ -361,13 +369,13 @@ describe('predicate', () => { `, }) - expect(handler.predicate(request, handler.parse(request))).toBe(true) - expect(handler.predicate(alienRequest, handler.parse(alienRequest))).toBe( - false, - ) + expect(handler.predicate(request, await handler.parse(request))).toBe(true) + expect( + handler.predicate(alienRequest, await handler.parse(alienRequest)), + ).toBe(false) }) - test('allows anonymous GraphQL opertaions when using "all" expected operation type', () => { + test('allows anonymous GraphQL opertaions when using "all" expected operation type', async () => { const handler = new GraphQLHandler('all', new RegExp('.*'), '*', resolver) const request = createPostGraphQLRequest({ query: ` @@ -380,10 +388,10 @@ describe('predicate', () => { `, }) - expect(handler.predicate(request, handler.parse(request))).toBe(true) + expect(handler.predicate(request, await handler.parse(request))).toBe(true) }) - test('respects custom endpoint', () => { + test('respects custom endpoint', async () => { const handler = new GraphQLHandler( OperationTypeNode.QUERY, 'GetUser', @@ -400,15 +408,15 @@ describe('predicate', () => { query: GET_USER, }) - expect(handler.predicate(request, handler.parse(request))).toBe(true) - expect(handler.predicate(alienRequest, handler.parse(alienRequest))).toBe( - false, - ) + expect(handler.predicate(request, await handler.parse(request))).toBe(true) + expect( + handler.predicate(alienRequest, await handler.parse(alienRequest)), + ).toBe(false) }) }) describe('test', () => { - test('respects operation type', () => { + test('respects operation type', async () => { const handler = new GraphQLHandler( OperationTypeNode.QUERY, 'GetUser', @@ -422,11 +430,11 @@ describe('test', () => { query: LOGIN, }) - expect(handler.test(request)).toBe(true) - expect(handler.test(alienRequest)).toBe(false) + expect(await handler.test(request)).toBe(true) + expect(await handler.test(alienRequest)).toBe(false) }) - test('respects operation name', () => { + test('respects operation name', async () => { const handler = new GraphQLHandler( OperationTypeNode.QUERY, 'GetUser', @@ -446,11 +454,11 @@ describe('test', () => { `, }) - expect(handler.test(request)).toBe(true) - expect(handler.test(alienRequest)).toBe(false) + expect(await handler.test(request)).toBe(true) + expect(await handler.test(alienRequest)).toBe(false) }) - test('respects custom endpoint', () => { + test('respects custom endpoint', async () => { const handler = new GraphQLHandler( OperationTypeNode.QUERY, 'GetUser', @@ -467,8 +475,8 @@ describe('test', () => { query: GET_USER, }) - expect(handler.test(request)).toBe(true) - expect(handler.test(alienRequest)).toBe(false) + expect(await handler.test(request)).toBe(true) + expect(await handler.test(alienRequest)).toBe(false) }) }) @@ -490,12 +498,7 @@ describe('run', () => { expect(result).toMatchObject({ handler, - request: { - ...request, - variables: { - userId: 'abc-123', - }, - }, + request, parsedResult: { operationType: 'query', operationName: 'GetUser', @@ -503,11 +506,13 @@ describe('run', () => { userId: 'abc-123', }, }, - response: await response( - context.data({ - user: { id: 'abc-123' }, - }), - ), + response: HttpResponse.json({ + data: { + user: { + id: 'abc-123', + }, + }, + }), }) }) diff --git a/src/handlers/GraphQLHandler.ts b/src/handlers/GraphQLHandler.ts index 7769e5789..41db09c0c 100644 --- a/src/handlers/GraphQLHandler.ts +++ b/src/handlers/GraphQLHandler.ts @@ -1,5 +1,4 @@ import type { DocumentNode, OperationTypeNode } from 'graphql' -import { type SerializedResponse } from '../setupWorker/glossary' import { data } from '../context/data' import { extensions } from '../context/extensions' import { errors } from '../context/errors' @@ -15,8 +14,8 @@ import { } from './RequestHandler' import { getTimestamp } from '../utils/logging/getTimestamp' import { getStatusCodeColor } from '../utils/logging/getStatusCodeColor' -import { prepareRequest } from '../utils/logging/prepareRequest' -import { prepareResponse } from '../utils/logging/prepareResponse' +import { serializeRequest } from '../utils/logging/serializeRequest' +import { serializeResponse } from '../utils/logging/serializeResponse' import { matchRequestUrl, Path } from '../utils/matching/matchRequestUrl' import { ParsedGraphQLRequest, @@ -186,13 +185,13 @@ Consider naming this operation or using "graphql.operation" request handler to i } } - override log( + override async log( request: Request, - response: SerializedResponse, + response: Response, parsedRequest: ParsedGraphQLRequest, ) { - const loggedRequest = prepareRequest(request) - const loggedResponse = prepareResponse(response) + const loggedRequest = await serializeRequest(request) + const loggedResponse = await serializeResponse(response) const statusColor = getStatusCodeColor(response.status) const requestInfo = parsedRequest?.operationName ? `${parsedRequest?.operationType} ${parsedRequest?.operationName}` diff --git a/src/handlers/RequestHandler.ts b/src/handlers/RequestHandler.ts index 2ebe406fa..c8023cde1 100644 --- a/src/handlers/RequestHandler.ts +++ b/src/handlers/RequestHandler.ts @@ -6,7 +6,6 @@ import { status } from '../context/status' import { set } from '../context/set' import { delay } from '../context/delay' import { type ResponseResolutionContext } from '../utils/getResponse' -import { type SerializedResponse } from '../setupWorker/glossary' export type DefaultContext = { status: typeof status @@ -83,16 +82,18 @@ export interface RequestHandlerPublicOptions { once?: boolean } -export interface RequestHandlerExecutionResult { +export interface RequestHandlerExecutionResult< + ParsedResult extends Record, +> { handler: RequestHandler - parsedResult: any | undefined + parsedResult?: ParsedResult request: Request response?: Response } export abstract class RequestHandler< HandlerInfo extends RequestHandlerDefaultInfo = RequestHandlerDefaultInfo, - ParsedResult extends Record | undefined = any, + ParsedResult extends Record = any, ResolverExtras extends Record = any, > { public info: HandlerInfo & RequestHandlerInternalInfo @@ -142,7 +143,7 @@ export abstract class RequestHandler< */ abstract log( request: Request, - response: SerializedResponse, + response: Response, parsedResult: ParsedResult, ): void @@ -185,7 +186,7 @@ export abstract class RequestHandler< public async run( request: Request, resolutionContext?: ResponseResolutionContext, - ): Promise { + ): Promise | null> { if (this.isUsed && this.once) { return null } @@ -235,9 +236,18 @@ export abstract class RequestHandler< const result = this.resolverGenerator || (await resolver(info)) if (isIterable(result)) { + // Immediately mark this handler as unused. + // Only when the generator is done, the handler will be + // considered used. + this.isUsed = false + const { value, done } = result[Symbol.iterator]().next() const nextResponse = await value + if (done) { + this.isUsed = true + } + // If the generator is done and there is no next value, // return the previous generator's value. if (!nextResponse && done) { @@ -269,7 +279,7 @@ export abstract class RequestHandler< request: Request, parsedResult: ParsedResult, response?: Response, - ): RequestHandlerExecutionResult { + ): RequestHandlerExecutionResult { return { handler: this, parsedResult, @@ -278,24 +288,3 @@ export abstract class RequestHandler< } } } - -/** - * Bypass this intercepted request. - * This will make a call to the actual endpoint requested. - */ -export function passthrough(): Response { - // Constructing a "101 Continue" mocked response - // to keep the return type of the resolver consistent. - return new Response(null, { status: 101 }) - - // return { - // status: 101, - // statusText: 'Continue', - // headers: new Headers(), - // body: null, - // // Setting "passthrough" to true will signal the response pipeline - // // to perform this intercepted request as-is. - // passthrough: true, - // once: false, - // } -} diff --git a/src/handlers/RestHandler.test.ts b/src/handlers/RestHandler.test.ts index 04bb5bc50..7d5109e8b 100644 --- a/src/handlers/RestHandler.test.ts +++ b/src/handlers/RestHandler.test.ts @@ -1,132 +1,140 @@ /** * @jest-environment jsdom */ -import { RestHandler, RestRequest, RestContext } from './RestHandler' -import { response } from '../response' -import { context, MockedRequest } from '..' -import { ResponseResolver } from './RequestHandler' +import { + RestHandler, + RestContext, + RestRequestResolverExtras, + RestRequestParsedResult, +} from './RestHandler' +import { HttpResponse, Request } from '..' +import { + RequestHandlerExecutionResult, + ResponseResolver, +} from './RequestHandler' const resolver: ResponseResolver< - RestRequest<{ userId: string }>, - RestContext -> = (req, res, ctx) => { - return res(ctx.json({ userId: req.params.userId })) -} - -const generatorResolver: ResponseResolver< - RestRequest<'pending' | 'complete'>, - RestContext -> = function* (req, res, ctx) { - let count = 0 - while (count < 5) { - count += 1 - yield res(ctx.body('pending')) - } - return res(ctx.body('complete')) + RestContext, + RestRequestResolverExtras<{ userId: string }> +> = ({ params }) => { + return HttpResponse.json({ userId: params.userId }) } describe('info', () => { test('exposes request handler information', () => { const handler = new RestHandler('GET', '/user/:userId', resolver) + expect(handler.info.header).toEqual('GET /user/:userId') expect(handler.info.method).toEqual('GET') expect(handler.info.path).toEqual('/user/:userId') + expect(handler.isUsed).toBe(false) }) }) describe('parse', () => { - test('parses a URL given a matching request', () => { + test('parses a URL given a matching request', async () => { const handler = new RestHandler('GET', '/user/:userId', resolver) - const request = new MockedRequest(new URL('/user/abc-123', location.href)) + const request = new Request(new URL('/user/abc-123', location.href)) - expect(handler.parse(request)).toEqual({ - matches: true, - params: { - userId: 'abc-123', + expect(await handler.parse(request)).toEqual({ + match: { + matches: true, + params: { + userId: 'abc-123', + }, }, + cookies: {}, }) }) - test('parses a URL and ignores the request method', () => { + test('parses a URL and ignores the request method', async () => { const handler = new RestHandler('GET', '/user/:userId', resolver) - const request = new MockedRequest(new URL('/user/def-456', location.href), { + const request = new Request(new URL('/user/def-456', location.href), { method: 'POST', }) - expect(handler.parse(request)).toEqual({ - matches: true, - params: { - userId: 'def-456', + expect(await handler.parse(request)).toEqual({ + match: { + matches: true, + params: { + userId: 'def-456', + }, }, + cookies: {}, }) }) - test('returns negative match result given a non-matching request', () => { + test('returns negative match result given a non-matching request', async () => { const handler = new RestHandler('GET', '/user/:userId', resolver) - const request = new MockedRequest(new URL('/login', location.href)) + const request = new Request(new URL('/login', location.href)) - expect(handler.parse(request)).toEqual({ - matches: false, - params: {}, + expect(await handler.parse(request)).toEqual({ + match: { + matches: false, + params: {}, + }, + cookies: {}, }) }) }) describe('predicate', () => { - test('returns true given a matching request', () => { + test('returns true given a matching request', async () => { const handler = new RestHandler('POST', '/login', resolver) - const request = new MockedRequest(new URL('/login', location.href), { + const request = new Request(new URL('/login', location.href), { method: 'POST', }) - expect(handler.predicate(request, handler.parse(request))).toBe(true) + expect(handler.predicate(request, await handler.parse(request))).toBe(true) }) - test('respects RegExp as the request method', () => { + test('respects RegExp as the request method', async () => { const handler = new RestHandler(/.+/, '/login', resolver) const requests = [ - new MockedRequest(new URL('/login', location.href)), - new MockedRequest(new URL('/login', location.href), { method: 'POST' }), - new MockedRequest(new URL('/login', location.href), { method: 'DELETE' }), + new Request(new URL('/login', location.href)), + new Request(new URL('/login', location.href), { method: 'POST' }), + new Request(new URL('/login', location.href), { method: 'DELETE' }), ] for (const request of requests) { - expect(handler.predicate(request, handler.parse(request))).toBe(true) + expect(handler.predicate(request, await handler.parse(request))).toBe( + true, + ) } }) - test('returns false given a non-matching request', () => { + test('returns false given a non-matching request', async () => { const handler = new RestHandler('POST', '/login', resolver) - const request = new MockedRequest(new URL('/user/abc-123', location.href)) + const request = new Request(new URL('/user/abc-123', location.href)) - expect(handler.predicate(request, handler.parse(request))).toBe(false) + expect(handler.predicate(request, await handler.parse(request))).toBe(false) }) }) describe('test', () => { - test('returns true given a matching request', () => { + test('returns true given a matching request', async () => { const handler = new RestHandler('GET', '/user/:userId', resolver) - const firstTest = handler.test( - new MockedRequest(new URL('/user/abc-123', location.href)), + const firstTest = await handler.test( + new Request(new URL('/user/abc-123', location.href)), ) - const secondTest = handler.test( - new MockedRequest(new URL('/user/def-456', location.href)), + const secondTest = await handler.test( + new Request(new URL('/user/def-456', location.href)), ) expect(firstTest).toBe(true) expect(secondTest).toBe(true) }) - test('returns false given a non-matching request', () => { + test('returns false given a non-matching request', async () => { const handler = new RestHandler('GET', '/user/:userId', resolver) - const firstTest = handler.test( - new MockedRequest(new URL('/login', location.href)), + const firstTest = await handler.test( + new Request(new URL('/login', location.href)), ) - const secondTest = handler.test( - new MockedRequest(new URL('/user/', location.href)), + const secondTest = await handler.test( + new Request(new URL('/user/', location.href)), ) - const thirdTest = handler.test( - new MockedRequest(new URL('/user/abc-123/extra', location.href)), + const thirdTest = await handler.test( + new Request(new URL('/user/abc-123/extra', location.href)), ) expect(firstTest).toBe(false) @@ -138,54 +146,65 @@ describe('test', () => { describe('run', () => { test('returns a mocked response given a matching request', async () => { const handler = new RestHandler('GET', '/user/:userId', resolver) - const request = new MockedRequest(new URL('/user/abc-123', location.href)) + const request = new Request(new URL('/user/abc-123', location.href)) const result = await handler.run(request) - expect(result).toEqual({ + expect(result).toEqual< + RequestHandlerExecutionResult + >({ handler, - request: { - ...request, - params: { - userId: 'abc-123', - }, - }, + request, parsedResult: { - matches: true, - params: { - userId: 'abc-123', + match: { + matches: true, + params: { + userId: 'abc-123', + }, }, + cookies: {}, }, - response: await response(context.json({ userId: 'abc-123' })), + response: expect.objectContaining({ + status: 200, + }), }) + expect(await result?.response?.json()).toEqual({ userId: 'abc-123' }) }) test('returns null given a non-matching request', async () => { const handler = new RestHandler('POST', '/login', resolver) const result = await handler.run( - new MockedRequest(new URL('/users', location.href)), + new Request(new URL('/users', location.href)), ) expect(result).toBeNull() }) - test('returns an empty object as "req.params" given request with no URL parameters', async () => { + test('returns an empty "params" object given request with no URL parameters', async () => { const handler = new RestHandler('GET', '/users', resolver) const result = await handler.run( - new MockedRequest(new URL('/users', location.href)), + new Request(new URL('/users', location.href)), ) - expect(result?.request.params).toEqual({}) + expect(result?.parsedResult?.match?.params).toEqual({}) }) -}) -describe('run with generator', () => { - test('Resolver runs until generator completes', async () => { - const handler = new RestHandler('GET', '/users', generatorResolver) + test('exhauses resolver until its generator completes', async () => { + const handler = new RestHandler('GET', '/users', function* () { + let count = 0 + + while (count < 5) { + count += 1 + yield HttpResponse.text('pending') + } + + return HttpResponse.text('complete') + }) + const run = async () => { const result = await handler.run( - new MockedRequest(new URL('/users', location.href)), + new Request(new URL('/users', location.href)), ) - return result?.response?.body + return result?.response?.text() } expect(await run()).toBe('pending') @@ -195,6 +214,5 @@ describe('run with generator', () => { expect(await run()).toBe('pending') expect(await run()).toBe('complete') expect(await run()).toBe('complete') - expect(handler.shouldSkip).toBe(false) }) }) diff --git a/src/handlers/RestHandler.ts b/src/handlers/RestHandler.ts index dfb8db4a4..ca4d68b44 100644 --- a/src/handlers/RestHandler.ts +++ b/src/handlers/RestHandler.ts @@ -1,12 +1,11 @@ import { body, cookie, json, text, xml } from '../context' -import type { SerializedResponse } from '../setupWorker/glossary' import { ResponseResolutionContext } from '../utils/getResponse' import { devUtils } from '../utils/internal/devUtils' import { isStringEqual } from '../utils/internal/isStringEqual' import { getStatusCodeColor } from '../utils/logging/getStatusCodeColor' import { getTimestamp } from '../utils/logging/getTimestamp' -import { prepareRequest } from '../utils/logging/prepareRequest' -import { prepareResponse } from '../utils/logging/prepareResponse' +import { serializeRequest } from '../utils/logging/serializeRequest' +import { serializeResponse } from '../utils/logging/serializeResponse' import { Match, matchRequestUrl, @@ -161,7 +160,7 @@ export class RestHandler extends RequestHandler< } protected override extendInfo( - request: Request, + _request: Request, parsedResult: RestRequestParsedResult, ) { return { @@ -170,10 +169,10 @@ export class RestHandler extends RequestHandler< } } - override log(request: Request, response: SerializedResponse) { + override async log(request: Request, response: Response) { const publicUrl = getPublicUrlFromRequest(request) - const loggedRequest = prepareRequest(request) - const loggedResponse = prepareResponse(response) + const loggedRequest = await serializeRequest(request) + const loggedResponse = await serializeResponse(response) const statusColor = getStatusCodeColor(response.status) console.groupCollapsed( diff --git a/src/index.ts b/src/index.ts index e17ef7e00..a93dde640 100644 --- a/src/index.ts +++ b/src/index.ts @@ -63,6 +63,7 @@ export { ParsedGraphQLRequest } from './utils/internal/parseGraphQLRequest' export * from './utils/HttpResponse' export * from './delay' export { bypass } from './bypass' +export { passthrough } from './passthrough' export { NetworkError } from './NetworkError' export * from './fetch' diff --git a/src/mockServiceWorker.js b/src/mockServiceWorker.js index 7e32315ca..b51e3b252 100644 --- a/src/mockServiceWorker.js +++ b/src/mockServiceWorker.js @@ -146,19 +146,23 @@ async function handleRequest(event, requestId) { // this message will pend indefinitely. if (client && activeClientIds.has(client.id)) { ;(async function () { - const clonedResponse = response.clone() + const responseClone = response.clone() sendToClient(client, { type: 'RESPONSE', payload: { requestId, - type: clonedResponse.type, - ok: clonedResponse.ok, - status: clonedResponse.status, - statusText: clonedResponse.statusText, - body: - clonedResponse.body === null ? null : await clonedResponse.text(), - headers: Object.fromEntries(clonedResponse.headers.entries()), - redirected: clonedResponse.redirected, + type: responseClone.type, + ok: responseClone.ok, + status: responseClone.status, + statusText: responseClone.statusText, + /** + * @todo Send back the response buffer instead. + * I'm pretty sure we can clone the response and send + * its body as transferrable so we don't have to serialize it. + */ + body: responseClone.body === null ? null : await responseClone.text(), + headers: Object.fromEntries(responseClone.headers.entries()), + redirected: responseClone.redirected, }, }) })() @@ -196,20 +200,20 @@ async function resolveMainClient(event) { async function getResponse(event, client, requestId) { const { request } = event - const clonedRequest = request.clone() + + // Clone the request because it might've been already used + // (i.e. its body has been read and sent to the client). + const requestClone = request.clone() function passthrough() { - // Clone the request because it might've been already used - // (i.e. its body has been read and sent to the client). - const headers = Object.fromEntries(clonedRequest.headers.entries()) + const headers = Object.fromEntries(requestClone.headers.entries()) - // Remove MSW-specific request headers so the bypassed requests - // comply with the server's CORS preflight check. - // Operate with the headers as an object because request "Headers" - // are immutable. - delete headers['x-msw-bypass'] + // Remove internal MSW request header so the passthrough request + // complies with any potential CORS preflight checks on the server. + // Some servers forbid unknown request headers. + delete headers['x-msw-intention'] - return fetch(clonedRequest, { headers }) + return fetch(requestClone, { headers }) } // Bypass mocking when the client is not active. @@ -227,7 +231,8 @@ async function getResponse(event, client, requestId) { // Bypass requests with the explicit bypass header. // Such requests can be issued by "ctx.fetch()". - if (request.headers.get('x-msw-bypass') === 'true') { + const mswIntention = request.headers.get('x-msw-intention') + if (['bypass', 'passthrough'].includes(mswIntention)) { return passthrough() } diff --git a/src/passthrough.test.ts b/src/passthrough.test.ts new file mode 100644 index 000000000..661375f3e --- /dev/null +++ b/src/passthrough.test.ts @@ -0,0 +1,14 @@ +/** + * @jest-environment node + */ +import { Response } from './fetch' +import { passthrough } from './passthrough' + +it('creates a 302 response with the intention header', () => { + const response = passthrough() + + expect(response).toBeInstanceOf(Response) + expect(response.status).toBe(302) + expect(response.statusText).toBe('Passthrough') + expect(response.headers.get('x-msw-intention')).toBe('passthrough') +}) diff --git a/src/passthrough.ts b/src/passthrough.ts new file mode 100644 index 000000000..851a83609 --- /dev/null +++ b/src/passthrough.ts @@ -0,0 +1,20 @@ +import { Response } from './fetch' + +/** + * Instruct Mock Service Worker to perform this request as-is. + * Unlike `bypass()`, this will not trigger an additional request. + * + * @example + * rest.get('/user', () => { + * return passthrough() + * }) + */ +export function passthrough(): Response { + return new Response(null, { + status: 302, + statusText: 'Passthrough', + headers: { + 'x-msw-intention': 'passthrough', + }, + }) +} diff --git a/src/setupWorker/glossary.ts b/src/setupWorker/glossary.ts index 0b99b73ff..8653dd132 100644 --- a/src/setupWorker/glossary.ts +++ b/src/setupWorker/glossary.ts @@ -1,4 +1,3 @@ -import { HeadersObject } from 'headers-polyfill' import { StrictEventEmitter } from 'strict-event-emitter' import { LifeCycleEventEmitter, @@ -7,7 +6,6 @@ import { } from '../sharedOptions' import { ServiceWorkerMessage } from './start/utils/createMessageChannel' import { - DefaultBodyType, RequestHandler, RequestHandlerDefaultInfo, } from '../handlers/RequestHandler' @@ -76,13 +74,17 @@ export type ServiceWorkerOutgoingEventTypes = | 'KEEPALIVE_REQUEST' | 'CLIENT_CLOSED' +export interface StringifiedResponse extends ResponseInit { + body: string | ArrayBuffer | null +} + /** * Map of the events that can be sent to the Service Worker * only as a part of a single `fetch` event handler. */ export interface ServiceWorkerFetchEventMap { - MOCK_RESPONSE(payload: SerializedResponse): void - MOCK_RESPONSE_START(payload: SerializedResponse): void + MOCK_RESPONSE(payload: StringifiedResponse): void + MOCK_RESPONSE_START(payload: StringifiedResponse): void MOCK_NOT_FOUND(): void NETWORK_ERROR(payload: { name: string; message: string }): void @@ -99,7 +101,7 @@ export interface SetupWorkerInternalContext { startOptions?: RequiredDeep worker: ServiceWorker | null registration: ServiceWorkerRegistration | null - requestHandlers: RequestHandler[] + requestHandlers: Array emitter: StrictEventEmitter keepAliveInterval?: number workerChannel: { @@ -191,14 +193,6 @@ export interface StartOptions extends SharedOptions { findWorker?: FindWorker } -export interface SerializedResponse { - status: number - statusText: string - headers: HeadersObject - body: BodyType - delay?: number -} - export type StartReturnType = Promise export type StartHandler = ( options: RequiredDeep, diff --git a/src/setupWorker/start/createFallbackRequestListener.ts b/src/setupWorker/start/createFallbackRequestListener.ts index 4b133062b..3218e9089 100644 --- a/src/setupWorker/start/createFallbackRequestListener.ts +++ b/src/setupWorker/start/createFallbackRequestListener.ts @@ -8,8 +8,6 @@ import { XMLHttpRequestInterceptor } from '@mswjs/interceptors/lib/interceptors/ import { SetupWorkerInternalContext, StartOptions } from '../glossary' import type { RequiredDeep } from '../../typeUtils' import { handleRequest } from '../../utils/handleRequest' -import { serializeResponse } from '../../utils/logging/serializeResponse' -import { createResponseFromIsomorphicResponse } from '../../utils/request/createResponseFromIsomorphicResponse' export function createFallbackRequestListener( context: SetupWorkerInternalContext, @@ -20,9 +18,10 @@ export function createFallbackRequestListener( interceptors: [new FetchInterceptor(), new XMLHttpRequestInterceptor()], }) - interceptor.on('request', async (request) => { + interceptor.on('request', async (request, requestId) => { const response = await handleRequest( request, + requestId, context.requestHandlers, options, context.emitter, @@ -30,7 +29,7 @@ export function createFallbackRequestListener( onMockedResponse(_, { handler, request, parsedRequest }) { if (!options.quiet) { context.emitter.once('response:mocked', (response) => { - handler.log(request, serializeResponse(response), parsedRequest) + handler.log(request, response, parsedRequest) }) } }, @@ -43,12 +42,10 @@ export function createFallbackRequestListener( }) interceptor.on('response', (response, request, requestId) => { - const browserResponse = createResponseFromIsomorphicResponse(response) - if (response.headers.get('x-powered-by') === 'msw') { - context.emitter.emit('response:mocked', browserResponse, requestId) + context.emitter.emit('response:mocked', response, request, requestId) } else { - context.emitter.emit('response:bypass', browserResponse, requestId) + context.emitter.emit('response:bypass', response, request, requestId) } }) diff --git a/src/setupWorker/start/createRequestListener.ts b/src/setupWorker/start/createRequestListener.ts index 0d5fea95c..f91843ff7 100644 --- a/src/setupWorker/start/createRequestListener.ts +++ b/src/setupWorker/start/createRequestListener.ts @@ -12,8 +12,7 @@ import { parseWorkerRequest } from '../../utils/request/parseWorkerRequest' import { handleRequest } from '../../utils/handleRequest' import { RequiredDeep } from '../../typeUtils' import { devUtils } from '../../utils/internal/devUtils' -import { serializeResponse } from '../../utils/logging/serializeResponse' -import { uuidv4 } from '../../utils/internal/uuidv4' +import { toResponseInit } from '../../utils/toResponseInit' export const createRequestListener = ( context: SetupWorkerInternalContext, @@ -27,7 +26,8 @@ export const createRequestListener = ( >, ) => { const messageChannel = new WorkerChannel(event.ports[0]) - const requestId = uuidv4() + + const requestId = message.payload.id const request = parseWorkerRequest(message.payload) try { @@ -50,29 +50,24 @@ export const createRequestListener = ( response, { request, handler, parsedRequest }, ) { - // if (response.body instanceof ReadableStream) { - // throw new Error( - // devUtils.formatMessage( - // 'Failed to construct a mocked response with a "ReadableStream" body: mocked streams are not supported. Follow https://github.com/mswjs/msw/issues/1336 for more details.', - // ), - // ) - // } - - const responseInit = serializeResponse(response) + // Clone the mocked response so its body could be read + // to buffer to be sent to the worker and also in the + // ".log()" method of the request handler. + const responseClone = response.clone() + const responseInit = toResponseInit(response) const responseBuffer = await response.arrayBuffer() // If the mocked response has no body, keep it that way. // Sending an empty "ArrayBuffer" to the worker will cause // the worker constructing "new Response(new ArrayBuffer(0))" // which will throw on responses that must have no body (i.e. 204). - // const responseBody = - // response.body == null ? null : responseBuffer + const responseBody = response.body == null ? null : responseBuffer messageChannel.postMessage( 'MOCK_RESPONSE', { ...responseInit, - body: responseBuffer, + body: responseBody, }, // Transfer response's buffer so it could // be sent over to the worker. @@ -81,7 +76,7 @@ export const createRequestListener = ( if (!options.quiet) { context.emitter.once('response:mocked', () => { - handler.log(request, responseInit, parsedRequest) + handler.log(request, responseClone, parsedRequest) }) } }, diff --git a/src/setupWorker/start/createResponseListener.ts b/src/setupWorker/start/createResponseListener.ts index 6fa37ad89..41eac8c54 100644 --- a/src/setupWorker/start/createResponseListener.ts +++ b/src/setupWorker/start/createResponseListener.ts @@ -28,10 +28,26 @@ export function createResponseListener(context: SetupWorkerInternalContext) { const response = new Response(responseJson.body || null, responseJson) const isMockedResponse = response.headers.get('x-powered-by') === 'msw' + console.log(responseJson) + if (isMockedResponse) { - context.emitter.emit('response:mocked', response, responseJson.requestId) + context.emitter.emit( + 'response:mocked', + response, + /** + * @todo @fixme In this context, we don't know anything about + * the request. + */ + null as any, + responseJson.requestId, + ) } else { - context.emitter.emit('response:bypass', response, responseJson.requestId) + context.emitter.emit( + 'response:bypass', + response, + null as any, + responseJson.requestId, + ) } } } diff --git a/src/setupWorker/start/utils/createMessageChannel.ts b/src/setupWorker/start/utils/createMessageChannel.ts index d7bd1fa50..19eaab58e 100644 --- a/src/setupWorker/start/utils/createMessageChannel.ts +++ b/src/setupWorker/start/utils/createMessageChannel.ts @@ -1,5 +1,5 @@ import { - SerializedResponse, + StringifiedResponse, ServiceWorkerIncomingEventsMap, } from '../../glossary' @@ -12,7 +12,7 @@ export interface ServiceWorkerMessage< } interface WorkerChannelEventsMap { - MOCK_RESPONSE: [data: SerializedResponse, body?: Array] + MOCK_RESPONSE: [data: StringifiedResponse, transferable?: [ArrayBuffer]] NOT_FOUND: [] NETWORK_ERROR: [data: { name: string; message: string }] } diff --git a/src/setupWorker/start/utils/streamResponse.ts b/src/setupWorker/start/utils/streamResponse.ts deleted file mode 100644 index 8f8b46a5a..000000000 --- a/src/setupWorker/start/utils/streamResponse.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { invariant } from 'outvariant' -import { StrictBroadcastChannel } from '../../../utils/internal/StrictBroadcastChannel' -import { - SerializedResponse, - ServiceWorkerBroadcastChannelMessageMap, -} from '../../glossary' -import { WorkerMessageChannel } from './createMessageChannel' - -export async function streamResponse( - operationChannel: StrictBroadcastChannel, - messageChannel: WorkerMessageChannel, - mockedResponse: SerializedResponse, -): Promise { - const response = new Response(mockedResponse.body, mockedResponse) - - /** - * Delete the ReadableStream response body - * so it doesn't get sent via the message channel. - * @note Otherwise, an error: cannot clone a ReadableStream if - * it hasn't been transformed yet. - */ - delete mockedResponse.body - - // Signal the mock response stream start event on the global - // message channel because the worker expects an event in response - // to the sent "REQUEST" global event. - messageChannel.send({ - type: 'MOCK_RESPONSE_START', - payload: mockedResponse, - }) - - invariant(response.body, 'Failed to stream mocked response with no body') - - // Read the mocked response body as stream - // and pipe it to the worker. - const reader = response.body.getReader() - - while (true) { - const { done, value } = await reader.read() - - if (!done) { - operationChannel.postMessage({ - type: 'MOCK_RESPONSE_CHUNK', - payload: value, - }) - continue - } - - operationChannel.postMessage({ - type: 'MOCK_RESPONSE_END', - }) - operationChannel.close() - reader.releaseLock() - break - } -} diff --git a/src/utils/getResponse.ts b/src/utils/getResponse.ts index a91074866..ebf31dd83 100644 --- a/src/utils/getResponse.ts +++ b/src/utils/getResponse.ts @@ -43,7 +43,7 @@ export const getResponse = async >( } const result = await relevantHandlers.reduce< - Promise + Promise | null> >(async (executionResult, handler) => { const previousResults = await executionResult diff --git a/src/utils/handleRequest.test.ts b/src/utils/handleRequest.test.ts index 8131107db..ab003e775 100644 --- a/src/utils/handleRequest.test.ts +++ b/src/utils/handleRequest.test.ts @@ -5,14 +5,16 @@ import { SharedOptions } from '../sharedOptions' import { RequestHandler } from '../handlers/RequestHandler' import { rest } from '../rest' import { handleRequest, HandleRequestOptions } from './handleRequest' -import { response } from '../response' -import { context, MockedRequest } from '..' import { RequiredDeep } from '../typeUtils' +import { uuidv4 } from './internal/uuidv4' +import { Request } from '../fetch' +import { HttpResponse } from './HttpResponse' +import { passthrough } from '../passthrough' const options: RequiredDeep = { onUnhandledRequest: jest.fn(), } -const callbacks: Partial, any>> = { +const callbacks: Partial> = { onPassthroughResponse: jest.fn(), onMockedResponse: jest.fn(), } @@ -46,18 +48,20 @@ afterEach(() => { jest.resetAllMocks() }) -test('returns undefined for a request with the "x-msw-bypass" header equal to "true"', async () => { +test('returns undefined for a request with the "x-msw-intention" header equal to "bypass"', async () => { const { emitter, events } = setup() - const request = new MockedRequest(new URL('http://localhost/user'), { + const requestId = uuidv4() + const request = new Request(new URL('http://localhost/user'), { headers: new Headers({ - 'x-msw-bypass': 'true', + 'x-msw-intention': 'bypass', }), }) const handlers: Array = [] const result = await handleRequest( request, + requestId, handlers, options, emitter, @@ -66,30 +70,31 @@ test('returns undefined for a request with the "x-msw-bypass" header equal to "t expect(result).toBeUndefined() expect(events).toEqual([ - ['request:start', request], - ['request:end', request], + ['request:start', request, requestId], + ['request:end', request, requestId], ]) expect(options.onUnhandledRequest).not.toHaveBeenCalled() expect(callbacks.onPassthroughResponse).toHaveBeenNthCalledWith(1, request) expect(callbacks.onMockedResponse).not.toHaveBeenCalled() }) -test('does not bypass a request with "x-msw-bypass" header set to arbitrary value', async () => { +test('does not bypass a request with "x-msw-intention" header set to arbitrary value', async () => { const { emitter } = setup() - const request = new MockedRequest(new URL('http://localhost/user'), { + const request = new Request(new URL('http://localhost/user'), { headers: new Headers({ - 'x-msw-bypass': 'anything', + 'x-msw-intention': 'invalid', }), }) const handlers: Array = [ - rest.get('/user', (req, res, ctx) => { - return res(ctx.text('hello world')) + rest.get('/user', () => { + return HttpResponse.text('hello world') }), ] const result = await handleRequest( request, + uuidv4(), handlers, options, emitter, @@ -104,11 +109,13 @@ test('does not bypass a request with "x-msw-bypass" header set to arbitrary valu test('reports request as unhandled when it has no matching request handlers', async () => { const { emitter, events } = setup() - const request = new MockedRequest(new URL('http://localhost/user')) + const requestId = uuidv4() + const request = new Request(new URL('http://localhost/user')) const handlers: Array = [] const result = await handleRequest( request, + requestId, handlers, options, emitter, @@ -117,9 +124,9 @@ test('reports request as unhandled when it has no matching request handlers', as expect(result).toBeUndefined() expect(events).toEqual([ - ['request:start', request], - ['request:unhandled', request], - ['request:end', request], + ['request:start', request, requestId], + ['request:unhandled', request, requestId], + ['request:end', request, requestId], ]) expect(options.onUnhandledRequest).toHaveBeenNthCalledWith(1, request, { warning: expect.any(Function), @@ -132,7 +139,8 @@ test('reports request as unhandled when it has no matching request handlers', as test('returns undefined and warns on a request handler that returns no response', async () => { const { emitter, events } = setup() - const request = new MockedRequest(new URL('http://localhost/user')) + const requestId = uuidv4() + const request = new Request(new URL('http://localhost/user')) const handlers: Array = [ rest.get('/user', () => { // Intentionally blank response resolver. @@ -142,6 +150,7 @@ test('returns undefined and warns on a request handler that returns no response' const result = await handleRequest( request, + requestId, handlers, options, emitter, @@ -150,8 +159,8 @@ test('returns undefined and warns on a request handler that returns no response' expect(result).toBeUndefined() expect(events).toEqual([ - ['request:start', request], - ['request:end', request], + ['request:start', request, requestId], + ['request:end', request, requestId], ]) expect(options.onUnhandledRequest).not.toHaveBeenCalled() expect(callbacks.onPassthroughResponse).toHaveBeenNthCalledWith(1, request) @@ -170,8 +179,9 @@ test('returns undefined and warns on a request handler that returns no response' test('returns the mocked response for a request with a matching request handler', async () => { const { emitter, events } = setup() - const request = new MockedRequest(new URL('http://localhost/user')) - const mockedResponse = await response(context.json({ firstName: 'John' })) + const requestId = uuidv4() + const request = new Request(new URL('http://localhost/user')) + const mockedResponse = HttpResponse.json({ firstName: 'John' }) const handlers: Array = [ rest.get('/user', () => { return mockedResponse @@ -180,12 +190,16 @@ test('returns the mocked response for a request with a matching request handler' const lookupResult = { handler: handlers[0], response: mockedResponse, - publicRequest: { ...request, params: {} }, - parsedRequest: { matches: true, params: {} }, + request, + parsedRequest: { + match: { matches: true, params: {} }, + cookies: {}, + }, } const result = await handleRequest( request, + requestId, handlers, options, emitter, @@ -194,9 +208,9 @@ test('returns the mocked response for a request with a matching request handler' expect(result).toEqual(mockedResponse) expect(events).toEqual([ - ['request:start', request], - ['request:match', request], - ['request:end', request], + ['request:start', request, requestId], + ['request:match', request, requestId], + ['request:end', request, requestId], ]) expect(callbacks.onPassthroughResponse).not.toHaveBeenCalled() expect(callbacks.onMockedResponse).toHaveBeenNthCalledWith( @@ -209,8 +223,9 @@ test('returns the mocked response for a request with a matching request handler' test('returns a transformed response if the "transformResponse" option is provided', async () => { const { emitter, events } = setup() - const request = new MockedRequest(new URL('http://localhost/user')) - const mockedResponse = await response(context.json({ firstName: 'John' })) + const requestId = uuidv4() + const request = new Request(new URL('http://localhost/user')) + const mockedResponse = HttpResponse.json({ firstName: 'John' }) const handlers: Array = [ rest.get('/user', () => { return mockedResponse @@ -223,20 +238,30 @@ test('returns a transformed response if the "transformResponse" option is provid const lookupResult = { handler: handlers[0], response: mockedResponse, - publicRequest: { ...request, params: {} }, - parsedRequest: { matches: true, params: {} }, + request, + parsedRequest: { + match: { matches: true, params: {} }, + cookies: {}, + }, } - const result = await handleRequest(request, handlers, options, emitter, { - ...callbacks, - transformResponse, - }) + const result = await handleRequest( + request, + requestId, + handlers, + options, + emitter, + { + ...callbacks, + transformResponse, + }, + ) expect(result).toEqual(finalResponse) expect(events).toEqual([ - ['request:start', request], - ['request:match', request], - ['request:end', request], + ['request:start', request, requestId], + ['request:match', request, requestId], + ['request:end', request, requestId], ]) expect(callbacks.onPassthroughResponse).not.toHaveBeenCalled() expect(transformResponse).toHaveBeenNthCalledWith(1, mockedResponse) @@ -250,15 +275,17 @@ test('returns a transformed response if the "transformResponse" option is provid it('returns undefined without warning on a passthrough request', async () => { const { emitter, events } = setup() - const request = new MockedRequest(new URL('http://localhost/user')) + const requestId = uuidv4() + const request = new Request(new URL('http://localhost/user')) const handlers: Array = [ - rest.get('/user', (req) => { - return req.passthrough() + rest.get('/user', () => { + return passthrough() }), ] const result = await handleRequest( request, + requestId, handlers, options, emitter, @@ -267,8 +294,8 @@ it('returns undefined without warning on a passthrough request', async () => { expect(result).toBeUndefined() expect(events).toEqual([ - ['request:start', request], - ['request:end', request], + ['request:start', request, requestId], + ['request:end', request, requestId], ]) expect(options.onUnhandledRequest).not.toHaveBeenCalled() expect(callbacks.onPassthroughResponse).toHaveBeenNthCalledWith(1, request) diff --git a/src/utils/handleRequest.ts b/src/utils/handleRequest.ts index 57430f738..ab551107f 100644 --- a/src/utils/handleRequest.ts +++ b/src/utils/handleRequest.ts @@ -48,7 +48,7 @@ export async function handleRequest( emitter.emit('request:start', request, requestId) // Perform bypassed requests (i.e. issued via "ctx.fetch") as-is. - if (request.headers.get('x-msw-bypass') === 'true') { + if (request.headers.get('x-msw-intention') === 'bypass') { emitter.emit('request:end', request, requestId) handleRequestOptions?.onPassthroughResponse?.(request) return @@ -74,7 +74,7 @@ export async function handleRequest( // When there's no handler for the request, consider it unhandled. // Allow the developer to react to such cases. if (!handler) { - onUnhandledRequest(request, handlers, options.onUnhandledRequest) + await onUnhandledRequest(request, handlers, options.onUnhandledRequest) emitter.emit('request:unhandled', request, requestId) emitter.emit('request:end', request, requestId) handleRequestOptions?.onPassthroughResponse?.(request) @@ -103,13 +103,16 @@ Expected response resolver to return a mocked response Object, but got %s. The o // When the developer explicitly returned "req.passthrough()" do not warn them. // Perform the request as-is. - if (response.status === 101) { + if ( + response.status === 302 && + response.headers.get('x-msw-intention') === 'passthrough' + ) { emitter.emit('request:end', request, requestId) handleRequestOptions?.onPassthroughResponse?.(request) return } - response.headers.set('X-Powered-By', 'msw') + response.headers.set('x-powered-by', 'msw') // Store all the received response cookies in the virtual cookie store. readResponseCookies(request, response) diff --git a/src/utils/internal/parseGraphQLRequest.test.ts b/src/utils/internal/parseGraphQLRequest.test.ts index 58e312e60..0ddab8026 100644 --- a/src/utils/internal/parseGraphQLRequest.test.ts +++ b/src/utils/internal/parseGraphQLRequest.test.ts @@ -2,85 +2,87 @@ * @jest-environment jsdom */ import { encodeBuffer } from '@mswjs/interceptors' +import { OperationTypeNode } from 'graphql' import { Headers } from 'headers-polyfill' -import { MockedRequest } from '../request/MockedRequest' -import { parseGraphQLRequest } from './parseGraphQLRequest' +import { Request } from '../../fetch' +import { + ParsedGraphQLRequest, + parseGraphQLRequest, +} from './parseGraphQLRequest' -test('returns true given a GraphQL-compatible request', () => { - const getRequest = new MockedRequest( +test('returns true given a GraphQL-compatible request', async () => { + const getRequest = new Request( new URL( 'http://localhost:8080/graphql?query=mutation Login { user { id } }', ), ) - expect(parseGraphQLRequest(getRequest)).toEqual({ - operationType: 'mutation', + expect(await parseGraphQLRequest(getRequest)).toEqual< + ParsedGraphQLRequest + >({ + operationType: OperationTypeNode.MUTATION, operationName: 'Login', + query: `mutation Login { user { id } }`, + variables: undefined, }) - const postRequest = new MockedRequest( - new URL('http://localhost:8080/graphql'), - { - method: 'POST', - headers: new Headers({ 'Content-Type': 'application/json' }), - body: encodeBuffer( - JSON.stringify({ - query: `query GetUser { user { firstName } }`, - }), - ), - }, - ) + const postRequest = new Request(new URL('http://localhost:8080/graphql'), { + method: 'POST', + headers: new Headers({ 'Content-Type': 'application/json' }), + body: encodeBuffer( + JSON.stringify({ + query: `query GetUser { user { firstName } }`, + }), + ), + }) - expect(parseGraphQLRequest(postRequest)).toEqual({ - operationType: 'query', + expect(await parseGraphQLRequest(postRequest)).toEqual< + ParsedGraphQLRequest + >({ + operationType: OperationTypeNode.QUERY, operationName: 'GetUser', + query: `query GetUser { user { firstName } }`, + variables: undefined, }) }) -test('throws an exception given an invalid GraphQL request', () => { - const getRequest = new MockedRequest( +test('throws an exception given an invalid GraphQL request', async () => { + const getRequest = new Request( new URL('http://localhost:8080/graphql?query=mutation Login() { user { {}'), ) - expect(() => parseGraphQLRequest(getRequest)).toThrowError( + + await expect(parseGraphQLRequest(getRequest)).rejects.toThrowError( '[MSW] Failed to intercept a GraphQL request to "GET http://localhost:8080/graphql": cannot parse query. See the error message from the parser below.', ) - const postRequest = new MockedRequest( - new URL('http://localhost:8080/graphql'), - { - method: 'POST', - headers: new Headers({ 'Content-Type': 'application/json' }), - body: encodeBuffer( - JSON.stringify({ - query: `query GetUser() { user {{}`, - }), - ), - }, - ) - expect(() => parseGraphQLRequest(postRequest)).toThrowError( + const postRequest = new Request(new URL('http://localhost:8080/graphql'), { + method: 'POST', + headers: new Headers({ 'Content-Type': 'application/json' }), + body: encodeBuffer( + JSON.stringify({ + query: `query GetUser() { user {{}`, + }), + ), + }) + + await expect(parseGraphQLRequest(postRequest)).rejects.toThrowError( '[MSW] Failed to intercept a GraphQL request to "POST http://localhost:8080/graphql": cannot parse query. See the error message from the parser below.\n\nSyntax Error: Expected "$", found ")".', ) }) -test('returns false given a GraphQL-incompatible request', () => { - const getRequest = new MockedRequest( - new URL('http://localhost:8080/graphql'), - { - headers: new Headers({ 'Content-Type': 'application/json' }), - }, - ) - expect(parseGraphQLRequest(getRequest)).toBeUndefined() +test('returns false given a GraphQL-incompatible request', async () => { + const getRequest = new Request(new URL('http://localhost:8080/graphql'), { + headers: new Headers({ 'Content-Type': 'application/json' }), + }) + expect(await parseGraphQLRequest(getRequest)).toBeUndefined() - const postRequest = new MockedRequest( - new URL('http://localhost:8080/graphql'), - { - method: 'POST', - headers: new Headers({ 'Content-Type': 'application/json' }), - body: encodeBuffer( - JSON.stringify({ - queryUser: true, - }), - ), - }, - ) - expect(parseGraphQLRequest(postRequest)).toBeUndefined() + const postRequest = new Request(new URL('http://localhost:8080/graphql'), { + method: 'POST', + headers: new Headers({ 'Content-Type': 'application/json' }), + body: encodeBuffer( + JSON.stringify({ + queryUser: true, + }), + ), + }) + expect(await parseGraphQLRequest(postRequest)).toBeUndefined() }) diff --git a/src/utils/internal/requestHandlerUtils.ts b/src/utils/internal/requestHandlerUtils.ts index 10d18952d..2b50fa29f 100644 --- a/src/utils/internal/requestHandlerUtils.ts +++ b/src/utils/internal/requestHandlerUtils.ts @@ -1,21 +1,21 @@ import { RequestHandler } from '../../handlers/RequestHandler' export function use( - currentHandlers: RequestHandler[], - ...handlers: RequestHandler[] + currentHandlers: Array, + ...handlers: Array ): void { currentHandlers.unshift(...handlers) } -export function restoreHandlers(handlers: RequestHandler[]): void { +export function restoreHandlers(handlers: Array): void { handlers.forEach((handler) => { - handler.markAsSkipped(false) + handler.isUsed = false }) } export function resetHandlers( - initialHandlers: RequestHandler[], - ...nextHandlers: RequestHandler[] + initialHandlers: Array, + ...nextHandlers: Array ) { return nextHandlers.length > 0 ? [...nextHandlers] : [...initialHandlers] } diff --git a/src/utils/internal/uuidv4.ts b/src/utils/internal/uuidv4.ts index 8de04232e..5daf9d0cc 100644 --- a/src/utils/internal/uuidv4.ts +++ b/src/utils/internal/uuidv4.ts @@ -1,7 +1,3 @@ -export function uuidv4() { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { - const r = (Math.random() * 16) | 0 - const v = c == 'x' ? r : (r & 0x3) | 0x8 - return v.toString(16) - }) +export function uuidv4(): string { + return Math.random().toString(16).slice(2) } diff --git a/src/utils/logging/prepareRequest.test.ts b/src/utils/logging/prepareRequest.test.ts deleted file mode 100644 index 1c858ebfc..000000000 --- a/src/utils/logging/prepareRequest.test.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { encodeBuffer } from '@mswjs/interceptors' -import { Headers } from 'headers-polyfill' -import { MockedRequest } from '../request/MockedRequest' -import { prepareRequest } from './prepareRequest' - -test('converts request headers into an object', () => { - const request = prepareRequest( - new MockedRequest(new URL('http://test.mswjs.io/user'), { - headers: new Headers({ - 'Content-Type': 'text/plain', - 'X-Header': 'secret', - }), - body: encodeBuffer('text-body'), - }), - ) - - expect(request).toEqual( - expect.objectContaining({ - url: new URL('http://test.mswjs.io/user'), - // Converts `Headers` instance into a plain object. - headers: { - 'content-type': 'text/plain', - 'x-header': 'secret', - }, - body: 'text-body', - }), - ) -}) diff --git a/src/utils/logging/prepareResponse.test.ts b/src/utils/logging/prepareResponse.test.ts deleted file mode 100644 index 7fc3e156b..000000000 --- a/src/utils/logging/prepareResponse.test.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { prepareResponse } from './prepareResponse' - -test('parses a JSON response body given a "Content-Type:*/json" header', () => { - const res = prepareResponse({ - status: 200, - statusText: 'OK', - headers: { - 'Content-Type': 'application/json', - }, - body: `{"property":2}`, - }) - - // Preserves all the properties - expect(res.status).toEqual(200) - expect(res.statusText).toEqual('OK') - expect(res.headers).toEqual({ 'Content-Type': 'application/json' }) - - // Parses a JSON response body - expect(res.body).toEqual({ property: 2 }) -}) - -test('returns a stringified valid JSON body given a non-JSON "Content-Type" header', () => { - const res = prepareResponse({ - status: 200, - statusText: 'OK', - headers: {}, - body: `{"property":2}`, - }) - - expect(res.status).toEqual(200) - expect(res.statusText).toEqual('OK') - expect(res.headers).toEqual({}) - - // Returns a non-JSON response body as-is - expect(res.body).toEqual(`{"property":2}`) -}) - -test('returns a non-JSON response body as-is', () => { - const res = prepareResponse({ - status: 200, - statusText: 'OK', - headers: {}, - body: `text-body`, - }) - - expect(res.status).toEqual(200) - expect(res.statusText).toEqual('OK') - expect(res.headers).toEqual({}) - - // Returns a non-JSON response body as-is - expect(res.body).toEqual('text-body') -}) diff --git a/src/utils/logging/prepareResponse.ts b/src/utils/logging/prepareResponse.ts deleted file mode 100644 index 6f09bce88..000000000 --- a/src/utils/logging/prepareResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { objectToHeaders } from 'headers-polyfill' -import { SerializedResponse } from '../../setupWorker/glossary' -import { parseBody } from '../request/parseBody' - -/** - * Formats a mocked response for introspection in the browser's console. - */ -export function prepareResponse(res: SerializedResponse) { - const responseHeaders = objectToHeaders(res.headers) - - return { - ...res, - // Parse a response JSON body for preview in the logs - body: parseBody(res.body, responseHeaders), - } -} diff --git a/src/utils/logging/serializeRequest.test.ts b/src/utils/logging/serializeRequest.test.ts new file mode 100644 index 000000000..e11d71897 --- /dev/null +++ b/src/utils/logging/serializeRequest.test.ts @@ -0,0 +1,25 @@ +import { encodeBuffer } from '@mswjs/interceptors' +import { Headers } from 'headers-polyfill' +import { Request } from '../../fetch' +import { serializeRequest } from './serializeRequest' + +test('serializes given Request instance into a plain object', async () => { + const request = await serializeRequest( + new Request(new URL('http://test.mswjs.io/user'), { + method: 'POST', + headers: new Headers({ + 'Content-Type': 'text/plain', + 'X-Header': 'secret', + }), + body: encodeBuffer('text-body'), + }), + ) + + expect(request.method).toBe('POST') + expect(request.url.href).toBe('http://test.mswjs.io/user') + expect(request.headers).toEqual({ + 'content-type': 'text/plain', + 'x-header': 'secret', + }) + expect(request.body).toBe('text-body') +}) diff --git a/src/utils/logging/prepareRequest.ts b/src/utils/logging/serializeRequest.ts similarity index 57% rename from src/utils/logging/prepareRequest.ts rename to src/utils/logging/serializeRequest.ts index 0c6ed7e41..61b0e00f1 100644 --- a/src/utils/logging/prepareRequest.ts +++ b/src/utils/logging/serializeRequest.ts @@ -1,23 +1,25 @@ import { type HeadersObject, headersToObject } from 'headers-polyfill' -import { type DefaultBodyType } from '../../handlers/RequestHandler' export interface LoggedRequest { - id: string url: URL method: string headers: HeadersObject - body: DefaultBodyType + body: string } /** * Formats a mocked request for introspection in browser's console. */ -export function prepareRequest(request: Request): LoggedRequest { +export async function serializeRequest( + request: Request, +): Promise { + const requestClone = request.clone() + const requestText = await requestClone.text() + return { - ...request, - id: '', - headers: headersToObject(request.headers), url: new URL(request.url), - body: request.body, + method: request.method, + headers: headersToObject(request.headers), + body: requestText, } } diff --git a/src/utils/logging/serializeResponse.test.ts b/src/utils/logging/serializeResponse.test.ts new file mode 100644 index 000000000..229dcc417 --- /dev/null +++ b/src/utils/logging/serializeResponse.test.ts @@ -0,0 +1,78 @@ +/** + * @jest-environment node + */ +import { encodeBuffer } from '@mswjs/interceptors' +import { Blob, FormData, Response } from '../../fetch' +import { serializeResponse } from './serializeResponse' + +it('serializes response without body', async () => { + const result = await serializeResponse(new Response(null)) + + expect(result.status).toBe(200) + expect(result.statusText).toBe('') + expect(result.headers).toEqual({}) + expect(result.body).toBe('') +}) + +it('serializes a plain text response', async () => { + const result = await serializeResponse( + new Response('hello world', { + status: 201, + statusText: 'Created', + headers: { + 'Content-Type': 'text/plain', + }, + }), + ) + + expect(result.status).toBe(201) + expect(result.statusText).toBe('Created') + expect(result.headers).toEqual({ + 'content-type': 'text/plain', + }) + expect(result.body).toBe('hello world') +}) + +it('serializes a JSON response', async () => { + const response = new Response(JSON.stringify({ users: ['John'] }), { + headers: { + 'Content-Type': 'application/json', + }, + }) + const result = await serializeResponse(response) + + expect(result.headers).toEqual({ + 'content-type': 'application/json', + }) + expect(result.body).toBe(JSON.stringify({ users: ['John'] })) +}) + +it('serializes a ArrayBuffer response', async () => { + const data = encodeBuffer('hello world') + const response = new Response(data) + const result = await serializeResponse(response) + + expect(result.body).toBe('hello world') +}) + +it('serializes a Blob response', async () => { + const response = new Response(new Blob(['hello world'])) + const result = await serializeResponse(response) + + expect(result.body).toBe('hello world') +}) + +it('serializes a FormData response', async () => { + const data = new FormData() + data.set('firstName', 'Alice') + data.set('age', '32') + const response = new Response(data) + const result = await serializeResponse(response) + + expect(result.body).toContain( + `Content-Disposition: form-data; name="firstName"\r\n\r\nAlice`, + ) + expect(result.body).toContain( + `Content-Disposition: form-data; name="age"\r\n\r\n32`, + ) +}) diff --git a/src/utils/logging/serializeResponse.ts b/src/utils/logging/serializeResponse.ts index 289e4eb8a..9e9caf9cb 100644 --- a/src/utils/logging/serializeResponse.ts +++ b/src/utils/logging/serializeResponse.ts @@ -1,11 +1,22 @@ -import { flattenHeadersObject, headersToObject } from 'headers-polyfill' -import type { SerializedResponse } from '../../setupWorker/glossary' +import { type HeadersObject, headersToObject } from 'headers-polyfill' + +export interface SerializedResponse { + status: number + statusText: string + headers: HeadersObject + body: string +} + +export async function serializeResponse( + response: Response, +): Promise { + const responseClone = response.clone() + const responseText = await responseClone.text() -export function serializeResponse(source: Response): SerializedResponse { return { - status: source.status, - statusText: source.statusText, - headers: flattenHeadersObject(headersToObject(source.headers)), - body: source.body, + status: responseClone.status, + statusText: responseClone.statusText, + headers: headersToObject(responseClone.headers), + body: responseText, } } diff --git a/src/utils/request/createResponseFromIsomorphicResponse.ts b/src/utils/request/createResponseFromIsomorphicResponse.ts deleted file mode 100644 index f314e8e15..000000000 --- a/src/utils/request/createResponseFromIsomorphicResponse.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { encodeBuffer, IsomorphicResponse } from '@mswjs/interceptors' - -const noop = () => { - throw new Error('Not implemented') -} - -export function createResponseFromIsomorphicResponse( - response: IsomorphicResponse, -): Response { - return { - ...response, - ok: response.status >= 200 && response.status < 300, - url: '', - type: 'default', - status: response.status, - statusText: response.statusText, - headers: response.headers, - body: new ReadableStream(), - redirected: response.headers.get('Location') != null, - async text() { - return response.body || '' - }, - async json() { - return JSON.parse(response.body || '') - }, - async arrayBuffer() { - return encodeBuffer(response.body || '') - }, - bodyUsed: false, - formData: noop, - blob: noop, - clone: noop, - } -} diff --git a/src/utils/request/getPublicUrlFromRequest.test.ts b/src/utils/request/getPublicUrlFromRequest.test.ts index 16fdbb3a7..450445294 100644 --- a/src/utils/request/getPublicUrlFromRequest.test.ts +++ b/src/utils/request/getPublicUrlFromRequest.test.ts @@ -1,19 +1,27 @@ /** * @jest-environment jsdom */ +import { Request } from '../../fetch' import { getPublicUrlFromRequest } from './getPublicUrlFromRequest' -import { MockedRequest } from './MockedRequest' -test('returns an absolute URL string given its origin differs from the referrer', () => { - const request = new MockedRequest(new URL('https://test.mswjs.io/path'), { - referrer: 'http://localhost', - }) - expect(getPublicUrlFromRequest(request)).toBe('https://test.mswjs.io/path') +test('returns an absolute request URL withouth search params', () => { + expect( + getPublicUrlFromRequest(new Request(new URL('https://test.mswjs.io/path'))), + ).toBe('https://test.mswjs.io/path') + + expect( + getPublicUrlFromRequest(new Request(new URL('http://localhost/path'))), + ).toBe('/path') + + expect( + getPublicUrlFromRequest( + new Request(new URL('http://localhost/path?foo=bar')), + ), + ).toBe('/path') }) -test('returns a relative URL string given its origin matches the referrer', () => { - const request = new MockedRequest(new URL('http://localhost/path'), { - referrer: 'http://localhost', - }) - expect(getPublicUrlFromRequest(request)).toBe('/path') +it('returns a relative URL given the request to the same origin', () => { + expect(getPublicUrlFromRequest(new Request('http://localhost/user'))).toBe( + '/user', + ) }) diff --git a/src/utils/request/getPublicUrlFromRequest.ts b/src/utils/request/getPublicUrlFromRequest.ts index 8c0f05b43..63bae1014 100644 --- a/src/utils/request/getPublicUrlFromRequest.ts +++ b/src/utils/request/getPublicUrlFromRequest.ts @@ -3,11 +3,13 @@ * Otherwise returns an absolute URL. */ export function getPublicUrlFromRequest(request: Request): string { - const url = new URL(request.url) - - if (typeof origin === 'undefined') { - return url.href + if (typeof location === 'undefined') { + return request.url } - return url.origin === origin ? url.pathname : url.href + const url = new URL(request.url) + + return url.origin === location.origin + ? url.pathname + : url.origin + url.pathname } diff --git a/src/utils/request/getRequestCookies.node.test.ts b/src/utils/request/getRequestCookies.node.test.ts index 185af3264..d2500d5ad 100644 --- a/src/utils/request/getRequestCookies.node.test.ts +++ b/src/utils/request/getRequestCookies.node.test.ts @@ -1,8 +1,8 @@ /** * @jest-environment node */ +import { Request } from '../../fetch' import { getRequestCookies } from './getRequestCookies' -import { MockedRequest } from './MockedRequest' const prevLocation = global.location @@ -21,7 +21,7 @@ afterAll(() => { test('returns empty object when in a node environment with polyfilled location object', () => { const cookies = getRequestCookies( - new MockedRequest(new URL('/user', location.origin), { + new Request(new URL('/user', location.href), { credentials: 'include', }), ) diff --git a/src/utils/request/getRequestCookies.test.ts b/src/utils/request/getRequestCookies.test.ts index 42ee3676f..f43e958ff 100644 --- a/src/utils/request/getRequestCookies.test.ts +++ b/src/utils/request/getRequestCookies.test.ts @@ -3,7 +3,7 @@ */ import { getRequestCookies } from './getRequestCookies' import { clearCookies } from '../../../test/support/utils' -import { MockedRequest } from './MockedRequest' +import { Request } from '../../fetch' beforeAll(() => { // Emulate some `document.cookie` value. @@ -17,7 +17,7 @@ afterAll(() => { test('returns all document cookies given "include" credentials', () => { const cookies = getRequestCookies( - new MockedRequest(new URL('/user', location.origin), { + new Request(new URL('/user', location.origin), { credentials: 'include', }), ) @@ -30,7 +30,7 @@ test('returns all document cookies given "include" credentials', () => { test('returns all document cookies given "same-origin" credentials and the same request origin', () => { const cookies = getRequestCookies( - new MockedRequest(new URL('/user', location.origin), { + new Request(new URL('/user', location.origin), { credentials: 'same-origin', }), ) @@ -43,7 +43,7 @@ test('returns all document cookies given "same-origin" credentials and the same test('returns an empty object given "same-origin" credentials and a different request origin', () => { const cookies = getRequestCookies( - new MockedRequest(new URL('https://test.mswjs.io/user'), { + new Request(new URL('https://test.mswjs.io/user'), { credentials: 'same-origin', }), ) @@ -53,7 +53,7 @@ test('returns an empty object given "same-origin" credentials and a different re test('returns an empty object given "omit" credentials', () => { const cookies = getRequestCookies( - new MockedRequest(new URL('/user', location.origin), { + new Request(new URL('/user', location.origin), { credentials: 'omit', }), ) diff --git a/src/utils/request/onUnhandledRequest.test.ts b/src/utils/request/onUnhandledRequest.test.ts index bfacfb190..4dfd7b4b6 100644 --- a/src/utils/request/onUnhandledRequest.test.ts +++ b/src/utils/request/onUnhandledRequest.test.ts @@ -4,7 +4,7 @@ import { } from './onUnhandledRequest' import { RestHandler, RESTMethods } from '../../handlers/RestHandler' import { ResponseResolver } from '../../handlers/RequestHandler' -import { MockedRequest } from './MockedRequest' +import { Request } from '../../fetch' const resolver: ResponseResolver = () => void 0 @@ -12,7 +12,7 @@ const fixtures = { warningWithoutSuggestions: `\ [MSW] Warning: captured a request without a matching request handler: - • GET http://localhost/api + • GET /api If you still wish to intercept this unhandled request, please create a request handler for it. Read more: https://mswjs.io/docs/getting-started/mocks`, @@ -20,7 +20,7 @@ Read more: https://mswjs.io/docs/getting-started/mocks`, errorWithoutSuggestions: `\ [MSW] Error: captured a request without a matching request handler: - • GET http://localhost/api + • GET /api If you still wish to intercept this unhandled request, please create a request handler for it. Read more: https://mswjs.io/docs/getting-started/mocks`, @@ -28,7 +28,7 @@ Read more: https://mswjs.io/docs/getting-started/mocks`, warningWithSuggestions: (suggestions: string) => `\ [MSW] Warning: captured a request without a matching request handler: - • GET http://localhost/api + • GET /api Did you mean to request one of the following resources instead? @@ -51,9 +51,9 @@ afterAll(() => { jest.restoreAllMocks() }) -test('supports the "bypass" request strategy', () => { - onUnhandledRequest( - new MockedRequest(new URL('http://localhost/api')), +test('supports the "bypass" request strategy', async () => { + await onUnhandledRequest( + new Request(new URL('http://localhost/api')), [], 'bypass', ) @@ -62,9 +62,9 @@ test('supports the "bypass" request strategy', () => { expect(console.error).not.toHaveBeenCalled() }) -test('supports the "warn" request strategy', () => { - onUnhandledRequest( - new MockedRequest(new URL('http://localhost/api')), +test('supports the "warn" request strategy', async () => { + await onUnhandledRequest( + new Request(new URL('http://localhost/api')), [], 'warn', ) @@ -72,28 +72,28 @@ test('supports the "warn" request strategy', () => { expect(console.warn).toHaveBeenCalledWith(fixtures.warningWithoutSuggestions) }) -test('supports the "error" request strategy', () => { - expect(() => +test('supports the "error" request strategy', async () => { + await expect( onUnhandledRequest( - new MockedRequest(new URL('http://localhost/api')), + new Request(new URL('http://localhost/api')), [], 'error', ), - ).toThrow( + ).rejects.toThrow( '[MSW] Cannot bypass a request when using the "error" strategy for the "onUnhandledRequest" option.', ) expect(console.error).toHaveBeenCalledWith(fixtures.errorWithoutSuggestions) }) -test('supports a custom callback function', () => { +test('supports a custom callback function', async () => { const callback = jest.fn>( (request) => { - console.warn(`callback: ${request.method} ${request.url.href}`) + console.warn(`callback: ${request.method} ${request.url}`) }, ) - const request = new MockedRequest(new URL('/user', 'http://localhost:3000')) - onUnhandledRequest(request, [], callback) + const request = new Request(new URL('/user', 'http://localhost:3000')) + await onUnhandledRequest(request, [], callback) expect(callback).toHaveBeenCalledTimes(1) expect(callback).toHaveBeenCalledWith(request, { @@ -107,17 +107,15 @@ test('supports a custom callback function', () => { ) }) -test('supports calling default strategies from the custom callback function', () => { +test('supports calling default strategies from the custom callback function', async () => { const callback = jest.fn>( (request, print) => { - console.warn(`custom callback: ${request.id}`) - // Call the default "error" strategy. print.error() }, ) - const request = new MockedRequest(new URL('http://localhost/api')) - expect(() => onUnhandledRequest(request, [], callback)).toThrow( + const request = new Request(new URL('http://localhost/api')) + await expect(onUnhandledRequest(request, [], callback)).rejects.toThrow( `[MSW] Cannot bypass a request when using the "error" strategy for the "onUnhandledRequest" option.`, ) @@ -127,16 +125,13 @@ test('supports calling default strategies from the custom callback function', () error: expect.any(Function), }) - // Check that the custom logic in the callback was called. - expect(console.warn).toHaveBeenCalledWith(`custom callback: ${request.id}`) - // Check that the default strategy was called. expect(console.error).toHaveBeenCalledWith(fixtures.errorWithoutSuggestions) }) -test('does not print any suggestions given no handlers to suggest', () => { - onUnhandledRequest( - new MockedRequest(new URL('http://localhost/api')), +test('does not print any suggestions given no handlers to suggest', async () => { + await onUnhandledRequest( + new Request(new URL('http://localhost/api')), [], 'warn', ) @@ -144,9 +139,9 @@ test('does not print any suggestions given no handlers to suggest', () => { expect(console.warn).toHaveBeenCalledWith(fixtures.warningWithoutSuggestions) }) -test('does not print any suggestions given no handlers are similar', () => { - onUnhandledRequest( - new MockedRequest(new URL('http://localhost/api')), +test('does not print any suggestions given no handlers are similar', async () => { + await onUnhandledRequest( + new Request(new URL('http://localhost/api')), [ // None of the defined request handlers match the actual request URL // to be used as suggestions. @@ -159,9 +154,9 @@ test('does not print any suggestions given no handlers are similar', () => { expect(console.warn).toHaveBeenCalledWith(fixtures.warningWithoutSuggestions) }) -test('respects RegExp as a request handler method', () => { - onUnhandledRequest( - new MockedRequest(new URL('http://localhost/api')), +test('respects RegExp as a request handler method', async () => { + await onUnhandledRequest( + new Request(new URL('http://localhost/api')), [new RestHandler(/^GE/, 'http://localhost/api', resolver)], 'warn', ) @@ -169,56 +164,56 @@ test('respects RegExp as a request handler method', () => { expect(console.warn).toHaveBeenCalledWith(fixtures.warningWithoutSuggestions) }) -test('sorts the suggestions by relevance', () => { - onUnhandledRequest( - new MockedRequest(new URL('http://localhost/api')), +test('sorts the suggestions by relevance', async () => { + await onUnhandledRequest( + new Request(new URL('http://localhost/api')), [ - new RestHandler(RESTMethods.GET, 'http://localhost/', resolver), - new RestHandler(RESTMethods.GET, 'http://localhost:9090/api', resolver), - new RestHandler(RESTMethods.POST, 'http://localhost/api', resolver), + new RestHandler(RESTMethods.GET, '/', resolver), + new RestHandler(RESTMethods.GET, 'https://api.example.com/api', resolver), + new RestHandler(RESTMethods.POST, '/api', resolver), ], 'warn', ) expect(console.warn).toHaveBeenCalledWith( fixtures.warningWithSuggestions(`\ - • POST http://localhost/api - • GET http://localhost/`), + • POST /api + • GET /`), ) }) -test('does not print more than 4 suggestions', () => { - onUnhandledRequest( - new MockedRequest(new URL('http://localhost/api')), +test('does not print more than 4 suggestions', async () => { + await onUnhandledRequest( + new Request(new URL('http://localhost/api')), [ - new RestHandler(RESTMethods.GET, 'http://localhost/ap', resolver), - new RestHandler(RESTMethods.GET, 'http://localhost/api', resolver), - new RestHandler(RESTMethods.GET, 'http://localhost/api-1', resolver), - new RestHandler(RESTMethods.GET, 'http://localhost/api-2', resolver), - new RestHandler(RESTMethods.GET, 'http://localhost/api-3', resolver), - new RestHandler(RESTMethods.GET, 'http://localhost/api-4', resolver), + new RestHandler(RESTMethods.GET, '/ap', resolver), + new RestHandler(RESTMethods.GET, '/api', resolver), + new RestHandler(RESTMethods.GET, '/api-1', resolver), + new RestHandler(RESTMethods.GET, '/api-2', resolver), + new RestHandler(RESTMethods.GET, '/api-3', resolver), + new RestHandler(RESTMethods.GET, '/api-4', resolver), ], 'warn', ) expect(console.warn).toHaveBeenCalledWith( fixtures.warningWithSuggestions(`\ - • GET http://localhost/api - • GET http://localhost/ap - • GET http://localhost/api-1 - • GET http://localhost/api-2`), + • GET /api + • GET /ap + • GET /api-1 + • GET /api-2`), ) }) -test('throws an exception given unknown request strategy', () => { - expect(() => +test('throws an exception given unknown request strategy', async () => { + await expect( onUnhandledRequest( - new MockedRequest(new URL('http://localhost/api')), + new Request(new URL('http://localhost/api')), [], // @ts-expect-error Intentional unknown strategy. - 'arbitrary-strategy', + 'invalid-strategy', ), - ).toThrow( - '[MSW] Failed to react to an unhandled request: unknown strategy "arbitrary-strategy". Please provide one of the supported strategies ("bypass", "warn", "error") or a custom callback function as the value of the "onUnhandledRequest" option.', + ).rejects.toThrow( + '[MSW] Failed to react to an unhandled request: unknown strategy "invalid-strategy". Please provide one of the supported strategies ("bypass", "warn", "error") or a custom callback function as the value of the "onUnhandledRequest" option.', ) }) diff --git a/src/utils/request/onUnhandledRequest.ts b/src/utils/request/onUnhandledRequest.ts index b98b9e1aa..874627f7d 100644 --- a/src/utils/request/onUnhandledRequest.ts +++ b/src/utils/request/onUnhandledRequest.ts @@ -110,7 +110,7 @@ function getSuggestedHandler( request: Request, handlers: Array | Array, getScore: ScoreGetterFn | ScoreGetterFn, -): RequestHandler[] { +): Array { const suggestedHandlers = (handlers as Array) .reduce>((suggestions, handler) => { const score = getScore(request, handler as any) diff --git a/src/utils/request/parseBody.test.ts b/src/utils/request/parseBody.test.ts deleted file mode 100644 index dd204baab..000000000 --- a/src/utils/request/parseBody.test.ts +++ /dev/null @@ -1,114 +0,0 @@ -/** - * @jest-environment jsdom - */ -import { parseBody } from './parseBody' - -test('parses a body if the "Content-Type:application/json" header is set', () => { - expect( - parseBody( - `{"property":2}`, - new Headers({ 'Content-Type': 'application/json' }), - ), - ).toEqual({ - property: 2, - }) -}) - -test('parses a body for headers with letter cases', () => { - expect( - parseBody( - `{"property":2}`, - new Headers({ 'Content-Type': 'Application/JSON' }), - ), - ).toEqual({ - property: 2, - }) -}) - -test('parses a body if the "Content-Type*/json" header is set', () => { - expect( - parseBody( - `{"property":2}`, - new Headers({ 'Content-Type': 'application/hal+json' }), - ), - ).toEqual({ - property: 2, - }) -}) - -test('parses a body if the "Content-Type:application/json; charset=UTF-8" header is set', () => { - expect( - parseBody( - `{"property":2}`, - new Headers({ 'Content-Type': 'application/json; charset=UTF-8' }), - ), - ).toEqual({ - property: 2, - }) -}) - -test('returns an invalid JSON body as-is even if the "Content-Type:*/json" header is set', () => { - expect( - parseBody('text-body', new Headers({ 'Content-Type': 'application/json' })), - ).toBe('text-body') -}) - -test('parses a body if the "Content-Type: multipart/form-data" header is set', () => { - const body = `\ -------WebKitFormBoundaryvZ1cVXWyK0ilQdab\r -Content-Disposition: form-data; name="file"; filename="file1.txt"\r -Content-Type: application/octet-stream\r -\r -file content\r -------WebKitFormBoundaryvZ1cVXWyK0ilQdab\r -Content-Disposition: form-data; name="text"\r -\r -text content\r -------WebKitFormBoundaryvZ1cVXWyK0ilQdab\r -Content-Disposition: form-data; name="text2"\r -\r -another text content\r -------WebKitFormBoundaryvZ1cVXWyK0ilQdab\r -Content-Disposition: form-data; name="text2"\r -\r -another text content 2\r -------WebKitFormBoundaryvZ1cVXWyK0ilQdab--` - const headers = new Headers({ - 'content-type': - 'multipart/form-data; boundary=--WebKitFormBoundaryvZ1cVXWyK0ilQdab', - }) - const parsed = parseBody(body, headers) - - // Workaround: JSDOM does not have `Blob.text` implementation. - // see https://github.com/jsdom/jsdom/issues/2555 - expect(parsed).toHaveProperty('file.name', 'file1.txt') - - expect(parsed).toHaveProperty('text', 'text content') - expect(parsed).toHaveProperty('text2', [ - 'another text content', - 'another text content 2', - ]) -}) - -test('returns an invalid Multipart body as-is even if the "Content-Type: multipart/form-data" header is set', () => { - const headers = new Headers({ - 'content-type': - 'multipart/form-data; boundary=------WebKitFormBoundaryvZ1cVXWyK0ilQdab', - }) - expect(parseBody('text-body', headers)).toEqual('text-body') -}) - -test('parses a single stringified number as a valid "application/json" body', () => { - const headers = new Headers({ 'Content-Type': 'application/json' }) - expect(parseBody('1', headers)).toEqual(1) -}) - -test('preserves a single stringified number in a "multipart/form-data" body', () => { - const headers = new Headers({ 'Content-Type': 'multipart/form-data;' }) - expect(parseBody('1', headers)).toEqual('1') -}) - -test('returns a falsy body as-is', () => { - expect(parseBody('')).toEqual('') - expect(parseBody(undefined)).toBeUndefined() -}) diff --git a/src/utils/request/parseBody.ts b/src/utils/request/parseBody.ts deleted file mode 100644 index 221601153..000000000 --- a/src/utils/request/parseBody.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { jsonParse } from '../internal/jsonParse' -import { parseMultipartData } from '../internal/parseMultipartData' -import { MockedRequest } from './MockedRequest' - -/** - * Parses a given request/response body based on the "Content-Type" header. - */ -export function parseBody(body?: MockedRequest['body'], headers?: Headers) { - // Return whatever falsey body value is given. - if (!body) { - return body - } - - const contentType = headers?.get('content-type')?.toLowerCase() || '' - - // If the body has a Multipart Content-Type - // parse it into an object. - const hasMultipartContent = contentType.startsWith('multipart/form-data') - if (hasMultipartContent && typeof body !== 'object') { - return parseMultipartData(body.toString(), headers) || body - } - - // If the intercepted request's body has a JSON Content-Type - // parse it into an object. - const hasJsonContent = contentType.includes('json') - - if (hasJsonContent && typeof body !== 'object') { - return jsonParse(body.toString()) || body - } - - // Otherwise leave as-is. - return body -} diff --git a/src/utils/toResponseInit.ts b/src/utils/toResponseInit.ts new file mode 100644 index 000000000..986ad0fc7 --- /dev/null +++ b/src/utils/toResponseInit.ts @@ -0,0 +1,9 @@ +import { flattenHeadersObject, headersToObject } from 'headers-polyfill' + +export function toResponseInit(response: Response): ResponseInit { + return { + status: response.status, + statusText: response.statusText, + headers: flattenHeadersObject(headersToObject(response.headers)), + } +} diff --git a/test/graphql-api/compatibility.node.test.ts b/test/graphql-api/compatibility.node.test.ts index c317e6d81..b68a06a6f 100644 --- a/test/graphql-api/compatibility.node.test.ts +++ b/test/graphql-api/compatibility.node.test.ts @@ -1,6 +1,6 @@ import fetch from 'cross-fetch' import { graphql as executeGraphql, buildSchema } from 'graphql' -import { graphql } from 'msw' +import { graphql, HttpResponse } from 'msw' import { setupServer } from 'msw/node' import { createGraphQLClient, gql } from '../support/graphql' @@ -15,10 +15,10 @@ const schema = gql` ` const server = setupServer( - graphql.query('GetUser', async (req, res, ctx) => { + graphql.query('GetUser', async ({ query }) => { const executionResult = await executeGraphql({ schema: buildSchema(schema), - source: req.body.query, + source: query, rootValue: { user: { firstName: 'John', @@ -26,10 +26,10 @@ const server = setupServer( }, }) - return res( - ctx.data(executionResult.data), - ctx.errors(executionResult.errors), - ) + return HttpResponse.json({ + data: executionResult.data, + errors: executionResult.errors, + }) }), ) diff --git a/test/graphql-api/cookies.node.test.ts b/test/graphql-api/cookies.node.test.ts index 04607b51a..36e9229a9 100644 --- a/test/graphql-api/cookies.node.test.ts +++ b/test/graphql-api/cookies.node.test.ts @@ -4,7 +4,7 @@ import * as cookieUtils from 'cookie' import fetch from 'node-fetch' import { graphql as executeGraphql, buildSchema } from 'graphql' -import { graphql } from 'msw' +import { graphql, HttpResponse } from 'msw' import { setupServer } from 'msw/node' import { gql } from '../support/graphql' @@ -19,10 +19,10 @@ const schema = gql` ` const server = setupServer( - graphql.query('GetUser', async (req, res, ctx) => { + graphql.query('GetUser', async ({ query }) => { const { data, errors } = await executeGraphql({ schema: buildSchema(schema), - source: req.body.query, + source: query, rootValue: { user: { firstName: 'John', @@ -30,10 +30,16 @@ const server = setupServer( }, }) - return res( - ctx.cookie('test-cookie', 'value'), - ctx.data(data), - ctx.errors(errors), + return HttpResponse.json( + { + data, + errors, + }, + { + headers: { + 'Set-Cookie': 'test-cookie=value', + }, + }, ) }), ) diff --git a/test/graphql-api/document-node.test.ts b/test/graphql-api/document-node.test.ts index 3a4f8e5ba..2f50e3279 100644 --- a/test/graphql-api/document-node.test.ts +++ b/test/graphql-api/document-node.test.ts @@ -22,7 +22,7 @@ test('intercepts a GraphQL query based on its DocumentNode', async () => { `, }) - expect(res.status()).toEqual(200) + expect(res.status()).toBe(200) expect(await res.allHeaders()).toHaveProperty('x-powered-by', 'msw') const json = await res.json() @@ -51,7 +51,7 @@ test('intercepts a GraphQL mutation based on its DocumentNode', async () => { }, }) - expect(res.status()).toEqual(200) + expect(res.status()).toBe(200) expect(await res.allHeaders()).toHaveProperty('x-powered-by', 'msw') const json = await res.json() @@ -86,7 +86,7 @@ test('intercepts a scoped GraphQL query based on its DocumentNode', async () => }, ) - expect(res.status()).toEqual(200) + expect(res.status()).toBe(200) expect(await res.allHeaders()).toHaveProperty('x-powered-by', 'msw') const json = await res.json() diff --git a/test/graphql-api/extensions.node.test.ts b/test/graphql-api/extensions.node.test.ts index 918294795..26c04cc06 100644 --- a/test/graphql-api/extensions.node.test.ts +++ b/test/graphql-api/extensions.node.test.ts @@ -1,11 +1,11 @@ /** * @jest-environment node */ +import fetch from 'node-fetch' import type { ExecutionResult } from 'graphql' import { buildSchema, graphql as executeGraphql } from 'graphql' -import { graphql } from 'msw' +import { graphql, HttpResponse } from 'msw' import { setupServer } from 'msw/node' -import fetch from 'node-fetch' import { gql } from '../support/graphql' const schema = gql` @@ -18,10 +18,10 @@ const schema = gql` ` const server = setupServer( - graphql.query('GetUser', async (req, res, ctx) => { + graphql.query('GetUser', async ({ query }) => { const { data, errors } = await executeGraphql({ schema: buildSchema(schema), - source: req.body.query, + source: query, rootValue: { user: { firstName: 'John', @@ -29,16 +29,16 @@ const server = setupServer( }, }) - return res( - ctx.data(data), - ctx.errors(errors), - ctx.extensions({ + return HttpResponse.json({ + data, + errors, + extensions: { tracking: { version: 1, page: '/test', }, - }), - ) + }, + }) }), ) @@ -69,7 +69,7 @@ test('adds extensions to the original response data', async () => { }) const body: ExecutionResult = await res.json() - expect(res.status).toEqual(200) + expect(res.status).toBe(200) expect(body.data).toEqual({ user: { firstName: 'John', diff --git a/test/graphql-api/extensions.test.ts b/test/graphql-api/extensions.test.ts index a65d9abfe..c5b4393ec 100644 --- a/test/graphql-api/extensions.test.ts +++ b/test/graphql-api/extensions.test.ts @@ -23,7 +23,7 @@ test('mocks a GraphQL response with both data and extensions', async () => { const status = res.status() const body: ExecutionResult = await res.json() - expect(status).toEqual(200) + expect(status).toBe(200) expect(body.errors).toBeUndefined() expect(body.data).toEqual({ user: { diff --git a/test/graphql-api/link.test.ts b/test/graphql-api/link.test.ts index 5cdc193df..355e2fe8b 100644 --- a/test/graphql-api/link.test.ts +++ b/test/graphql-api/link.test.ts @@ -39,7 +39,7 @@ test('mocks a GraphQL query to the GitHub GraphQL API', async () => { const headers = await res.allHeaders() const body = await res.json() - expect(res.status()).toEqual(200) + expect(res.status()).toBe(200) expect(headers).toHaveProperty('content-type', 'application/json') expect(body).toEqual({ data: { @@ -76,7 +76,7 @@ test('mocks a GraphQL mutation to the Stripe GraphQL API', async () => { const headers = await res.allHeaders() const body = await res.json() - expect(res.status()).toEqual(200) + expect(res.status()).toBe(200) expect(headers).toHaveProperty('content-type', 'application/json') expect(body).toEqual({ data: { diff --git a/test/graphql-api/multipart-data.test.ts b/test/graphql-api/multipart-data.test.ts index 87d91b761..96e23734b 100644 --- a/test/graphql-api/multipart-data.test.ts +++ b/test/graphql-api/multipart-data.test.ts @@ -49,7 +49,7 @@ test('accepts a file from a GraphQL mutation', async () => { const body = await res.json() - expect(res.status()).toEqual(200) + expect(res.status()).toBe(200) expect(body).toEqual({ data: { multipart: { diff --git a/test/graphql-api/mutation.test.ts b/test/graphql-api/mutation.test.ts index 8ec7adde9..791010a5d 100644 --- a/test/graphql-api/mutation.test.ts +++ b/test/graphql-api/mutation.test.ts @@ -47,7 +47,7 @@ test('sends a mocked response to a GraphQL mutation', async () => { const headers = await res.allHeaders() const body = await res.json() - expect(res.status()).toEqual(200) + expect(res.status()).toBe(200) expect(headers).toHaveProperty('content-type', 'application/json') expect(body).toEqual({ data: { diff --git a/test/graphql-api/operation.test.ts b/test/graphql-api/operation.test.ts index fc57cee79..5b33d3ed2 100644 --- a/test/graphql-api/operation.test.ts +++ b/test/graphql-api/operation.test.ts @@ -33,7 +33,7 @@ test('intercepts and mocks a GraphQL query', async () => { const headers = await res.allHeaders() const body = await res.json() - expect(res.status()).toEqual(200) + expect(res.status()).toBe(200) expect(headers).toHaveProperty('x-powered-by', 'msw') expect(body).toEqual({ data: { @@ -71,7 +71,7 @@ test('intercepts and mocks an anonymous GraphQL query', async () => { expect(runtime.consoleSpy.get('warning')).toBeUndefined() - expect(res.status()).toEqual(200) + expect(res.status()).toBe(200) const headers = await res.allHeaders() expect(headers).toHaveProperty('x-powered-by', 'msw') @@ -112,7 +112,7 @@ test('intercepts and mocks a GraphQL mutation', async () => { const headers = await res.allHeaders() const body = await res.json() - expect(res.status()).toEqual(200) + expect(res.status()).toBe(200) expect(headers).toHaveProperty('x-powered-by', 'msw') expect(body).toEqual({ data: { diff --git a/test/graphql-api/response-patching.node.test.ts b/test/graphql-api/response-patching.node.test.ts index ad7967b3a..330129256 100644 --- a/test/graphql-api/response-patching.node.test.ts +++ b/test/graphql-api/response-patching.node.test.ts @@ -1,9 +1,9 @@ /** * @jest-environment node */ -import { graphql } from 'msw' +import fetch from '@remix-run/web-fetch' +import { bypass, graphql, HttpResponse } from 'msw' import { setupServer } from 'msw/node' -import fetch from 'cross-fetch' import { graphql as executeGraphql, buildSchema } from 'graphql' import { ServerApi, createServer } from '@open-draft/test-server' import { createGraphQLClient, gql } from '../support/graphql' @@ -11,12 +11,12 @@ import { createGraphQLClient, gql } from '../support/graphql' let httpServer: ServerApi const server = setupServer( - graphql.query('GetUser', async (req, res, ctx) => { - const originalResponse = await ctx.fetch(req) + graphql.query('GetUser', async ({ request }) => { + const originalResponse = await fetch(bypass(request)) const { requestHeaders, queryResult } = await originalResponse.json() - return res( - ctx.data({ + return HttpResponse.json({ + data: { user: { firstName: 'Christian', lastName: queryResult.data?.user?.lastName, @@ -24,9 +24,9 @@ const server = setupServer( // Setting the request headers on the response data on purpose // to access them in the response of the Apollo client. requestHeaders, - }), - ctx.errors(queryResult.errors), - ) + }, + errors: queryResult.errors, + }) }), ) @@ -107,7 +107,7 @@ test('patches a GraphQL response', async () => { firstName: 'Christian', lastName: 'Maverick', }) - expect(res.data.requestHeaders).toHaveProperty('x-msw-bypass', 'true') + expect(res.data.requestHeaders).toHaveProperty('x-msw-intention', 'bypass') expect(res.data.requestHeaders).not.toHaveProperty('_headers') expect(res.data.requestHeaders).not.toHaveProperty('_names') }) diff --git a/test/msw-api/context/async-response-transformer.mocks.ts b/test/msw-api/context/async-response-transformer.mocks.ts deleted file mode 100644 index 539bb37ea..000000000 --- a/test/msw-api/context/async-response-transformer.mocks.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { - ResponseTransformer, - setupWorker, - rest, - context, - compose, - createResponseComposition, -} from 'msw' -import base64Image from 'url-loader!../../fixtures/image.jpg' - -async function jpeg(base64: string): Promise { - const buffer = await fetch(base64).then((res) => res.arrayBuffer()) - - return compose( - context.set('Content-Length', buffer.byteLength.toString()), - context.set('Content-Type', 'image/jpeg'), - context.body(buffer), - ) -} - -const customResponse = createResponseComposition(null, [ - async (res) => { - res.statusText = 'Custom Status Text' - return res - }, - async (res) => { - res.headers.set('x-custom', 'yes') - return res - }, -]) - -const worker = setupWorker( - rest.get('/image', async (req, res, ctx) => { - return res(ctx.status(201), await jpeg(base64Image)) - }), - rest.post('/search', (req, res, ctx) => { - return customResponse(ctx.status(301)) - }), -) - -worker.start() diff --git a/test/msw-api/context/async-response-transformer.test.ts b/test/msw-api/context/async-response-transformer.test.ts deleted file mode 100644 index fbb26ed1a..000000000 --- a/test/msw-api/context/async-response-transformer.test.ts +++ /dev/null @@ -1,42 +0,0 @@ -import * as fs from 'fs' -import * as path from 'path' -import { pageWith } from 'page-with' - -test('supports asynchronous response transformer', async () => { - const runtime = await pageWith({ - example: path.resolve(__dirname, 'async-response-transformer.mocks.ts'), - }) - - const res = await runtime.request('/image') - const body = await res.body() - const expectedBuffer = fs.readFileSync( - path.resolve(__dirname, '../../fixtures/image.jpg'), - ) - const status = res.status() - const headers = await res.allHeaders() - - expect(status).toBe(201) - expect(headers).toHaveProperty('content-type', 'image/jpeg') - expect(headers).toHaveProperty( - 'content-length', - expectedBuffer.byteLength.toString(), - ) - expect(new Uint8Array(body)).toEqual(new Uint8Array(expectedBuffer)) -}) - -test('supports asynchronous default response transformer', async () => { - const runtime = await pageWith({ - example: path.resolve(__dirname, 'async-response-transformer.mocks.ts'), - }) - - const res = await runtime.request('/search', { - method: 'POST', - }) - const status = res.status() - const statusText = res.statusText() - const headers = await res.allHeaders() - - expect(status).toBe(301) - expect(statusText).toBe('Custom Status Text') - expect(headers).toHaveProperty('x-custom', 'yes') -}) diff --git a/test/msw-api/distribution/iife.mocks.js b/test/msw-api/distribution/iife.mocks.js index e321ecf1a..e6e07823d 100644 --- a/test/msw-api/distribution/iife.mocks.js +++ b/test/msw-api/distribution/iife.mocks.js @@ -1,8 +1,8 @@ -const { setupWorker, rest } = MockServiceWorker +const { setupWorker, rest, HttpResponse } = MockServiceWorker const worker = setupWorker( - rest.get('/user', (req, res, ctx) => { - return res(ctx.json({ firstName: 'John' })) + rest.get('/user', () => { + return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/msw-api/distribution/iife.test.ts b/test/msw-api/distribution/iife.test.ts index 98704d9b0..0034368e1 100644 --- a/test/msw-api/distribution/iife.test.ts +++ b/test/msw-api/distribution/iife.test.ts @@ -14,7 +14,7 @@ it('supports the usage of the iife bundle in a diff --git a/test/rest-api/request/body/body-form-data.test.ts b/test/rest-api/request/body/body-form-data.test.ts index b277ab248..c082b76ad 100644 --- a/test/rest-api/request/body/body-form-data.test.ts +++ b/test/rest-api/request/body/body-form-data.test.ts @@ -1,26 +1,27 @@ import * as path from 'path' import { pageWith } from 'page-with' -/** - * @todo Add `HttpResponse.formData()` support. - * Stop relying on the deprecated `.body` property - * that's no longer there! - */ -test.skip('handles FormData as a request body', async () => { +declare global { + interface Window { + makeRequest(): void + } +} + +test('handles FormData as a request body', async () => { const { page, makeUrl } = await pageWith({ example: path.resolve(__dirname, 'body.mocks.ts'), markup: path.resolve(__dirname, 'body-form-data.page.html'), }) - await page.click('button') + await page.evaluate(() => window.makeRequest()) - const res = await page.waitForResponse(makeUrl('/deprecated')) + const res = await page.waitForResponse(makeUrl('/formData')) const status = res.status() const json = await res.json() expect(status).toBe(200) expect(json).toEqual({ - username: 'john.maverick', - password: 'secret123', + name: 'Alice', + fileText: 'hello world', }) }) diff --git a/test/rest-api/request/body/body-json.test.ts b/test/rest-api/request/body/body-json.test.ts index a22e9f0bc..8a97c7002 100644 --- a/test/rest-api/request/body/body-json.test.ts +++ b/test/rest-api/request/body/body-json.test.ts @@ -7,38 +7,6 @@ function prepareRuntime() { }) } -test('reads request body as json', async () => { - const runtime = await prepareRuntime() - - const res = await runtime.request('/deprecated', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ firstName: 'John' }), - }) - const json = await res.json() - - expect(res.status()).toBe(200) - expect(json).toEqual({ firstName: 'John' }) -}) - -test('reads a single number as json request body', async () => { - const runtime = await prepareRuntime() - - const res = await runtime.request('/deprecated', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(123), - }) - const json = await res.json() - - expect(res.status()).toBe(200) - expect(json).toEqual(123) -}) - test('reads request body using json() method', async () => { const runtime = await prepareRuntime() diff --git a/test/rest-api/request/body/body.mocks.ts b/test/rest-api/request/body/body.mocks.ts index 016b238ee..b854a633c 100644 --- a/test/rest-api/request/body/body.mocks.ts +++ b/test/rest-api/request/body/body.mocks.ts @@ -1,9 +1,6 @@ import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.post('/deprecated', async ({ request }) => { - return HttpResponse.json(await request.json()) - }), rest.post('/text', async ({ request }) => { return HttpResponse.text(await request.text()) }), @@ -13,6 +10,17 @@ const worker = setupWorker( rest.post('/arrayBuffer', async ({ request }) => { return HttpResponse.arrayBuffer(await request.arrayBuffer()) }), + rest.post('/formData', async ({ request }) => { + const data = await request.formData() + const name = data.get('name') + const file = data.get('file') as File + const fileText = await file.text() + + return HttpResponse.json({ + name, + fileText, + }) + }), ) worker.start() From 41ffaa02fcede8edf7555d2735dc7838d091d809 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 17 Oct 2022 02:02:26 +0200 Subject: [PATCH 025/210] chore: remove unused code --- src/context/body.test.ts | 22 ------ src/context/body.ts | 19 ----- src/context/cookie.node.test.ts | 10 --- src/context/cookie.test.ts | 39 ---------- src/context/cookie.ts | 23 ------ src/context/data.test.ts | 64 --------------- src/context/data.ts | 21 ----- src/context/delay.node.test.ts | 40 ---------- src/context/delay.test.ts | 42 ---------- src/context/delay.ts | 72 ----------------- src/context/errors.test.ts | 72 ----------------- src/context/errors.ts | 27 ------- src/context/extensions.test.ts | 70 ----------------- src/context/extensions.ts | 20 ----- src/context/field.test.ts | 117 ---------------------------- src/context/field.ts | 60 -------------- src/context/index.ts | 11 --- src/context/json.test.ts | 31 -------- src/context/json.ts | 22 ------ src/context/set.test.ts | 34 -------- src/context/set.ts | 56 ------------- src/context/status.test.ts | 17 ---- src/context/status.ts | 22 ------ src/context/text.test.ts | 12 --- src/context/text.ts | 17 ---- src/context/xml.test.ts | 12 --- src/context/xml.ts | 18 ----- src/graphql.ts | 13 +--- src/handlers/GraphQLHandler.test.ts | 8 +- src/handlers/GraphQLHandler.ts | 32 +------- src/handlers/RequestHandler.ts | 39 ++-------- src/handlers/RestHandler.test.ts | 2 - src/handlers/RestHandler.ts | 25 +----- src/index.ts | 26 +------ src/response.ts | 93 ---------------------- src/rest.ts | 3 +- src/typeUtils.ts | 8 +- 37 files changed, 22 insertions(+), 1197 deletions(-) delete mode 100644 src/context/body.test.ts delete mode 100644 src/context/body.ts delete mode 100644 src/context/cookie.node.test.ts delete mode 100644 src/context/cookie.test.ts delete mode 100644 src/context/cookie.ts delete mode 100644 src/context/data.test.ts delete mode 100644 src/context/data.ts delete mode 100644 src/context/delay.node.test.ts delete mode 100644 src/context/delay.test.ts delete mode 100644 src/context/delay.ts delete mode 100644 src/context/errors.test.ts delete mode 100644 src/context/errors.ts delete mode 100644 src/context/extensions.test.ts delete mode 100644 src/context/extensions.ts delete mode 100644 src/context/field.test.ts delete mode 100644 src/context/field.ts delete mode 100644 src/context/index.ts delete mode 100644 src/context/json.test.ts delete mode 100644 src/context/json.ts delete mode 100644 src/context/set.test.ts delete mode 100644 src/context/set.ts delete mode 100644 src/context/status.test.ts delete mode 100644 src/context/status.ts delete mode 100644 src/context/text.test.ts delete mode 100644 src/context/text.ts delete mode 100644 src/context/xml.test.ts delete mode 100644 src/context/xml.ts delete mode 100644 src/response.ts diff --git a/src/context/body.test.ts b/src/context/body.test.ts deleted file mode 100644 index c6e7056a9..000000000 --- a/src/context/body.test.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * @jest-environment jsdom - */ -import { body } from './body' -import { set } from './set' -import { response } from '../response' - -test('sets a given body value without implicit "Content-Type" header', async () => { - const result = await response(body('Lorem ipsum')) - - expect(result).toHaveProperty('body', 'Lorem ipsum') - expect(result.headers.get('content-type')).toBeNull() -}) - -test('does not stringify raw body twice if content is string and "Content-Type" header is "json"', async () => { - const result = await response( - set('Content-Type', 'application/json'), - body(JSON.stringify('some text')), - ) - - expect(result).toHaveProperty('body', `"some text"`) -}) diff --git a/src/context/body.ts b/src/context/body.ts deleted file mode 100644 index 4a07a62ec..000000000 --- a/src/context/body.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { ResponseTransformer } from '../response' - -/** - * Sets a raw response body. Does not append any `Content-Type` headers. - * @example - * res(ctx.body('Successful response')) - * res(ctx.body(JSON.stringify({ key: 'value' }))) - * @see {@link https://mswjs.io/docs/api/context/body `ctx.body()`} - */ -export const body = < - BodyType extends string | Blob | BufferSource | ReadableStream | FormData, ->( - value: BodyType, -): ResponseTransformer => { - return (res) => { - res.body = value - return res - } -} diff --git a/src/context/cookie.node.test.ts b/src/context/cookie.node.test.ts deleted file mode 100644 index 8551b706a..000000000 --- a/src/context/cookie.node.test.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @jest-environment node - */ -import { cookie } from './cookie' -import { response } from '../response' - -test('sets a cookie on the response headers, node environment', async () => { - const result = await response(cookie('my-cookie', 'arbitrary-value')) - expect(result.headers.get('set-cookie')).toEqual('my-cookie=arbitrary-value') -}) diff --git a/src/context/cookie.test.ts b/src/context/cookie.test.ts deleted file mode 100644 index c17cca610..000000000 --- a/src/context/cookie.test.ts +++ /dev/null @@ -1,39 +0,0 @@ -/** - * @jest-environment jsdom - */ -import * as cookieUtils from 'cookie' -import { cookie } from './cookie' -import { response } from '../response' -import { clearCookies } from '../../test/support/utils' - -beforeAll(() => { - clearCookies() -}) - -afterEach(() => { - clearCookies() -}) - -test('sets a given response cookie', async () => { - const result = await response(cookie('myCookie', 'value')) - - expect(result.headers.get('set-cookie')).toBe('myCookie=value') - - // Propagates the response cookies on the document. - const allCookies = cookieUtils.parse(document.cookie) - expect(allCookies).toEqual({ myCookie: 'value' }) -}) - -test('supports setting multiple response cookies', async () => { - const result = await response( - cookie('firstCookie', 'yes'), - cookie('secondCookie', 'no'), - ) - - expect(result.headers.get('set-cookie')).toBe( - 'secondCookie=no, firstCookie=yes', - ) - - const allCookies = cookieUtils.parse(document.cookie) - expect(allCookies).toEqual({ firstCookie: 'yes', secondCookie: 'no' }) -}) diff --git a/src/context/cookie.ts b/src/context/cookie.ts deleted file mode 100644 index 8d38b270a..000000000 --- a/src/context/cookie.ts +++ /dev/null @@ -1,23 +0,0 @@ -import * as cookieUtils from 'cookie' -import { ResponseTransformer } from '../response' - -/** - * Sets a given cookie on the mocked response. - * @example res(ctx.cookie('name', 'value')) - */ -export const cookie = ( - name: string, - value: string, - options?: cookieUtils.CookieSerializeOptions, -): ResponseTransformer => { - return (res) => { - const serializedCookie = cookieUtils.serialize(name, value, options) - res.headers.append('Set-Cookie', serializedCookie) - - if (typeof document !== 'undefined') { - document.cookie = serializedCookie - } - - return res - } -} diff --git a/src/context/data.test.ts b/src/context/data.test.ts deleted file mode 100644 index f73e0693c..000000000 --- a/src/context/data.test.ts +++ /dev/null @@ -1,64 +0,0 @@ -/** - * @jest-environment jsdom - */ -import { data } from './data' -import { errors } from './errors' -import { response } from '../response' - -test('sets a single data on the response JSON body', async () => { - const result = await response(data({ name: 'msw' })) - - expect(result.headers.get('content-type')).toBe('application/json') - expect(result).toHaveProperty( - 'body', - JSON.stringify({ - data: { - name: 'msw', - }, - }), - ) -}) - -test('sets multiple data on the response JSON body', async () => { - const result = await response( - data({ name: 'msw' }), - data({ description: 'API mocking library' }), - ) - - expect(result.headers.get('content-type')).toBe('application/json') - expect(result).toHaveProperty( - 'body', - JSON.stringify({ - data: { - description: 'API mocking library', - name: 'msw', - }, - }), - ) -}) - -test('combines with error in the response JSON body', async () => { - const result = await response( - data({ name: 'msw' }), - errors([ - { - message: 'exceeds the limit of awesomeness', - }, - ]), - ) - - expect(result.headers.get('content-type')).toBe('application/json') - expect(result).toHaveProperty( - 'body', - JSON.stringify({ - errors: [ - { - message: 'exceeds the limit of awesomeness', - }, - ], - data: { - name: 'msw', - }, - }), - ) -}) diff --git a/src/context/data.ts b/src/context/data.ts deleted file mode 100644 index 9180cb7d9..000000000 --- a/src/context/data.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { jsonParse } from '../utils/internal/jsonParse' -import { mergeRight } from '../utils/internal/mergeRight' -import { json } from './json' -import { GraphQLPayloadContext } from '../typeUtils' - -/** - * Sets a given payload as a GraphQL response body. - * @example - * res(ctx.data({ user: { firstName: 'John' }})) - * @see {@link https://mswjs.io/docs/api/context/data `ctx.data()`} - */ -export const data: GraphQLPayloadContext> = ( - payload, -) => { - return (res) => { - const prevBody = jsonParse(res.body) || {} - const nextBody = mergeRight(prevBody, { data: payload }) - - return json(nextBody)(res) - } -} diff --git a/src/context/delay.node.test.ts b/src/context/delay.node.test.ts deleted file mode 100644 index 09d78a465..000000000 --- a/src/context/delay.node.test.ts +++ /dev/null @@ -1,40 +0,0 @@ -/** - * @jest-environment node - */ -import { delay, NODE_SERVER_RESPONSE_TIME } from './delay' -import { response } from '../response' - -test('sets a Node.js-specific response delay when not provided', async () => { - const resolvedResponse = await response(delay()) - expect(resolvedResponse).toHaveProperty('delay', NODE_SERVER_RESPONSE_TIME) -}) - -test('allows response delay duration overrides', async () => { - const resolvedResponse = await response(delay(1234)) - expect(resolvedResponse).toHaveProperty('delay', 1234) -}) - -test('throws an exception given a too large duration', async () => { - const createErrorMessage = (value: any) => { - return `Failed to delay a response: provided delay duration (${value}) exceeds the maximum allowed duration for "setTimeout" (2147483647). This will cause the response to be returned immediately. Please use a number within the allowed range to delay the response by exact duration, or consider the "infinite" delay mode to delay the response indefinitely.` - } - - const exceedingValues = [ - Infinity, - Number.MAX_VALUE, - Number.MAX_SAFE_INTEGER, - 2147483648, - ] - - for (const value of exceedingValues) { - await expect(() => response(delay(value))).rejects.toThrow( - createErrorMessage(value), - ) - } -}) - -test('throws an exception given an unknown delay mode', async () => { - await expect(() => response(delay('foo' as any))).rejects.toThrow( - 'Failed to delay a response: unknown delay mode "foo". Please make sure you provide one of the supported modes ("real", "infinite") or a number to "ctx.delay".', - ) -}) diff --git a/src/context/delay.test.ts b/src/context/delay.test.ts deleted file mode 100644 index e3ea29852..000000000 --- a/src/context/delay.test.ts +++ /dev/null @@ -1,42 +0,0 @@ -/** - * @jest-environment jsdom - * - * Since jsdom also runs in Node.js, expect a Node.js-specific implicit delay. - */ -import { delay, NODE_SERVER_RESPONSE_TIME } from './delay' -import { response } from '../response' - -test('sets a Node.js-specific response delay when not provided', async () => { - const resolvedResponse = await response(delay()) - expect(resolvedResponse).toHaveProperty('delay', NODE_SERVER_RESPONSE_TIME) -}) - -test('allows response delay duration overrides', async () => { - const resolvedResponse = await response(delay(1234)) - expect(resolvedResponse).toHaveProperty('delay', 1234) -}) - -test('throws an exception given a too large duration', async () => { - const createErrorMessage = (value: any) => { - return `Failed to delay a response: provided delay duration (${value}) exceeds the maximum allowed duration for "setTimeout" (2147483647). This will cause the response to be returned immediately. Please use a number within the allowed range to delay the response by exact duration, or consider the "infinite" delay mode to delay the response indefinitely.` - } - - const exceedingValues = [ - Infinity, - Number.MAX_VALUE, - Number.MAX_SAFE_INTEGER, - 2147483648, - ] - - for (const value of exceedingValues) { - await expect(() => response(delay(value))).rejects.toThrow( - createErrorMessage(value), - ) - } -}) - -test('throws an exception given an unknown delay mode', async () => { - await expect(() => response(delay('foo' as any))).rejects.toThrow( - 'Failed to delay a response: unknown delay mode "foo". Please make sure you provide one of the supported modes ("real", "infinite") or a number to "ctx.delay".', - ) -}) diff --git a/src/context/delay.ts b/src/context/delay.ts deleted file mode 100644 index 50ff9b01a..000000000 --- a/src/context/delay.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { isNodeProcess } from 'is-node-process' -import { ResponseTransformer } from '../response' - -export const SET_TIMEOUT_MAX_ALLOWED_INT = 2147483647 -export const MIN_SERVER_RESPONSE_TIME = 100 -export const MAX_SERVER_RESPONSE_TIME = 400 -export const NODE_SERVER_RESPONSE_TIME = 5 - -const getRandomServerResponseTime = () => { - if (isNodeProcess()) { - return NODE_SERVER_RESPONSE_TIME - } - - return Math.floor( - Math.random() * (MAX_SERVER_RESPONSE_TIME - MIN_SERVER_RESPONSE_TIME) + - MIN_SERVER_RESPONSE_TIME, - ) -} - -export type DelayMode = 'real' | 'infinite' - -/** - * Delays the response by the given duration (ms). - * @example - * res(ctx.delay(1200)) // delay response by 1200ms - * res(ctx.delay()) // emulate realistic server response time - * res(ctx.delay('infinite')) // delay response infinitely - * @see {@link https://mswjs.io/docs/api/context/delay `ctx.delay()`} - */ -export const delay = ( - durationOrMode?: DelayMode | number, -): ResponseTransformer => { - return (res) => { - let delayTime: number - - if (typeof durationOrMode === 'string') { - switch (durationOrMode) { - case 'infinite': { - // Using `Infinity` as a delay value executes the response timeout immediately. - // Instead, use the maximum allowed integer for `setTimeout`. - delayTime = SET_TIMEOUT_MAX_ALLOWED_INT - break - } - case 'real': { - delayTime = getRandomServerResponseTime() - break - } - default: { - throw new Error( - `Failed to delay a response: unknown delay mode "${durationOrMode}". Please make sure you provide one of the supported modes ("real", "infinite") or a number to "ctx.delay".`, - ) - } - } - } else if (typeof durationOrMode === 'undefined') { - // Use random realistic server response time when no explicit delay duration was provided. - delayTime = getRandomServerResponseTime() - } else { - // Guard against passing values like `Infinity` or `Number.MAX_VALUE` - // as the response delay duration. They don't produce the result you may expect. - if (durationOrMode > SET_TIMEOUT_MAX_ALLOWED_INT) { - throw new Error( - `Failed to delay a response: provided delay duration (${durationOrMode}) exceeds the maximum allowed duration for "setTimeout" (${SET_TIMEOUT_MAX_ALLOWED_INT}). This will cause the response to be returned immediately. Please use a number within the allowed range to delay the response by exact duration, or consider the "infinite" delay mode to delay the response indefinitely.`, - ) - } - - delayTime = durationOrMode - } - - res.delay = delayTime - return res - } -} diff --git a/src/context/errors.test.ts b/src/context/errors.test.ts deleted file mode 100644 index ed1cd1f1f..000000000 --- a/src/context/errors.test.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - * @jest-environment jsdom - */ -import { errors } from './errors' -import { data } from './data' -import { response } from '../response' - -test('sets a given error on the response JSON body', async () => { - const result = await response(errors([{ message: 'Error message' }])) - - expect(result.headers.get('content-type')).toEqual('application/json') - expect(result).toHaveProperty( - 'body', - JSON.stringify({ - errors: [ - { - message: 'Error message', - }, - ], - }), - ) -}) - -test('sets given errors on the response JSON body', async () => { - const result = await response( - errors([{ message: 'Error message' }, { message: 'Second error' }]), - ) - - expect(result.headers.get('content-type')).toEqual('application/json') - expect(result).toHaveProperty( - 'body', - JSON.stringify({ - errors: [ - { - message: 'Error message', - }, - { - message: 'Second error', - }, - ], - }), - ) -}) - -test('combines with data in the response JSON body', async () => { - const result = await response( - data({ name: 'msw' }), - errors([{ message: 'exceeds the limit of awesomeness' }]), - ) - - expect(result.headers.get('content-type')).toEqual('application/json') - expect(result).toHaveProperty( - 'body', - JSON.stringify({ - errors: [ - { - message: 'exceeds the limit of awesomeness', - }, - ], - data: { - name: 'msw', - }, - }), - ) -}) - -test('bypasses undefined errors', async () => { - const result = await response(errors(undefined), errors(null)) - - expect(result.headers.get('content-type')).not.toEqual('application/json') - expect(result).toHaveProperty('body', null) -}) diff --git a/src/context/errors.ts b/src/context/errors.ts deleted file mode 100644 index c64d97331..000000000 --- a/src/context/errors.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { GraphQLError } from 'graphql' -import { ResponseTransformer } from '../response' -import { jsonParse } from '../utils/internal/jsonParse' -import { mergeRight } from '../utils/internal/mergeRight' -import { json } from './json' - -/** - * Sets a given list of GraphQL errors on the mocked response. - * @example res(ctx.errors([{ message: 'Unauthorized' }])) - * @see {@link https://mswjs.io/docs/api/context/errors} - */ -export const errors = < - ErrorsType extends readonly Partial[] | null | undefined, ->( - errorsList: ErrorsType, -): ResponseTransformer => { - return (res) => { - if (errorsList == null) { - return res - } - - const prevBody = jsonParse(res.body) || {} - const nextBody = mergeRight(prevBody, { errors: errorsList }) - - return json(nextBody)(res as any) as any - } -} diff --git a/src/context/extensions.test.ts b/src/context/extensions.test.ts deleted file mode 100644 index b341e1598..000000000 --- a/src/context/extensions.test.ts +++ /dev/null @@ -1,70 +0,0 @@ -/** - * @jest-environment jsdom - */ -import { errors } from './errors' -import { data } from './data' -import { extensions } from './extensions' -import { response } from '../response' - -test('sets standalone extensions on the response JSON body', async () => { - const result = await response(extensions({ tracking: { version: 1 } })) - - expect(result.headers.get('content-type')).toEqual('application/json') - expect(result.body).toEqual( - JSON.stringify({ - extensions: { - tracking: { - version: 1, - }, - }, - }), - ) -}) - -test('sets given extensions on the response JSON body with data', async () => { - const result = await response( - data({ hello: 'world' }), - extensions({ tracking: { version: 1 } }), - ) - - expect(result.headers.get('content-type')).toEqual('application/json') - expect(result.body).toEqual( - JSON.stringify({ - extensions: { - tracking: { - version: 1, - }, - }, - data: { - hello: 'world', - }, - }), - ) -}) - -test('sets given extensions on the response JSON body in the presence with data and errors', async () => { - const result = await response( - data({ hello: 'world' }), - extensions({ tracking: { version: 1 } }), - errors([{ message: 'Error message' }]), - ) - - expect(result.headers.get('content-type')).toEqual('application/json') - expect(result.body).toEqual( - JSON.stringify({ - errors: [ - { - message: 'Error message', - }, - ], - extensions: { - tracking: { - version: 1, - }, - }, - data: { - hello: 'world', - }, - }), - ) -}) diff --git a/src/context/extensions.ts b/src/context/extensions.ts deleted file mode 100644 index 4c2925394..000000000 --- a/src/context/extensions.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { jsonParse } from '../utils/internal/jsonParse' -import { mergeRight } from '../utils/internal/mergeRight' -import { json } from './json' -import { GraphQLPayloadContext } from '../typeUtils' - -/** - * Sets the GraphQL extensions on a given response. - * @example - * res(ctx.extensions({ tracing: { version: 1 }})) - * @see {@link https://mswjs.io/docs/api/context/extensions `ctx.extensions()`} - */ -export const extensions: GraphQLPayloadContext> = ( - payload, -) => { - return (res) => { - const prevBody = jsonParse(res.body) || {} - const nextBody = mergeRight(prevBody, { extensions: payload }) - return json(nextBody)(res) - } -} diff --git a/src/context/field.test.ts b/src/context/field.test.ts deleted file mode 100644 index 48952e9d0..000000000 --- a/src/context/field.test.ts +++ /dev/null @@ -1,117 +0,0 @@ -/** - * @jest-environment jsdom - */ -import { field } from './field' -import { response } from '../response' -import { data } from './data' -import { errors } from './errors' - -test('sets a given field value string on the response JSON body', async () => { - const result = await response(field('field', 'value')) - - expect(result.headers.get('content-type')).toBe('application/json') - expect(result).toHaveProperty('body', JSON.stringify({ field: 'value' })) -}) - -test('sets a given field value object on the response JSON body', async () => { - const result = await response( - field('metadata', { - date: new Date('2022-05-27'), - comment: 'nice metadata', - }), - ) - - expect(result.headers.get('content-type')).toBe('application/json') - expect(result).toHaveProperty( - 'body', - JSON.stringify({ - metadata: { date: new Date('2022-05-27'), comment: 'nice metadata' }, - }), - ) -}) - -test('combines with data, errors and other field in the response JSON body', async () => { - const result = await response( - data({ name: 'msw' }), - errors([{ message: 'exceeds the limit of awesomeness' }]), - field('field', { errorCode: 'value' }), - field('field2', 123), - ) - - expect(result.headers.get('content-type')).toEqual('application/json') - expect(result).toHaveProperty( - 'body', - JSON.stringify({ - field2: 123, - field: { errorCode: 'value' }, - errors: [ - { - message: 'exceeds the limit of awesomeness', - }, - ], - data: { - name: 'msw', - }, - }), - ) -}) - -test('throws when trying to set non-serializable values', async () => { - await expect(response(field('metadata', BigInt(1)))).rejects.toThrow( - 'Do not know how to serialize a BigInt', - ) -}) - -test('throws when passing an empty string as field name', async () => { - await expect(response(field('' as string, 'value'))).rejects.toThrow( - `[MSW] Failed to set a custom field on a GraphQL response: field name cannot be empty.`, - ) -}) - -test('throws when passing an empty string (when trimmed) as field name', async () => { - await expect(response(field(' ' as string, 'value'))).rejects.toThrow( - `[MSW] Failed to set a custom field on a GraphQL response: field name cannot be empty.`, - ) -}) - -test('throws when using "data" as the field name', async () => { - await expect( - response( - field( - // @ts-expect-error Test runtime value. - 'data', - 'value', - ), - ), - ).rejects.toThrow( - '[MSW] Failed to set a custom "data" field on a mocked GraphQL response: forbidden field name. Did you mean to call "ctx.data()" instead?', - ) -}) - -test('throws when using "errors" as the field name', async () => { - await expect( - response( - field( - // @ts-expect-error Test runtime value. - 'errors', - 'value', - ), - ), - ).rejects.toThrow( - '[MSW] Failed to set a custom "errors" field on a mocked GraphQL response: forbidden field name. Did you mean to call "ctx.errors()" instead?', - ) -}) - -test('throws when using "extensions" as the field name', async () => { - await expect( - response( - field( - // @ts-expect-error Test runtime value. - 'extensions', - 'value', - ), - ), - ).rejects.toThrow( - '[MSW] Failed to set a custom "extensions" field on a mocked GraphQL response: forbidden field name. Did you mean to call "ctx.extensions()" instead?', - ) -}) diff --git a/src/context/field.ts b/src/context/field.ts deleted file mode 100644 index a97764607..000000000 --- a/src/context/field.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { invariant } from 'outvariant' -import { ResponseTransformer } from '../response' -import { devUtils } from '../utils/internal/devUtils' -import { jsonParse } from '../utils/internal/jsonParse' -import { mergeRight } from '../utils/internal/mergeRight' -import { json } from './json' - -type ForbiddenFieldNames = '' | 'data' | 'errors' | 'extensions' - -/** - * Set a custom field on the GraphQL mocked response. - * @example res(ctx.fields('customField', value)) - * @see {@link https://mswjs.io/docs/api/context/field} - */ -export const field = ( - fieldName: FieldNameType extends ForbiddenFieldNames ? never : FieldNameType, - fieldValue: FieldValueType, -): ResponseTransformer => { - return (res) => { - validateFieldName(fieldName) - - const prevBody = jsonParse(res.body) || {} - const nextBody = mergeRight(prevBody, { [fieldName]: fieldValue }) - - return json(nextBody)(res as any) as any - } -} - -function validateFieldName(fieldName: string) { - invariant( - fieldName.trim() !== '', - devUtils.formatMessage( - 'Failed to set a custom field on a GraphQL response: field name cannot be empty.', - ), - ) - - invariant( - fieldName !== 'data', - devUtils.formatMessage( - 'Failed to set a custom "%s" field on a mocked GraphQL response: forbidden field name. Did you mean to call "ctx.data()" instead?', - fieldName, - ), - ) - - invariant( - fieldName !== 'errors', - devUtils.formatMessage( - 'Failed to set a custom "%s" field on a mocked GraphQL response: forbidden field name. Did you mean to call "ctx.errors()" instead?', - fieldName, - ), - ) - - invariant( - fieldName !== 'extensions', - devUtils.formatMessage( - 'Failed to set a custom "%s" field on a mocked GraphQL response: forbidden field name. Did you mean to call "ctx.extensions()" instead?', - fieldName, - ), - ) -} diff --git a/src/context/index.ts b/src/context/index.ts deleted file mode 100644 index a03ff6777..000000000 --- a/src/context/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -export { status } from './status' -export { set } from './set' -export { cookie } from './cookie' -export { body } from './body' -export { data } from './data' -export { extensions } from './extensions' -export { delay } from './delay' -export { errors } from './errors' -export { json } from './json' -export { text } from './text' -export { xml } from './xml' diff --git a/src/context/json.test.ts b/src/context/json.test.ts deleted file mode 100644 index 4c0f2b3cf..000000000 --- a/src/context/json.test.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @jest-environment jsdom - */ -import { json } from './json' -import { response } from '../response' - -test('sets response content type and body to the given JSON', async () => { - const result = await response(json({ firstName: 'John' })) - expect(result.headers.get('content-type')).toEqual('application/json') - expect(result).toHaveProperty('body', `{"firstName":"John"}`) -}) - -test('sets given Array as the response JSOn body', async () => { - const result = await response(json([1, '2', true, { ok: true }, ''])) - expect(result).toHaveProperty('body', `[1,"2",true,{"ok":true},""]`) -}) - -test('sets given string as the response JSON body', async () => { - const result = await response(json('some string')) - expect(result).toHaveProperty('body', `"some string"`) -}) - -test('sets given boolean as the response JSON body', async () => { - const result = await response(json(true)) - expect(result).toHaveProperty('body', `true`) -}) - -test('sets given date as the response JSON body', async () => { - const result = await response(json(new Date(Date.UTC(2020, 0, 1)))) - expect(result).toHaveProperty('body', `"2020-01-01T00:00:00.000Z"`) -}) diff --git a/src/context/json.ts b/src/context/json.ts deleted file mode 100644 index ae67fd45d..000000000 --- a/src/context/json.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { ResponseTransformer } from '../response' - -/** - * Sets the given value as the JSON body of the response. - * Appends a `Content-Type: application/json` header on the - * mocked response. - * @example - * res(ctx.json('Some string')) - * res(ctx.json({ key: 'value' })) - * res(ctx.json([1, '2', false, { ok: true }])) - * @see {@link https://mswjs.io/docs/api/context/json `ctx.json()`} - */ -export const json = ( - body: BodyTypeJSON, -): ResponseTransformer => { - return (res) => { - res.headers.set('Content-Type', 'application/json') - res.body = JSON.stringify(body) as any - - return res - } -} diff --git a/src/context/set.test.ts b/src/context/set.test.ts deleted file mode 100644 index fa061f4f1..000000000 --- a/src/context/set.test.ts +++ /dev/null @@ -1,34 +0,0 @@ -/** - * @jest-environment jsdom - */ -import { set } from './set' -import { response } from '../response' - -test('sets a single header', async () => { - const { headers } = await response(set('Content-Type', 'image/*')) - expect(headers.get('content-type')).toEqual('image/*') -}) - -test('sets a single header with multiple values', async () => { - const { headers } = await response( - set({ - Accept: ['application/json', 'image/png'], - }), - ) - - expect(headers.get('accept')).toEqual('application/json, image/png') -}) - -test('sets multiple headers', async () => { - const { headers } = await response( - set({ - Accept: '*/*', - 'Accept-Language': 'en', - 'Content-Type': 'application/json', - }), - ) - - expect(headers.get('accept')).toEqual('*/*') - expect(headers.get('accept-language')).toEqual('en') - expect(headers.get('content-type')).toEqual('application/json') -}) diff --git a/src/context/set.ts b/src/context/set.ts deleted file mode 100644 index 71ca89c52..000000000 --- a/src/context/set.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { objectToHeaders } from 'headers-polyfill' -import { ResponseTransformer } from '../response' - -export type HeadersObject = Record< - KeyType, - string | string[] -> - -/** - * @see https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name - */ -export type ForbiddenHeaderNames = - | 'cookie' - | 'cookie2' - | 'set-cookie' - | 'set-cookie2' - -export type ForbiddenHeaderError = - `SafeResponseHeader: the '${HeaderName}' header cannot be set on the response. Please use the 'ctx.cookie()' function instead.` - -/** - * Sets one or multiple response headers. - * @example - * ctx.set('Content-Type', 'text/plain') - * ctx.set({ - * 'Accept': 'application/javascript', - * 'Content-Type': "text/plain" - * }) - * @see {@link https://mswjs.io/docs/api/context/set `ctx.set()`} - */ -export function set( - ...args: N extends string - ? Lowercase extends ForbiddenHeaderNames - ? [ForbiddenHeaderError] - : [N, string] - : N extends HeadersObject - ? Lowercase extends ForbiddenHeaderNames - ? [ForbiddenHeaderError] - : [N] - : [N] -): ResponseTransformer { - return (res) => { - const [name, value] = args - - if (typeof name === 'string') { - res.headers.append(name, value as string) - } else { - const headers = objectToHeaders(name) - headers.forEach((value, name) => { - res.headers.append(name, value) - }) - } - - return res - } -} diff --git a/src/context/status.test.ts b/src/context/status.test.ts deleted file mode 100644 index 2bd795536..000000000 --- a/src/context/status.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @jest-environment jsdom - */ -import { status } from './status' -import { response } from '../response' - -test('sets given status code on the response', async () => { - const result = await response(status(403)) - expect(result).toHaveProperty('status', 403) - expect(result).toHaveProperty('statusText', 'Forbidden') -}) - -test('supports custom status text', async () => { - const result = await response(status(301, 'Custom text')) - expect(result).toHaveProperty('status', 301) - expect(result).toHaveProperty('statusText', 'Custom text') -}) diff --git a/src/context/status.ts b/src/context/status.ts deleted file mode 100644 index e8113519c..000000000 --- a/src/context/status.ts +++ /dev/null @@ -1,22 +0,0 @@ -import statuses from 'statuses/codes.json' -import { ResponseTransformer } from '../response' - -/** - * Sets a response status code and text. - * @example - * res(ctx.status(301)) - * res(ctx.status(400, 'Custom status text')) - * @see {@link https://mswjs.io/docs/api/context/status `ctx.status()`} - */ -export const status = ( - statusCode: number, - statusText?: string, -): ResponseTransformer => { - return (res) => { - res.status = statusCode - res.statusText = - statusText || statuses[String(statusCode) as keyof typeof statuses] - - return res - } -} diff --git a/src/context/text.test.ts b/src/context/text.test.ts deleted file mode 100644 index aafc263b1..000000000 --- a/src/context/text.test.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * @jest-environment jsdom - */ -import { text } from './text' -import { response } from '../response' - -test('sets a given text as the response body', async () => { - const result = await response(text('Lorem ipsum')) - - expect(result.headers.get('content-type')).toEqual('text/plain') - expect(result).toHaveProperty('body', 'Lorem ipsum') -}) diff --git a/src/context/text.ts b/src/context/text.ts deleted file mode 100644 index 6cdbb2d1d..000000000 --- a/src/context/text.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ResponseTransformer } from '../response' - -/** - * Sets a textual response body. Appends a `Content-Type: text/plain` - * header on the mocked response. - * @example res(ctx.text('Successful response')) - * @see {@link https://mswjs.io/docs/api/context/text `ctx.text()`} - */ -export const text = ( - body: BodyType, -): ResponseTransformer => { - return (res) => { - res.headers.set('Content-Type', 'text/plain') - res.body = body - return res - } -} diff --git a/src/context/xml.test.ts b/src/context/xml.test.ts deleted file mode 100644 index 479e24817..000000000 --- a/src/context/xml.test.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * @jest-environment jsdom - */ -import { xml } from './xml' -import { response } from '../response' - -test('sets a given XML as the response body', async () => { - const result = await response(xml('JohnJohnContent')) - * @see {@link https://mswjs.io/docs/api/context/xml `ctx.xml()`} - */ -export const xml = ( - body: BodyType, -): ResponseTransformer => { - return (res) => { - res.headers.set('Content-Type', 'text/xml') - res.body = body - return res - } -} diff --git a/src/graphql.ts b/src/graphql.ts index fbe5e18b6..a80c96659 100644 --- a/src/graphql.ts +++ b/src/graphql.ts @@ -2,7 +2,6 @@ import type { DocumentNode, OperationTypeNode } from 'graphql' import { ResponseResolver } from './handlers/RequestHandler' import { GraphQLHandler, - GraphQLContext, GraphQLVariables, ExpectedOperationTypeNode, GraphQLHandlerNameSelector, @@ -31,21 +30,15 @@ function createScopedGraphQLHandler( | GraphQLHandlerNameSelector | DocumentNode | TypedDocumentNode, - resolver: ResponseResolver< - GraphQLContext, - GraphQLResolverExtras - >, + resolver: ResponseResolver>, ) => { return new GraphQLHandler(operationType, operationName, url, resolver) } } function createGraphQLOperationHandler(url: Path) { - return < - Query extends Record, - // Variables extends GraphQLVariables = GraphQLVariables, - >( - resolver: ResponseResolver>, + return ( + resolver: ResponseResolver>, ) => { return new GraphQLHandler('all', new RegExp('.*'), url, resolver) } diff --git a/src/handlers/GraphQLHandler.test.ts b/src/handlers/GraphQLHandler.test.ts index 9eb375a22..76375c8d4 100644 --- a/src/handlers/GraphQLHandler.test.ts +++ b/src/handlers/GraphQLHandler.test.ts @@ -5,7 +5,6 @@ import { encodeBuffer } from '@mswjs/interceptors' import { OperationTypeNode, parse } from 'graphql' import { Headers } from 'headers-polyfill' import { - GraphQLContext, GraphQLHandler, GraphQLRequestBody, GraphQLResolverExtras, @@ -15,10 +14,9 @@ import { HttpResponse } from '../utils/HttpResponse' import { ResponseResolver } from './RequestHandler' import { Request } from '../fetch' -const resolver: ResponseResolver< - GraphQLContext, - GraphQLResolverExtras<{ userId: string }> -> = ({ variables }) => { +const resolver: ResponseResolver> = ({ + variables, +}) => { return HttpResponse.json({ data: { user: { diff --git a/src/handlers/GraphQLHandler.ts b/src/handlers/GraphQLHandler.ts index 41db09c0c..9ae9bfbe0 100644 --- a/src/handlers/GraphQLHandler.ts +++ b/src/handlers/GraphQLHandler.ts @@ -1,13 +1,5 @@ import type { DocumentNode, OperationTypeNode } from 'graphql' -import { data } from '../context/data' -import { extensions } from '../context/extensions' -import { errors } from '../context/errors' -import { field } from '../context/field' -import { GraphQLPayloadContext } from '../typeUtils' -import { cookie } from '../context/cookie' import { - defaultContext, - DefaultContext, RequestHandler, RequestHandlerDefaultInfo, ResponseResolver, @@ -29,27 +21,6 @@ import { devUtils } from '../utils/internal/devUtils' export type ExpectedOperationTypeNode = OperationTypeNode | 'all' export type GraphQLHandlerNameSelector = DocumentNode | RegExp | string -// GraphQL related context should contain utility functions -// useful for GraphQL. Functions like `xml()` bear no value -// in the GraphQL universe. -export type GraphQLContext> = - DefaultContext & { - data: GraphQLPayloadContext - extensions: GraphQLPayloadContext - errors: typeof errors - cookie: typeof cookie - field: typeof field - } - -export const graphqlContext: GraphQLContext = { - ...defaultContext, - data, - extensions, - errors, - cookie, - field, -} - export type GraphQLVariables = Record export interface GraphQLHandlerInfo extends RequestHandlerDefaultInfo { @@ -95,7 +66,7 @@ export class GraphQLHandler extends RequestHandler< operationType: ExpectedOperationTypeNode, operationName: GraphQLHandlerNameSelector, endpoint: Path, - resolver: ResponseResolver, GraphQLResolverExtras>, + resolver: ResponseResolver>, ) { let resolvedOperationName = operationName @@ -128,7 +99,6 @@ export class GraphQLHandler extends RequestHandler< operationType, operationName: resolvedOperationName, }, - ctx: graphqlContext, resolver, }) diff --git a/src/handlers/RequestHandler.ts b/src/handlers/RequestHandler.ts index c8023cde1..0f3befaa7 100644 --- a/src/handlers/RequestHandler.ts +++ b/src/handlers/RequestHandler.ts @@ -1,23 +1,8 @@ import { invariant } from 'outvariant' -import { MaybePromise } from '../response' import { getCallFrame } from '../utils/internal/getCallFrame' import { isIterable } from '../utils/internal/isIterable' -import { status } from '../context/status' -import { set } from '../context/set' -import { delay } from '../context/delay' import { type ResponseResolutionContext } from '../utils/getResponse' - -export type DefaultContext = { - status: typeof status - set: typeof set - delay: typeof delay -} - -export const defaultContext: DefaultContext = { - status, - set, - delay, -} +import { type MaybePromise } from '../typeUtils' export type DefaultRequestMultipartBody = Record< string, @@ -41,8 +26,6 @@ export interface RequestHandlerInternalInfo { callFrame?: string } -type ContextMap = Record) => any> - export type ResponseResolverReturnType = Response | undefined | void export type MaybeAsyncResponseResolverReturnType = @@ -57,25 +40,21 @@ export type AsyncResponseResolverReturnType = > export type ResponseResolverInfo< - ContextType, ResolverExtraInfo extends Record, > = { request: Request - ctx: ContextType } & ResolverExtraInfo export type ResponseResolver< - ContextType extends ContextMap = typeof defaultContext, ResolverExtraInfo extends Record = Record, > = ( - info: ResponseResolverInfo, + info: ResponseResolverInfo, ) => AsyncResponseResolverReturnType export interface RequestHandlerOptions extends RequestHandlerPublicOptions { info: HandlerInfo - resolver: ResponseResolver - ctx?: ContextMap + resolver: ResponseResolver } export interface RequestHandlerPublicOptions { @@ -103,19 +82,16 @@ export abstract class RequestHandler< */ public isUsed: boolean - private once: boolean - private ctx: ContextMap + protected resolver: ResponseResolver private resolverGenerator?: Generator< MaybeAsyncResponseResolverReturnType, MaybeAsyncResponseResolverReturnType, MaybeAsyncResponseResolverReturnType > private resolverGeneratorResult?: ResponseResolverReturnType - - protected resolver: ResponseResolver + private once: boolean constructor(options: RequestHandlerOptions) { - this.ctx = options.ctx || defaultContext this.resolver = options.resolver this.once = options.once || false @@ -217,7 +193,6 @@ export abstract class RequestHandler< const mockedResponse = (await executeResolver({ ...resolverExtras, request, - ctx: this.ctx, })) as Response const executionResult = this.createExecutionResult( @@ -230,8 +205,8 @@ export abstract class RequestHandler< } private wrapResolver( - resolver: ResponseResolver, - ): ResponseResolver { + resolver: ResponseResolver, + ): ResponseResolver { return async (info): Promise => { const result = this.resolverGenerator || (await resolver(info)) diff --git a/src/handlers/RestHandler.test.ts b/src/handlers/RestHandler.test.ts index 7d5109e8b..21b9923d8 100644 --- a/src/handlers/RestHandler.test.ts +++ b/src/handlers/RestHandler.test.ts @@ -3,7 +3,6 @@ */ import { RestHandler, - RestContext, RestRequestResolverExtras, RestRequestParsedResult, } from './RestHandler' @@ -14,7 +13,6 @@ import { } from './RequestHandler' const resolver: ResponseResolver< - RestContext, RestRequestResolverExtras<{ userId: string }> > = ({ params }) => { return HttpResponse.json({ userId: params.userId }) diff --git a/src/handlers/RestHandler.ts b/src/handlers/RestHandler.ts index ca4d68b44..cac728fb2 100644 --- a/src/handlers/RestHandler.ts +++ b/src/handlers/RestHandler.ts @@ -1,4 +1,3 @@ -import { body, cookie, json, text, xml } from '../context' import { ResponseResolutionContext } from '../utils/getResponse' import { devUtils } from '../utils/internal/devUtils' import { isStringEqual } from '../utils/internal/isStringEqual' @@ -16,8 +15,6 @@ import { getPublicUrlFromRequest } from '../utils/request/getPublicUrlFromReques import { getAllRequestCookies } from '../utils/request/getRequestCookies' import { cleanUrl, getSearchParams } from '../utils/url/cleanUrl' import { - defaultContext, - DefaultContext, RequestHandler, RequestHandlerDefaultInfo, RequestHandlerPublicOptions, @@ -41,25 +38,6 @@ export enum RESTMethods { DELETE = 'DELETE', } -// Declaring a context interface infers -// JSDoc description of the referenced utils. -export type RestContext = DefaultContext & { - cookie: typeof cookie - text: typeof text - body: typeof body - json: typeof json - xml: typeof xml -} - -export const restContext: RestContext = { - ...defaultContext, - cookie, - body, - text, - json, - xml, -} - export type RequestQuery = { [queryName: string]: string } @@ -86,7 +64,7 @@ export class RestHandler extends RequestHandler< constructor( method: RestHandlerMethod, path: Path, - resolver: ResponseResolver>, + resolver: ResponseResolver>, options?: RequestHandlerPublicOptions, ) { super({ @@ -95,7 +73,6 @@ export class RestHandler extends RequestHandler< path, method, }, - ctx: restContext, resolver, once: options?.once, }) diff --git a/src/index.ts b/src/index.ts index a93dde640..1e215aa0d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,19 +1,11 @@ -import * as context from './context' -export { context } - export { setupWorker } from './setupWorker/setupWorker' -export { - response, - defaultResponse, - createResponseComposition, -} from './response' /* Request handlers */ -export { RequestHandler, defaultContext } from './handlers/RequestHandler' +export { RequestHandler } from './handlers/RequestHandler' export { rest } from './rest' -export { RestHandler, RESTMethods, restContext } from './handlers/RestHandler' +export { RestHandler, RESTMethods } from './handlers/RestHandler' export { graphql } from './graphql' -export { GraphQLHandler, graphqlContext } from './handlers/GraphQLHandler' +export { GraphQLHandler } from './handlers/GraphQLHandler' /* Utils */ export { matchRequestUrl } from './utils/matching/matchRequestUrl' @@ -36,28 +28,18 @@ export type { } from './handlers/RequestHandler' export type { - MockedResponse, - ResponseTransformer, - ResponseComposition, - ResponseCompositionOptions, - ResponseFunction, -} from './response' - -export type { - RestContext, RequestQuery, RestRequestParsedResult, } from './handlers/RestHandler' export type { - GraphQLContext, GraphQLVariables, GraphQLRequestBody, GraphQLJsonRequestBody, } from './handlers/GraphQLHandler' export type { Path, PathParams, Match } from './utils/matching/matchRequestUrl' -export type { DelayMode } from './context/delay' +export type { DelayMode } from './delay' export { ParsedGraphQLRequest } from './utils/internal/parseGraphQLRequest' export * from './utils/HttpResponse' diff --git a/src/response.ts b/src/response.ts deleted file mode 100644 index e77ffbd77..000000000 --- a/src/response.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { Headers } from 'headers-polyfill' -import { DefaultBodyType } from './handlers/RequestHandler' -import { compose } from './utils/internal/compose' -import { NetworkError } from './NetworkError' - -export type MaybePromise = ValueType | Promise - -/** - * Internal representation of a mocked response instance. - */ -export interface MockedResponse { - body: BodyType - status: number - statusText: string - headers: Headers - once: boolean - passthrough: boolean - delay?: number -} - -export type ResponseTransformer< - BodyType extends TransformerBodyType = any, - TransformerBodyType extends DefaultBodyType = any, -> = ( - res: MockedResponse, -) => MaybePromise> - -export type ResponseFunction = ( - ...transformers: ResponseTransformer[] -) => MaybePromise> - -export type ResponseComposition = - ResponseFunction & { - /** - * Respond using a given mocked response to the first captured request. - * Does not affect any subsequent captured requests. - */ - once: ResponseFunction - networkError: (message: string) => void - } - -export const defaultResponse: Omit = { - status: 200, - statusText: 'OK', - body: null, - delay: 0, - once: false, - passthrough: false, -} - -export type ResponseCompositionOptions = { - defaultTransformers?: ResponseTransformer[] - mockedResponseOverrides?: Partial -} - -export const defaultResponseTransformers: ResponseTransformer[] = [] - -export function createResponseComposition( - responseOverrides?: Partial>, - defaultTransformers: ResponseTransformer[] = defaultResponseTransformers, -): ResponseFunction { - return async (...transformers) => { - const initialResponse: MockedResponse = Object.assign( - {}, - defaultResponse, - { - headers: new Headers({ - 'x-powered-by': 'msw', - }), - }, - responseOverrides, - ) - - const resolvedTransformers = [ - ...defaultTransformers, - ...transformers, - ].filter(Boolean) - - const resolvedResponse = - resolvedTransformers.length > 0 - ? compose(...resolvedTransformers)(initialResponse) - : initialResponse - - return resolvedResponse - } -} - -export const response = Object.assign(createResponseComposition(), { - once: createResponseComposition({ once: true }), - networkError(message: string) { - throw new NetworkError(message) - }, -}) diff --git a/src/rest.ts b/src/rest.ts index 41d868c7c..6988bdcdb 100644 --- a/src/rest.ts +++ b/src/rest.ts @@ -4,7 +4,6 @@ import { } from './handlers/RequestHandler' import { RESTMethods, - type RestContext, RestHandler, RestRequestResolverExtras, } from './handlers/RestHandler' @@ -18,7 +17,7 @@ function createRestHandler( // ResponseBody extends DefaultBodyType = DefaultBodyType, >( path: Path, - resolver: ResponseResolver>, + resolver: ResponseResolver>, options: RequestHandlerPublicOptions = {}, ) => { return new RestHandler(method, path, resolver, options) diff --git a/src/typeUtils.ts b/src/typeUtils.ts index d9310465d..8e878be22 100644 --- a/src/typeUtils.ts +++ b/src/typeUtils.ts @@ -1,7 +1,7 @@ -import { ResponseTransformer } from './response' - type Fn = (...arg: any[]) => any +export type MaybePromise = T | Promise + export type RequiredDeep< Type, U extends Record | Fn | undefined = undefined, @@ -18,7 +18,3 @@ export type RequiredDeep< : RequiredDeep, U> } : Type - -export type GraphQLPayloadContext> = ( - payload: QueryType, -) => ResponseTransformer From 547eecb61c3d37369a3178f0dc8ca49fc68cb61d Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 17 Oct 2022 02:05:59 +0200 Subject: [PATCH 026/210] docs: add the migration guide --- MIGRATING.md | 390 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 390 insertions(+) create mode 100644 MIGRATING.md diff --git a/MIGRATING.md b/MIGRATING.md new file mode 100644 index 000000000..94d3f187c --- /dev/null +++ b/MIGRATING.md @@ -0,0 +1,390 @@ +# Migration guide + +## Response resolver + +A response resolver now exposes a single object argument instead of `(req, res, ctx)`. That argument represents resolver information and consists of properties that are always present for all handler types and extra properties specific to handler types. + +### Resolver info + +#### General + +- `request`, a Fetch API `Request` instance representing a captured request. +- `cookies`, a parsed cookies object based on the request cookies. + +#### REST-specific + +- `params`, an object of parsed path parameters. + +#### GraphQL-specific + +- `query`, a GraphQL query string extracted from either URL search parameters or a POST request body. +- `variables`, an object of GraphQL query variables. + +### Using a new signature + +To mock responses, you should now return a Fetch API `Response` instance from the response resolver. You no longer need to compose a response via `res()`, and all the context utilities have also [been removed](#context-utilities). + +```js +rest.get('/greet/:name', ({ request, params }) => { + console.log('Captured %s %s', request.method, request.url) + return new Response(`hello, ${params.name}!`) +}) +``` + +Now, a more complex example for both REST and GraphQL requests. + +```js +import { rest, graphql } from 'msw' + +export const handlers = [ + rest.put('/user/:id', async ({ request, params, cookies }) => { + // Read request body as you'd normally do with Fetch. + const payload = await request.json() + // Access path parameters like before. + const { id } = params + // Access cookies like before. + const { sessionId } = cookies + + return new Response(null, { status: 201 }) + }), + + graphql.mutation('CreateUser', ({ request, query, variables }) => { + return new Response( + JSON.stringify({ + data: { + user: { + id: 'abc-123', + firstName: variables.firstName, + }, + }, + }), + { + headers: { + 'Content-Type': 'application/json', + }, + }, + ) + }), +] +``` + +### Request changes + +Since the returned `request` is now an instance of Fetch API `Request`, there are some changes to its properties. + +#### Request URL + +The `request.url` property is a string (previously, a `URL` instance). If you wish to operate with it like a `URL`, you need to construct it manually: + +```js +rest.get('/product', ({ request }) => { + // For example, this is how you would access + // request search parameters now. + const url = new URL(request.url) + const productId = url.searchParams.get('id') +}) +``` + +#### Path parameters + +Path parameters are now exposed directly on the [Resolver info](#resolver-info) object (previously, `req.params`). + +#### Request cookies + +Request cookies are now exposed directly on the [Resolver info](#resolver-info) object (previously, `req.cookies`). + +#### Request body + +The library now does no assumptions when reading the intercepted request's body (previously, `req.body`). Instead, you are in charge to read the request body as you see appropriate. + +> Note that since the intercepted request is now represented by a Fetch API `Request` instance, its `request.body` property still exists but returns a `ReadableStream`. + +For example, this is how you would read request body: + +```js +rest.post('/user', async ({ request }) => { + const nextUser = await request.json() + // request.formData() / request.arrayBuffer() / etc. +}) +``` + +### Convenient response declarations + +Using the Fetch API `Response` instance may get quite verbose. To give you more convenient means of declaring mocked responses while remaining specification compliant and compatible, the library now exports an `HttpResponse` object. You can use that object to construct response instances faster. + +```js +import { rest, HttpResponse } from 'msw' + +export const handlers = [ + rest.get('/user', () => { + // This is synonymous to "ctx.json()": + // HttpResponse.json() stringifies the given body + // and sets the correct "Content-Type" response header + // to describe a JSON response body. + return HttpResponse.json({ firstName: 'John' }) + }), +] +``` + +> Read more on how to use `HttpResponse` to mock [REST API](#rest-response-body-utilities) and [GraphQL API](#graphql-response-body-utilities) responses. + +## Responses in Node.js + +Although MSW now respects the Fetch API specification, the older versions of Node.js do not, so you can't construct a `Response` instance because there is no such global class. + +To account for this, the library exports a `Response` class that you should use when declaring request handlers. Behind the hood, that response class is resolved to a compatible polyfill in Node.js; in the browser, it only aliases `global.Response` without introducing additional behaviors. + +```js +import { rest, Response } from 'msw' + +setupServer( + rest.get('/ping', () => { + return new Response('hello world) + }) +) +``` + +Relying on a single universal `Response` class will allow you to write request handlers that can run in both browser and Node.js environments. + +## One-time responses + +To create a one-time request handler, pass it an object as the third argument with `once: true` set: + +```js +import { HttpResponse, rest } from 'msw' + +export const handlers = [ + rest.get('/user', () => HttpResponse.text('hello'), { once: true }), +] +``` + +## Passthrough responses + +```js +import { passthrough } from 'msw' + +export const handlers = [ + rest.get('/user', () => { + // Previously, "req.passthrough()". + return passthrough() + }), +] +``` + +--- + +## Context utilities + +Most of the context utilities you'd normally use via `ctx.*` were removed. Instead, we encourage you to set respective properties directly on the response instance: + +```js +import { HttpResponse, rest } from 'msw' + +export const handlers = [ + rest.post('/user', () => { + // ctx.json() + return HttpResponse.json( + { firstName: 'John' }, + { + status: 201, // ctx.status() + headers: { + 'X-Custom-Header': 'value', // ctx.set() + }, + }, + ) + }), +] +``` + +### REST response body utilities + +All response body utilities, like `ctx.body()`, `ctx.text()`, `ctx.json()`, etc., were removed in favor of constructing a correct `Response` instance. However, since `Response` declarations may get verbose, the library now exports a `HttpResponse` abstraction to help you construct mocked responses with different body types easier. + +```js +import { HttpResponse, rest } from 'msw' + +export const handlers = [ + rest.get('/body', () => { + // You can construct mocked responses with + // arbitrary bodies via a direct Response instance. + return new Response('raw-body', { + headers: { + 'Content-Type': 'application/vnd.acme+json', + }, + }) + }), + rest.get('/text', () => { + return HttpResponse.text('hello world') + }), + rest.get('/json', () => { + return HttpResponse.json({ firstName: 'John' }) + }), + rest.get('/xml', () => { + return HttpResponse.xml({ firstName: 'John' }) + }), +] +``` + +> In addition, you can now mock other response bodies like `formData` or `blob` by accessing the respective methods on the `HttpResponse` object. + +### GraphQL response body utilities + +GraphQL context utilities have been removed in favor of constructing a correct JSON response instance. + +```js +import { HttpResponse, graphql } from 'msw' + +export const handlers = [ + graphql.query('GetUser', ({ variables }) => { + return HttpResponse.json({ + data: { + // ctx.data() + user: { + id: variables.id, + firstName: 'John', + }, + }, + // ctx.errors() + errors: [ + { + message: 'Failed to fetch "user.posts"', + }, + ], + extensions: { + // ctx.extensions() + server: 'HTTP1.1 Apache', + }, + }) + }), +] +``` + +### `ctx.delay()` + +You can delay a mocked response by awaiting the `delay()` function: + +```js +import { rest, delay } from 'msw' + +export const handlers = [ + rest.post('/user', async () => { + await delay() + }), +] +``` + +> The `delay()` function has the same call signature as the `ctx.delay()` used to have. + +### `ctx.fetch()` + +The `ctx.fetch()` function has been removed in favor of the `bypass()` function. You should now always perform a regular `fetch()` call and wrap the request in the `bypass()` function if you wish for it to ignore any otherwise matching request handlers. + +```js +import { rest, bypass } from 'msw' + +export const handlers = [ + rest.get('https://api.github.com/user/:username', async ({ request }) => { + // Performs an original "GET" request to the GitHub REST API. + const original = await fetch(bypass(request)) + }), +] +``` + +### `ctx.cookie()` + +Please set the "Set-Cookie" response header in order to mock response cookies. + +```js +import { HttpResponse, rest } from 'msw' + +export const handlers = [ + rest.post('/login', () => { + return HttpResponse.text(null, { + headers: { + 'Set-Cookie': 'sessionId=abc123', + }, + }) + }), +] +``` + +Since Fetch API Headers do not support multiple values as the `HeadersInit`, to mock a multi-value response cookie create a `Headers` instance and use the `.append()` method to set multiple `Set-Cookie` response headers. + +```js +import { Headers, HttpResponse, rest } from 'msw' + +rest.post('/login', () => { + const headers = new Headers() + headers.append('Set-Cookie', 'sessionId=123') + headers.append('Set-Cookie', 'gtm=en_US') + + return HttpResponse.plain(null, { headers }) +}) +``` + +## Life-cycle events + +The request and response instances exposed in the life-cycle API have also been updated to return Fetch API `Request` and `Response` respectively. + +The request ID is now exposed as a standalone argument (previously, `req.id`). + +```js +server.events.on('request:start', (request, requestId) => { + console.log(request.method, request.url) +}) +``` + +To read a request body, make sure to clone the request first. Otherwise, it won't be performed as it would be already read. + +```js +server.events.on('request:match', async (request) => { + // Make sure to clone the request so it could be + // processed further down the line. + const clone = request.clone() + const json = await clone.json() + + console.log('Performed request with body:', json) +}) +``` + +--- + +## Advanced + +It is still possible to create custom handlers and resolvers, just make sure to account for the new [resolver call signature](#response-resolver). + +### Custom response composition + +As this release removes the concept of response composition via `res()`, you can no longer compose context utilities or abstract their partial composed state to a helper function. + +Instead, you can abstract a common response logic into a plain function and always returns a `Response` instance. + +```js +// utils.js +import { Response } from 'msw' + +export function augmentResponse() { + const response = new Resopnse() + response.headers.set('X-Response-Source', 'mocks') + return response +} +``` + +```js +import { rest, HttpResponse } from 'msw' +import { augmentResponse } from './utils' + +export const handlers = [ + rest.get('/user', () => { + return augmentResponse(HttpResponse.json({ id: 1 })) + }), +] +``` + +--- + +## Common issues + +### `Response is not defined` + +Make sure to import the `Response` class from the `msw` package. See [this](#responses-in-nodejs). From e8fca8bb0b9fda3edc3a099894195d8b10eb2473 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 17 Oct 2022 15:41:51 +0200 Subject: [PATCH 027/210] feat: support response body type generic --- src/handlers/RequestHandler.ts | 43 ++++++++++++++++++++-------------- src/handlers/RestHandler.ts | 3 ++- src/rest.ts | 9 +++++-- src/utils/HttpResponse.ts | 21 +++++++++++++---- test/typings/rest.test-d.ts | 31 +++++++++++++++++++++++- 5 files changed, 81 insertions(+), 26 deletions(-) diff --git a/src/handlers/RequestHandler.ts b/src/handlers/RequestHandler.ts index 0f3befaa7..405bf71ef 100644 --- a/src/handlers/RequestHandler.ts +++ b/src/handlers/RequestHandler.ts @@ -3,6 +3,7 @@ import { getCallFrame } from '../utils/internal/getCallFrame' import { isIterable } from '../utils/internal/isIterable' import { type ResponseResolutionContext } from '../utils/getResponse' import { type MaybePromise } from '../typeUtils' +import { type StrictResponse } from '../utils/HttpResponse' export type DefaultRequestMultipartBody = Record< string, @@ -26,17 +27,22 @@ export interface RequestHandlerInternalInfo { callFrame?: string } -export type ResponseResolverReturnType = Response | undefined | void +export type ResponseResolverReturnType = + | Response + | StrictResponse + | undefined + | void -export type MaybeAsyncResponseResolverReturnType = - MaybePromise +export type MaybeAsyncResponseResolverReturnType< + BodyType extends DefaultBodyType, +> = MaybePromise> -export type AsyncResponseResolverReturnType = - | MaybeAsyncResponseResolverReturnType +export type AsyncResponseResolverReturnType = + | MaybeAsyncResponseResolverReturnType | Generator< - MaybeAsyncResponseResolverReturnType, - MaybeAsyncResponseResolverReturnType, - MaybeAsyncResponseResolverReturnType + MaybeAsyncResponseResolverReturnType, + MaybeAsyncResponseResolverReturnType, + MaybeAsyncResponseResolverReturnType > export type ResponseResolverInfo< @@ -47,9 +53,10 @@ export type ResponseResolverInfo< export type ResponseResolver< ResolverExtraInfo extends Record = Record, + ResponseBodyType extends DefaultBodyType = DefaultBodyType, > = ( info: ResponseResolverInfo, -) => AsyncResponseResolverReturnType +) => AsyncResponseResolverReturnType export interface RequestHandlerOptions extends RequestHandlerPublicOptions { @@ -82,13 +89,13 @@ export abstract class RequestHandler< */ public isUsed: boolean - protected resolver: ResponseResolver + protected resolver: ResponseResolver private resolverGenerator?: Generator< - MaybeAsyncResponseResolverReturnType, - MaybeAsyncResponseResolverReturnType, - MaybeAsyncResponseResolverReturnType + MaybeAsyncResponseResolverReturnType, + MaybeAsyncResponseResolverReturnType, + MaybeAsyncResponseResolverReturnType > - private resolverGeneratorResult?: ResponseResolverReturnType + private resolverGeneratorResult?: ResponseResolverReturnType private once: boolean constructor(options: RequestHandlerOptions) { @@ -206,11 +213,13 @@ export abstract class RequestHandler< private wrapResolver( resolver: ResponseResolver, - ): ResponseResolver { - return async (info): Promise => { + ): ResponseResolver { + return async ( + info, + ): Promise | Response | undefined | void> => { const result = this.resolverGenerator || (await resolver(info)) - if (isIterable(result)) { + if (isIterable>(result)) { // Immediately mark this handler as unused. // Only when the generator is done, the handler will be // considered used. diff --git a/src/handlers/RestHandler.ts b/src/handlers/RestHandler.ts index cac728fb2..897fa65af 100644 --- a/src/handlers/RestHandler.ts +++ b/src/handlers/RestHandler.ts @@ -15,6 +15,7 @@ import { getPublicUrlFromRequest } from '../utils/request/getPublicUrlFromReques import { getAllRequestCookies } from '../utils/request/getRequestCookies' import { cleanUrl, getSearchParams } from '../utils/url/cleanUrl' import { + DefaultBodyType, RequestHandler, RequestHandlerDefaultInfo, RequestHandlerPublicOptions, @@ -64,7 +65,7 @@ export class RestHandler extends RequestHandler< constructor( method: RestHandlerMethod, path: Path, - resolver: ResponseResolver>, + resolver: ResponseResolver, DefaultBodyType>, options?: RequestHandlerPublicOptions, ) { super({ diff --git a/src/rest.ts b/src/rest.ts index 6988bdcdb..ca16e90d7 100644 --- a/src/rest.ts +++ b/src/rest.ts @@ -1,4 +1,5 @@ import { + DefaultBodyType, type RequestHandlerPublicOptions, type ResponseResolver, } from './handlers/RequestHandler' @@ -14,10 +15,14 @@ function createRestHandler( ) { return < Params extends PathParams = PathParams, - // ResponseBody extends DefaultBodyType = DefaultBodyType, + _RequestBodyType extends DefaultBodyType = DefaultBodyType, + ResponseBodyType extends DefaultBodyType = DefaultBodyType, >( path: Path, - resolver: ResponseResolver>, + resolver: ResponseResolver< + RestRequestResolverExtras, + ResponseBodyType + >, options: RequestHandlerPublicOptions = {}, ) => { return new RestHandler(method, path, resolver, options) diff --git a/src/utils/HttpResponse.ts b/src/utils/HttpResponse.ts index 744250a4f..0c79e3e2c 100644 --- a/src/utils/HttpResponse.ts +++ b/src/utils/HttpResponse.ts @@ -1,6 +1,7 @@ import httpStatusTexts from 'statuses/codes.json' import { Headers } from 'headers-polyfill' import { Response } from '../fetch' +import { type DefaultBodyType } from '../handlers/RequestHandler' export interface HttpResponseInit extends ResponseInit { type?: ResponseType @@ -12,6 +13,16 @@ export interface HttpResponseDecoratedInit extends HttpResponseInit { headers: Headers } +declare const responseBodyType: unique symbol + +/** + * Opaque `Response` type that supports strict body type. + */ +export interface StrictResponse + extends Response { + readonly [responseBodyType]: BodyType +} + export const HttpResponse = { plain( body?: BodyType, @@ -30,7 +41,7 @@ export const HttpResponse = { text( body?: BodyType | null, init?: HttpResponseInit, - ): Response { + ): StrictResponse { const responseInit = decorateResponseInit(init) responseInit.headers.set('Content-Type', 'text/plain') return createResponse(body, responseInit) @@ -48,7 +59,7 @@ export const HttpResponse = { | Array | boolean | number, - >(body?: BodyType | null, init?: HttpResponseInit): Response { + >(body?: BodyType | null, init?: HttpResponseInit): StrictResponse { const responseInit = decorateResponseInit(init) responseInit.headers.set('Content-Type', 'application/json') return createResponse(JSON.stringify(body), responseInit) @@ -78,7 +89,7 @@ export const HttpResponse = { * * HttpResponse.arrayBuffer(buffer) */ - arrayBuffer(body?: ArrayBuffer, init?: HttpResponseInit): Response { + arrayBuffer(body?: ArrayBuffer, init?: HttpResponseInit) { const responseInit = decorateResponseInit(init) if (body) { @@ -105,10 +116,10 @@ export const HttpResponse = { function createResponse( body: BodyInit | null | undefined, init: HttpResponseDecoratedInit, -): Response { +): StrictResponse { const response = new Response(body, init) decorateResponse(response, init) - return response + return response as StrictResponse } function decorateResponseInit( diff --git a/test/typings/rest.test-d.ts b/test/typings/rest.test-d.ts index dabe4dd68..026b12e27 100644 --- a/test/typings/rest.test-d.ts +++ b/test/typings/rest.test-d.ts @@ -1,4 +1,33 @@ -import { rest } from 'msw' +import { rest, HttpResponse } from 'msw' + +/** + * Response body generic. + */ +rest.get('/user', () => { + return HttpResponse.json({ id: 1 }) +}) + +rest.get( + '/user', + // @ts-expect-error String not assignable to number + () => HttpResponse.json({ id: 'invalid' }), +) + +rest.get( + '/user', + // @ts-expect-error Missing property "id" + () => HttpResponse.json({}), +) + +rest.get( + '/user', + // @ts-expect-error Unknown property "invalid" + () => HttpResponse.json({ id: 1, invalid: true }), +) + +// +// +// rest.get('/user', (req, res, ctx) => { // @ts-expect-error `session` property is not defined on the request body type. From 6771bb365a077854e177793d3d37c4b9ea2b7d9d Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 17 Oct 2022 15:42:29 +0200 Subject: [PATCH 028/210] fix(HttpResponse): accept "string" as input to ".json()" --- src/utils/HttpResponse.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/utils/HttpResponse.ts b/src/utils/HttpResponse.ts index 0c79e3e2c..f1a8d629c 100644 --- a/src/utils/HttpResponse.ts +++ b/src/utils/HttpResponse.ts @@ -58,7 +58,8 @@ export const HttpResponse = { | Record | Array | boolean - | number, + | number + | string, >(body?: BodyType | null, init?: HttpResponseInit): StrictResponse { const responseInit = decorateResponseInit(init) responseInit.headers.set('Content-Type', 'application/json') From a4adce0dbc815fe83889725ad2d2eb4dbdbea28b Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 17 Oct 2022 15:54:20 +0200 Subject: [PATCH 029/210] feat: support strict request body type --- src/handlers/RequestHandler.ts | 12 +++++++----- src/handlers/RestHandler.ts | 6 +++++- src/rest.ts | 3 ++- src/utils/HttpResponse.ts | 9 +++++++-- test/typings/rest.test-d.ts | 28 ++++++++++++++++++++++------ 5 files changed, 43 insertions(+), 15 deletions(-) diff --git a/src/handlers/RequestHandler.ts b/src/handlers/RequestHandler.ts index 405bf71ef..54b90db33 100644 --- a/src/handlers/RequestHandler.ts +++ b/src/handlers/RequestHandler.ts @@ -3,7 +3,7 @@ import { getCallFrame } from '../utils/internal/getCallFrame' import { isIterable } from '../utils/internal/isIterable' import { type ResponseResolutionContext } from '../utils/getResponse' import { type MaybePromise } from '../typeUtils' -import { type StrictResponse } from '../utils/HttpResponse' +import { StrictRequest, type StrictResponse } from '../utils/HttpResponse' export type DefaultRequestMultipartBody = Record< string, @@ -47,15 +47,17 @@ export type AsyncResponseResolverReturnType = export type ResponseResolverInfo< ResolverExtraInfo extends Record, + RequestBodyType extends DefaultBodyType = DefaultBodyType, > = { - request: Request + request: StrictRequest } & ResolverExtraInfo export type ResponseResolver< ResolverExtraInfo extends Record = Record, + RequestBodyType extends DefaultBodyType = DefaultBodyType, ResponseBodyType extends DefaultBodyType = DefaultBodyType, > = ( - info: ResponseResolverInfo, + info: ResponseResolverInfo, ) => AsyncResponseResolverReturnType export interface RequestHandlerOptions @@ -167,7 +169,7 @@ export abstract class RequestHandler< * using the given resolver function. */ public async run( - request: Request, + request: StrictRequest, resolutionContext?: ResponseResolutionContext, ): Promise | null> { if (this.isUsed && this.once) { @@ -213,7 +215,7 @@ export abstract class RequestHandler< private wrapResolver( resolver: ResponseResolver, - ): ResponseResolver { + ): ResponseResolver { return async ( info, ): Promise | Response | undefined | void> => { diff --git a/src/handlers/RestHandler.ts b/src/handlers/RestHandler.ts index 897fa65af..3a65823af 100644 --- a/src/handlers/RestHandler.ts +++ b/src/handlers/RestHandler.ts @@ -65,7 +65,11 @@ export class RestHandler extends RequestHandler< constructor( method: RestHandlerMethod, path: Path, - resolver: ResponseResolver, DefaultBodyType>, + resolver: ResponseResolver< + RestRequestResolverExtras, + any, + DefaultBodyType + >, options?: RequestHandlerPublicOptions, ) { super({ diff --git a/src/rest.ts b/src/rest.ts index ca16e90d7..139f5939a 100644 --- a/src/rest.ts +++ b/src/rest.ts @@ -15,12 +15,13 @@ function createRestHandler( ) { return < Params extends PathParams = PathParams, - _RequestBodyType extends DefaultBodyType = DefaultBodyType, + RequestBodyType extends DefaultBodyType = DefaultBodyType, ResponseBodyType extends DefaultBodyType = DefaultBodyType, >( path: Path, resolver: ResponseResolver< RestRequestResolverExtras, + RequestBodyType, ResponseBodyType >, options: RequestHandlerPublicOptions = {}, diff --git a/src/utils/HttpResponse.ts b/src/utils/HttpResponse.ts index f1a8d629c..736141fb5 100644 --- a/src/utils/HttpResponse.ts +++ b/src/utils/HttpResponse.ts @@ -13,14 +13,19 @@ export interface HttpResponseDecoratedInit extends HttpResponseInit { headers: Headers } -declare const responseBodyType: unique symbol +declare const bodyType: unique symbol /** * Opaque `Response` type that supports strict body type. */ export interface StrictResponse extends Response { - readonly [responseBodyType]: BodyType + readonly [bodyType]: BodyType +} + +export interface StrictRequest + extends Request { + json(): Promise } export const HttpResponse = { diff --git a/test/typings/rest.test-d.ts b/test/typings/rest.test-d.ts index 026b12e27..53a9d8990 100644 --- a/test/typings/rest.test-d.ts +++ b/test/typings/rest.test-d.ts @@ -1,5 +1,27 @@ import { rest, HttpResponse } from 'msw' +/** + * Request body generic. + */ +rest.post('/user', async ({ request }) => { + const data = await request.json() + data.id + + // @ts-expect-error Unknown property + data.unknown + + const text = await request.text() + text.toUpperCase() + // @ts-expect-error Text remains plain text. + text.id +}) + +rest.get('/user', async ({ request }) => { + const data = await request.json() + // @ts-expect-error Null is not an object + Object.keys(data) +}) + /** * Response body generic. */ @@ -19,12 +41,6 @@ rest.get( () => HttpResponse.json({}), ) -rest.get( - '/user', - // @ts-expect-error Unknown property "invalid" - () => HttpResponse.json({ id: 1, invalid: true }), -) - // // // From 490d2b848413e269164368bf442ff27cda123e84 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 17 Oct 2022 16:00:12 +0200 Subject: [PATCH 030/210] test: add path params types tests --- test/typings/path-params.test-d.ts | 55 -------------- test/typings/rest.test-d.ts | 113 ++++++++++++++--------------- 2 files changed, 53 insertions(+), 115 deletions(-) delete mode 100644 test/typings/path-params.test-d.ts diff --git a/test/typings/path-params.test-d.ts b/test/typings/path-params.test-d.ts deleted file mode 100644 index 60749efe4..000000000 --- a/test/typings/path-params.test-d.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { rest } from 'msw' - -rest.get('/user/:userId', (req) => { - req.params.userId - - // @ts-expect-error `unknown` is not defined in the request params type. - req.params.unknown -}) - -rest.get('/user/:id', (req, res, ctx) => { - const { userId } = req.params - - return res( - ctx.body( - // @ts-expect-error "userId" parameter is not annotated - // and is ambiguous (string | string[]). - userId, - ), - ) -}) - -rest.get< - never, - // @ts-expect-error Path parameters are always strings. - // Parse them to numbers in the resolver if necessary. - { id: number } ->('/posts/:id', () => null) - -/** - * Using interface as path parameters type. - */ -interface UserParamsInterface { - userId: string -} - -rest.get('/user/:userId', (req) => { - req.params.userId.toUpperCase() - - // @ts-expect-error Unknown path parameter "foo". - req.params.foo -}) - -/** - * Using type as path parameters type. - */ -type UserParamsType = { - userId: string -} - -rest.get('/user/:userId', (req) => { - req.params.userId.toUpperCase() - - // @ts-expect-error Unknown path parameter "foo". - req.params.foo -}) diff --git a/test/typings/rest.test-d.ts b/test/typings/rest.test-d.ts index 53a9d8990..241d4762a 100644 --- a/test/typings/rest.test-d.ts +++ b/test/typings/rest.test-d.ts @@ -1,5 +1,50 @@ import { rest, HttpResponse } from 'msw' +/** + * Request path parameters. + */ +rest.get<{ id: string }>('/user/:id', ({ params }) => { + params.id.toUpperCase() + + // @ts-expect-error Unknown path parameter + params.unknown +}) + +rest.get<{ a: string; b: string[] }>('/user/:a/:b/:b', ({ params }) => { + params.a.toUpperCase() + params.b.map((x) => x) + + // @ts-expect-error Unknown path parameter + params.unknown +}) + +// Supports path parameters declaration via type. +type UserPathParams = { id: string } +rest.get('/user/:id', ({ params }) => { + params.id.toUpperCase() + + // @ts-expect-error Unknown path parameter + params.unknown +}) + +// Supports path parameters declaration via interface. +interface PostPathParameters { + id: string +} +rest.get('/user/:id', ({ params }) => { + params.id.toUpperCase() + + // @ts-expect-error Unknown path parameter + params.unknown +}) + +rest.get('/user/:a/:b', ({ params }) => { + // @ts-expect-error Unknown path parameter + params.a.toUpperCase() + // @ts-expect-error Unknown path parameter + params.b.map((x) => x) +}) + /** * Request body generic. */ @@ -41,66 +86,14 @@ rest.get( () => HttpResponse.json({}), ) -// -// -// - -rest.get('/user', (req, res, ctx) => { - // @ts-expect-error `session` property is not defined on the request body type. - req.body.session - - res( - // @ts-expect-error JSON doesn't match given response body generic type. - ctx.json({ unknown: true }), - ) - - res( - // @ts-expect-error value types do not match - ctx.json({ postCount: 'this is not a number' }), - ) - - return res(ctx.json({ postCount: 2 })) -}) - -rest.post('/submit', () => null) - -rest.get< - any, - // @ts-expect-error `null` is not a valid response body type. - null ->('/user', () => null) - -rest.get('/user', (req, res, ctx) => - // allow ResponseTransformer to contain a more specific type - res(ctx.json({ label: true })), +// Response resolver can return a response body of a +// narrower type than defined in the generic. +rest.get('/user', () => + HttpResponse.json(['value']), ) -rest.get('/user', (req, res, ctx) => - // allow ResponseTransformer to return a narrower type than a given union - res(ctx.json('hello')), +// Response resolver can return a more specific type +// than provided in the response generic. +rest.get('/user', () => + HttpResponse.json({ label: true }), ) - -rest.head('/user', (req) => { - // @ts-expect-error GET requests cannot have body. - req.body.toString() -}) - -rest.head('/user', (req) => { - // @ts-expect-error GET requests cannot have body. - req.body.toString() -}) - -rest.get('/user', (req) => { - // @ts-expect-error GET requests cannot have body. - req.body.toString() -}) - -rest.get('/user', (req) => { - // @ts-expect-error GET requests cannot have body. - req.body.toString() -}) - -rest.post<{ userId: string }>('/user', (req) => { - req.body.userId.toUpperCase() -}) From 62a72893eacc1405844b7bf1262f102aa6e5d235 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 17 Oct 2022 16:09:20 +0200 Subject: [PATCH 031/210] feat(graphql): support strict response body type --- MIGRATING.md | 2 +- src/graphql.ts | 7 +++- src/handlers/GraphQLHandler.ts | 7 +++- .../setup-worker/response-logging.test.ts | 6 +-- test/typings/graphql.test-d.ts | 39 +++++++++++++++---- 5 files changed, 48 insertions(+), 13 deletions(-) diff --git a/MIGRATING.md b/MIGRATING.md index 94d3f187c..fd97f0bf3 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -364,7 +364,7 @@ Instead, you can abstract a common response logic into a plain function and alwa import { Response } from 'msw' export function augmentResponse() { - const response = new Resopnse() + const response = new Response() response.headers.set('X-Response-Source', 'mocks') return response } diff --git a/src/graphql.ts b/src/graphql.ts index a80c96659..6c1f7dc1a 100644 --- a/src/graphql.ts +++ b/src/graphql.ts @@ -6,6 +6,7 @@ import { ExpectedOperationTypeNode, GraphQLHandlerNameSelector, GraphQLResolverExtras, + GraphQLResponseBody, } from './handlers/GraphQLHandler' import { Path } from './utils/matching/matchRequestUrl' @@ -30,7 +31,11 @@ function createScopedGraphQLHandler( | GraphQLHandlerNameSelector | DocumentNode | TypedDocumentNode, - resolver: ResponseResolver>, + resolver: ResponseResolver< + GraphQLResolverExtras, + null, + GraphQLResponseBody + >, ) => { return new GraphQLHandler(operationType, operationName, url, resolver) } diff --git a/src/handlers/GraphQLHandler.ts b/src/handlers/GraphQLHandler.ts index 9ae9bfbe0..ce940b002 100644 --- a/src/handlers/GraphQLHandler.ts +++ b/src/handlers/GraphQLHandler.ts @@ -1,5 +1,6 @@ import type { DocumentNode, OperationTypeNode } from 'graphql' import { + DefaultBodyType, RequestHandler, RequestHandlerDefaultInfo, ResponseResolver, @@ -44,6 +45,10 @@ export interface GraphQLJsonRequestBody { variables?: Variables } +export interface GraphQLResponseBody { + data: BodyType +} + export function isDocumentNode( value: DocumentNode | any, ): value is DocumentNode { @@ -66,7 +71,7 @@ export class GraphQLHandler extends RequestHandler< operationType: ExpectedOperationTypeNode, operationName: GraphQLHandlerNameSelector, endpoint: Path, - resolver: ResponseResolver>, + resolver: ResponseResolver, any>, ) { let resolvedOperationName = operationName diff --git a/test/msw-api/setup-worker/response-logging.test.ts b/test/msw-api/setup-worker/response-logging.test.ts index 9b3e5f6c2..e5ad473e7 100644 --- a/test/msw-api/setup-worker/response-logging.test.ts +++ b/test/msw-api/setup-worker/response-logging.test.ts @@ -33,14 +33,14 @@ test('prints the response info to the console', async () => { // Must print the response summary to the console. expect(getResponseLogs(firstResponseLogRegexp)).toHaveLength(1) - const secondResopnseLogRegexp = createResponseLogRegexp('john.doe') + const secondResponseLogRegexp = createResponseLogRegexp('john.doe') await runtime.request('https://api.github.com/users/john.doe') - await waitForResponseLog(secondResopnseLogRegexp) + await waitForResponseLog(secondResponseLogRegexp) /** * Must not duplicate response logs for the current and previous requests. * @see https://github.com/mswjs/msw/issues/1411 */ - expect(getResponseLogs(secondResopnseLogRegexp)).toHaveLength(1) + expect(getResponseLogs(secondResponseLogRegexp)).toHaveLength(1) expect(getResponseLogs(firstResponseLogRegexp)).toHaveLength(1) }) diff --git a/test/typings/graphql.test-d.ts b/test/typings/graphql.test-d.ts index 93685fae7..b107b60e9 100644 --- a/test/typings/graphql.test-d.ts +++ b/test/typings/graphql.test-d.ts @@ -1,11 +1,36 @@ import { parse } from 'graphql' -import { - MockedRequest, - GraphQLRequest, - graphql, - GraphQLHandler, - GraphQLVariables, -} from 'msw' +import { graphql, GraphQLHandler, GraphQLVariables, HttpResponse } from 'msw' + +/** + * Response body type (GraphQL query type). + */ +// Returned mocked response body must satisfy the +// GraphQL query generic. +graphql.query<{ id: string }>('GetUser', () => { + return HttpResponse.json({ + data: { id: '2' }, + }) +}) + +graphql.query<{ id: string }>( + 'GetUser', + // @ts-expect-error "id" type is incorrect + () => { + return HttpResponse.json({ + data: { id: 123 }, + }) + }, +) + +graphql.query<{ id: string }>( + 'GetUser', + // @ts-expect-error response json is empty + () => HttpResponse.json({ data: {} }), +) + +/// +/// +/// graphql.query<{ key: string }>('', (req, res, ctx) => { return res( From 7a56a7de7bec6d2739c0c2a5bc6589aa5df4f043 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 18 Oct 2022 11:52:50 +0200 Subject: [PATCH 032/210] feat: support mock ReadableStream responses --- src/mockServiceWorker.js | 51 +++++++++---------- src/setupWorker/glossary.ts | 2 +- .../start/createRequestListener.ts | 16 ++---- .../start/createResponseListener.ts | 2 +- .../start/utils/createMessageChannel.ts | 14 ++++- test/rest-api/204-response.test.ts | 4 +- .../body/body-readable-stream.mocks.ts | 24 +++++++++ .../body/body-readable-stream.test.ts | 23 +++++++++ 8 files changed, 94 insertions(+), 42 deletions(-) create mode 100644 test/rest-api/response/body/body-readable-stream.mocks.ts create mode 100644 test/rest-api/response/body/body-readable-stream.test.ts diff --git a/src/mockServiceWorker.js b/src/mockServiceWorker.js index b51e3b252..72746e731 100644 --- a/src/mockServiceWorker.js +++ b/src/mockServiceWorker.js @@ -147,24 +147,27 @@ async function handleRequest(event, requestId) { if (client && activeClientIds.has(client.id)) { ;(async function () { const responseClone = response.clone() - sendToClient(client, { - type: 'RESPONSE', - payload: { - requestId, - type: responseClone.type, - ok: responseClone.ok, - status: responseClone.status, - statusText: responseClone.statusText, - /** - * @todo Send back the response buffer instead. - * I'm pretty sure we can clone the response and send - * its body as transferrable so we don't have to serialize it. - */ - body: responseClone.body === null ? null : await responseClone.text(), - headers: Object.fromEntries(responseClone.headers.entries()), - redirected: responseClone.redirected, + // When performing original requests, response body will + // always be a ReadableStream, even for 204 responses. + // But when creating a new Response instance on the client, + // the body for a 204 response must be null. + const responseBody = response.status === 204 ? null : responseClone.body + + sendToClient( + client, + { + type: 'RESPONSE', + payload: { + requestId, + type: responseClone.type, + status: responseClone.status, + statusText: responseClone.statusText, + body: responseBody, + headers: Object.fromEntries(responseClone.headers.entries()), + }, }, - }) + [responseBody], + ) })() } @@ -280,7 +283,7 @@ async function getResponse(event, client, requestId) { return passthrough() } -function sendToClient(client, message) { +function sendToClient(client, message, transferrables = []) { return new Promise((resolve, reject) => { const channel = new MessageChannel() @@ -292,17 +295,13 @@ function sendToClient(client, message) { resolve(event.data) } - client.postMessage(message, [channel.port2]) - }) -} - -function sleep(timeMs) { - return new Promise((resolve) => { - setTimeout(resolve, timeMs) + client.postMessage( + message, + [channel.port2].concat(transferrables.filter(Boolean)), + ) }) } async function respondWithMock(response) { - await sleep(response.delay) return new Response(response.body, response) } diff --git a/src/setupWorker/glossary.ts b/src/setupWorker/glossary.ts index 8653dd132..31b5de416 100644 --- a/src/setupWorker/glossary.ts +++ b/src/setupWorker/glossary.ts @@ -75,7 +75,7 @@ export type ServiceWorkerOutgoingEventTypes = | 'CLIENT_CLOSED' export interface StringifiedResponse extends ResponseInit { - body: string | ArrayBuffer | null + body: string | ReadableStream | null } /** diff --git a/src/setupWorker/start/createRequestListener.ts b/src/setupWorker/start/createRequestListener.ts index f91843ff7..cdf294586 100644 --- a/src/setupWorker/start/createRequestListener.ts +++ b/src/setupWorker/start/createRequestListener.ts @@ -55,28 +55,22 @@ export const createRequestListener = ( // ".log()" method of the request handler. const responseClone = response.clone() const responseInit = toResponseInit(response) - const responseBuffer = await response.arrayBuffer() - - // If the mocked response has no body, keep it that way. - // Sending an empty "ArrayBuffer" to the worker will cause - // the worker constructing "new Response(new ArrayBuffer(0))" - // which will throw on responses that must have no body (i.e. 204). - const responseBody = response.body == null ? null : responseBuffer + const responseStream = responseClone.body messageChannel.postMessage( 'MOCK_RESPONSE', { ...responseInit, - body: responseBody, + body: responseStream, }, // Transfer response's buffer so it could // be sent over to the worker. - [responseBuffer], + responseStream ? [responseStream] : undefined, ) if (!options.quiet) { - context.emitter.once('response:mocked', () => { - handler.log(request, responseClone, parsedRequest) + context.emitter.once('response:mocked', (response) => { + handler.log(request, response, parsedRequest) }) } }, diff --git a/src/setupWorker/start/createResponseListener.ts b/src/setupWorker/start/createResponseListener.ts index dcfb0d784..8b2e46da0 100644 --- a/src/setupWorker/start/createResponseListener.ts +++ b/src/setupWorker/start/createResponseListener.ts @@ -25,7 +25,7 @@ export function createResponseListener(context: SetupWorkerInternalContext) { return } - const response = new Response(responseJson.body || null, responseJson) + const response = new Response(responseJson.body, responseJson) const isMockedResponse = response.headers.get('x-powered-by') === 'msw' if (isMockedResponse) { diff --git a/src/setupWorker/start/utils/createMessageChannel.ts b/src/setupWorker/start/utils/createMessageChannel.ts index 19eaab58e..be4493ab5 100644 --- a/src/setupWorker/start/utils/createMessageChannel.ts +++ b/src/setupWorker/start/utils/createMessageChannel.ts @@ -12,7 +12,10 @@ export interface ServiceWorkerMessage< } interface WorkerChannelEventsMap { - MOCK_RESPONSE: [data: StringifiedResponse, transferable?: [ArrayBuffer]] + MOCK_RESPONSE: [ + data: StringifiedResponse, + transfer?: [ReadableStream], + ] NOT_FOUND: [] NETWORK_ERROR: [data: { name: string; message: string }] } @@ -25,6 +28,13 @@ export class WorkerChannel { ...rest: WorkerChannelEventsMap[Event] ): void { const [data, transfer] = rest - this.port.postMessage({ type: event, data }, { transfer }) + this.port.postMessage( + { type: event, data }, + { + // @ts-expect-error ReadableStream can be transferred + // but TypeScript doesn't acknowledge that. + transfer, + }, + ) } } diff --git a/test/rest-api/204-response.test.ts b/test/rest-api/204-response.test.ts index 7a2fc9c11..178ff1893 100644 --- a/test/rest-api/204-response.test.ts +++ b/test/rest-api/204-response.test.ts @@ -27,9 +27,11 @@ test('handles a 204 status response without Response instance exceptions', async }) const res = await runtime.request(server.http.makeUrl('/posts')) + const allHeaders = await res.allHeaders() // There must be no such exception: - // Failed to construct 'Response': Response with null body status cannot have body + // Failed to construct 'Response': Response with null body status cannot have body. expect(pageError).toBeUndefined() expect(res.status()).toBe(204) + expect(allHeaders).toHaveProperty('x-powered-by', 'Express') }) diff --git a/test/rest-api/response/body/body-readable-stream.mocks.ts b/test/rest-api/response/body/body-readable-stream.mocks.ts new file mode 100644 index 000000000..955075002 --- /dev/null +++ b/test/rest-api/response/body/body-readable-stream.mocks.ts @@ -0,0 +1,24 @@ +import { setupWorker, rest, HttpResponse, ReadableStream, delay } from 'msw' + +const encoder = new TextEncoder() + +const worker = setupWorker( + rest.get('/video', () => { + const stream = new ReadableStream({ + async start(controller) { + controller.enqueue(encoder.encode('hello')) + await delay(400) + controller.enqueue(encoder.encode('world')) + controller.close() + }, + }) + + return HttpResponse.plain(stream, { + headers: { + 'Content-Type': 'text/plain', + }, + }) + }), +) + +worker.start() diff --git a/test/rest-api/response/body/body-readable-stream.test.ts b/test/rest-api/response/body/body-readable-stream.test.ts new file mode 100644 index 000000000..a3a2e68b6 --- /dev/null +++ b/test/rest-api/response/body/body-readable-stream.test.ts @@ -0,0 +1,23 @@ +import { pageWith } from 'page-with' + +it('supports mocking ReadableStream responses', async () => { + const runtime = await pageWith({ + example: require.resolve('./body-readable-stream.mocks.ts'), + }) + + const res = await runtime.request('/video') + const body = await res.text() + + // Must respond with a stream. + expect(res.status()).toBe(200) + expect(body).toBe('helloworld') + expect(res.request().timing().responseEnd).toBeGreaterThanOrEqual(400) + + // Must print the response log, indicating that the response + // has been successfully cloned and read for this log. + expect(runtime.consoleSpy.get('startGroupCollapsed')).toEqual( + expect.arrayContaining([ + expect.stringMatching(/^\[MSW\] \d{2}:\d{2}:\d{2} GET \/video 200 OK$/), + ]), + ) +}) From f3ee2f4edbc3ab786521bcd03e17467bb949d93b Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 18 Oct 2022 12:28:58 +0200 Subject: [PATCH 033/210] feat: handle request body as ArrayBuffer --- src/handlers/RequestHandler.ts | 10 ++-- src/mockServiceWorker.js | 42 ++++++++------- src/setupWorker/glossary.ts | 8 +-- .../start/createRequestListener.ts | 14 ----- src/utils/request/parseWorkerRequest.ts | 6 --- src/utils/request/pruneGetRequestBody.test.ts | 51 ++++++++++++------- src/utils/request/pruneGetRequestBody.ts | 11 ++-- test/rest-api/request/body/body-json.test.ts | 1 - 8 files changed, 70 insertions(+), 73 deletions(-) diff --git a/src/handlers/RequestHandler.ts b/src/handlers/RequestHandler.ts index 54b90db33..d22e46685 100644 --- a/src/handlers/RequestHandler.ts +++ b/src/handlers/RequestHandler.ts @@ -183,9 +183,9 @@ export abstract class RequestHandler< const requestClone = request.clone() - const parsedResult = await this.parse(requestClone, resolutionContext) + const parsedResult = await this.parse(request.clone(), resolutionContext) const shouldInterceptRequest = this.predicate( - requestClone, + request.clone(), parsedResult, resolutionContext, ) @@ -198,14 +198,16 @@ export abstract class RequestHandler< // since it can be both an async function and a generator. const executeResolver = this.wrapResolver(this.resolver) - const resolverExtras = this.extendInfo(requestClone, parsedResult) + const resolverExtras = this.extendInfo(request, parsedResult) const mockedResponse = (await executeResolver({ ...resolverExtras, request, })) as Response const executionResult = this.createExecutionResult( - request, + // Pass the cloned request to the result so that logging + // and other consumers could read its body once more. + requestClone, parsedResult, mockedResponse, ) diff --git a/src/mockServiceWorker.js b/src/mockServiceWorker.js index 72746e731..1592afe69 100644 --- a/src/mockServiceWorker.js +++ b/src/mockServiceWorker.js @@ -240,26 +240,30 @@ async function getResponse(event, client, requestId) { } // Notify the client that a request has been intercepted. - const clientMessage = await sendToClient(client, { - type: 'REQUEST', - payload: { - id: requestId, - url: request.url, - method: request.method, - headers: Object.fromEntries(request.headers.entries()), - cache: request.cache, - mode: request.mode, - credentials: request.credentials, - destination: request.destination, - integrity: request.integrity, - redirect: request.redirect, - referrer: request.referrer, - referrerPolicy: request.referrerPolicy, - body: await request.text(), - bodyUsed: request.bodyUsed, - keepalive: request.keepalive, + const requestBuffer = await request.arrayBuffer() + const clientMessage = await sendToClient( + client, + { + type: 'REQUEST', + payload: { + id: requestId, + url: request.url, + mode: request.mode, + method: request.method, + headers: Object.fromEntries(request.headers.entries()), + cache: request.cache, + credentials: request.credentials, + destination: request.destination, + integrity: request.integrity, + redirect: request.redirect, + referrer: request.referrer, + referrerPolicy: request.referrerPolicy, + body: requestBuffer, + keepalive: request.keepalive, + }, }, - }) + [requestBuffer], + ) switch (clientMessage.type) { case 'MOCK_RESPONSE': { diff --git a/src/setupWorker/glossary.ts b/src/setupWorker/glossary.ts index 31b5de416..4e602e95b 100644 --- a/src/setupWorker/glossary.ts +++ b/src/setupWorker/glossary.ts @@ -34,15 +34,11 @@ type RequestWithoutMethods = Omit< */ export interface ServiceWorkerIncomingRequest extends RequestWithoutMethods { /** - * Unique UUID of the request generated once the request is + * Unique ID of the request generated once the request is * captured by the "fetch" event in the Service Worker. */ id: string - - /** - * Text response body. - */ - body?: string + body?: ArrayBuffer | null } export type ServiceWorkerIncomingResponse = Pick< diff --git a/src/setupWorker/start/createRequestListener.ts b/src/setupWorker/start/createRequestListener.ts index cdf294586..a6b540f62 100644 --- a/src/setupWorker/start/createRequestListener.ts +++ b/src/setupWorker/start/createRequestListener.ts @@ -38,11 +38,6 @@ export const createRequestListener = ( options, context.emitter, { - /** - * @todo See if this transformation is needed - * once we adopt "Response". - */ - // transformResponse, onPassthroughResponse() { messageChannel.postMessage('NOT_FOUND') }, @@ -118,12 +113,3 @@ This exception has been gracefully handled as a 500 response, however, it's stro } } } - -// function transformResponse(response: Response): SerializedResponse { -// return { -// status: response.status, -// statusText: response.statusText, -// headers: headersToObject(response.headers), -// body: response.body, -// } -// } diff --git a/src/utils/request/parseWorkerRequest.ts b/src/utils/request/parseWorkerRequest.ts index 16530a8b8..07d4db555 100644 --- a/src/utils/request/parseWorkerRequest.ts +++ b/src/utils/request/parseWorkerRequest.ts @@ -8,14 +8,8 @@ import { pruneGetRequestBody } from './pruneGetRequestBody' export function parseWorkerRequest( incomingRequest: ServiceWorkerIncomingRequest, ): Request { - // "Request" instance is not serializable so - // it cannot be sent directly from the worker. return new Request(incomingRequest.url, { ...incomingRequest, - /** - * @todo See if it's possible to post ReadableStream - * from the worker directly (if it's transferable). - */ body: pruneGetRequestBody(incomingRequest), }) } diff --git a/src/utils/request/pruneGetRequestBody.test.ts b/src/utils/request/pruneGetRequestBody.test.ts index 1c08e25a4..eee2932a9 100644 --- a/src/utils/request/pruneGetRequestBody.test.ts +++ b/src/utils/request/pruneGetRequestBody.test.ts @@ -1,38 +1,53 @@ /** * @jest-environment jsdom */ +import { TextEncoder } from 'util' import { pruneGetRequestBody } from './pruneGetRequestBody' test('sets empty GET request body to undefined', () => { - const body = pruneGetRequestBody({ - method: 'GET', - body: '', - }) + expect( + pruneGetRequestBody({ + method: 'GET', + }), + ).toBeUndefined() - expect(body).toBeUndefined() + expect( + pruneGetRequestBody({ + method: 'GET', + // There's no such thing as a GET request with a body. + body: new ArrayBuffer(5), + }), + ).toBeUndefined() }) -test('preserves non-empty GET request body', () => { - const body = pruneGetRequestBody({ - method: 'GET', - body: 'text-body', - }) - - expect(body).toBe('text-body') -}) +test('sets HEAD request body to undefined', () => { + expect( + pruneGetRequestBody({ + method: 'HEAD', + }), + ).toBeUndefined() -test('ignores requests of the other method than GET', () => { expect( pruneGetRequestBody({ method: 'HEAD', - body: JSON.stringify({ a: 1 }), + body: new ArrayBuffer(5), }), - ).toBe(JSON.stringify({ a: 1 })) + ).toBeUndefined() +}) +test('ignores requests of the other methods than GET', () => { + const body = new TextEncoder().encode('hello world') expect( pruneGetRequestBody({ method: 'POST', - body: 'text-body', + body, + }), + ).toEqual(body) + + expect( + pruneGetRequestBody({ + method: 'PUT', + body, }), - ).toBe('text-body') + ).toEqual(body) }) diff --git a/src/utils/request/pruneGetRequestBody.ts b/src/utils/request/pruneGetRequestBody.ts index 7596bd843..ecc5f824a 100644 --- a/src/utils/request/pruneGetRequestBody.ts +++ b/src/utils/request/pruneGetRequestBody.ts @@ -8,11 +8,12 @@ type Input = Pick export function pruneGetRequestBody( request: Input, ): ServiceWorkerIncomingRequest['body'] { - if ( - request.method && - ['HEAD', 'GET'].includes(request.method.toUpperCase()) && - request.body === '' - ) { + // Force HEAD/GET request body to always be empty. + // The worker reads any request's body as ArrayBuffer, + // and you cannot re-construct a GET/HEAD Request + // with an ArrayBuffer, even if empty. Also note that + // "request.body" is always undefined in the worker. + if (['HEAD', 'GET'].includes(request.method)) { return undefined } diff --git a/test/rest-api/request/body/body-json.test.ts b/test/rest-api/request/body/body-json.test.ts index 8a97c7002..bc792b072 100644 --- a/test/rest-api/request/body/body-json.test.ts +++ b/test/rest-api/request/body/body-json.test.ts @@ -27,7 +27,6 @@ test('reads array buffer request body using json() method', async () => { const runtime = await prepareRuntime() runtime.page.evaluate(() => { - debugger return fetch('/json', { method: 'POST', headers: { From 896ae0e00e015a2640612dda3bba941df0a99986 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 18 Oct 2022 15:22:51 +0200 Subject: [PATCH 034/210] test: fix graphql typings tests --- src/graphql.ts | 11 +- src/handlers/GraphQLHandler.ts | 8 +- test/typings/graphql.test-d.ts | 177 +++++++++++++++++---------------- 3 files changed, 104 insertions(+), 92 deletions(-) diff --git a/src/graphql.ts b/src/graphql.ts index 6c1f7dc1a..fb2978058 100644 --- a/src/graphql.ts +++ b/src/graphql.ts @@ -42,8 +42,15 @@ function createScopedGraphQLHandler( } function createGraphQLOperationHandler(url: Path) { - return ( - resolver: ResponseResolver>, + return < + Query extends Record, + Variables extends GraphQLVariables = GraphQLVariables, + >( + resolver: ResponseResolver< + GraphQLResolverExtras, + null, + GraphQLResponseBody + >, ) => { return new GraphQLHandler('all', new RegExp('.*'), url, resolver) } diff --git a/src/handlers/GraphQLHandler.ts b/src/handlers/GraphQLHandler.ts index ce940b002..2a196d6ab 100644 --- a/src/handlers/GraphQLHandler.ts +++ b/src/handlers/GraphQLHandler.ts @@ -1,4 +1,4 @@ -import type { DocumentNode, OperationTypeNode } from 'graphql' +import type { DocumentNode, GraphQLError, OperationTypeNode } from 'graphql' import { DefaultBodyType, RequestHandler, @@ -46,7 +46,8 @@ export interface GraphQLJsonRequestBody { } export interface GraphQLResponseBody { - data: BodyType + data?: BodyType + errors?: Array } export function isDocumentNode( @@ -61,7 +62,8 @@ export function isDocumentNode( export class GraphQLHandler extends RequestHandler< GraphQLHandlerInfo, - // @ts-ignore @todo + /** @@todo */ + // @ts-ignore ParsedGraphQLRequest, GraphQLResolverExtras > { diff --git a/test/typings/graphql.test-d.ts b/test/typings/graphql.test-d.ts index b107b60e9..488b4e467 100644 --- a/test/typings/graphql.test-d.ts +++ b/test/typings/graphql.test-d.ts @@ -1,5 +1,46 @@ import { parse } from 'graphql' -import { graphql, GraphQLHandler, GraphQLVariables, HttpResponse } from 'msw' +import { graphql, HttpResponse } from 'msw' + +/** + * Variables type. + */ +graphql.mutation('CreateUser', ({ variables }) => { + variables.id + variables.unknown +}) + +graphql.mutation('CreateUser', ({ variables }) => { + variables.id.toUpperCase() + // @ts-expect-error unknown variable name + variables.unknown +}) + +graphql.mutation('CreateUser', ({ variables }) => { + // @ts-expect-error + variables.id.toUpperCase() + // @ts-expect-error + variables.unknown +}) + +graphql.query< + { key: string }, + // @ts-expect-error `null` is not a valid variables type. + null +>('', () => {}) + +graphql.mutation< + { key: string }, + // @ts-expect-error `null` is not a valid variables type. + null +>('', () => {}) + +graphql.operation< + { key: string }, + // @ts-expect-error `null` is not a valid variables type. + null +>(() => { + return HttpResponse.json({ data: { key: 'a' } }) +}) /** * Response body type (GraphQL query type). @@ -28,60 +69,42 @@ graphql.query<{ id: string }>( () => HttpResponse.json({ data: {} }), ) +graphql.query<{ id: string }>( + 'GetUser', + // @ts-expect-error incompatible response body type + () => HttpResponse.text('hello'), +) + /// /// /// -graphql.query<{ key: string }>('', (req, res, ctx) => { - return res( - ctx.data( - // @ts-expect-error Response data doesn't match the query type. - {}, - ), - ) -}) - -graphql.query< - { key: string }, - // @ts-expect-error `null` is not a valid variables type. - null ->('', (req, res, ctx) => { - return res(ctx.data({ key: 'pass' })) -}) - -graphql.mutation<{ key: string }>('', (req, res, ctx) => - res( - ctx.data( - // @ts-expect-error Response data doesn't match the query type. - {}, - ), - ), +graphql.query<{ key: string }>( + 'GetData', + // @ts-expect-error Response data doesn't match the query type. + () => { + return HttpResponse.json({ data: {} }) + }, ) -graphql.mutation< - { key: string }, - // @ts-expect-error `null` is not a valid variables type. - null ->('', (req, res, ctx) => { - return res(ctx.data({ key: 'pass' })) -}) +graphql.mutation<{ key: string }>( + 'MutateData', + // @ts-expect-error Response data doesn't match the query type. + () => { + return HttpResponse.json({ data: {} }) + }, +) -graphql.operation<{ key: string }>((req, res, ctx) => { - return res( - ctx.data( - // @ts-expect-error Response data doesn't match the query type. - {}, - ), - ) -}) +graphql.operation<{ key: string }>( + // @ts-expect-error Response data doesn't match the query type. + () => { + return HttpResponse.json({ data: {} }) + }, +) -graphql.operation< - { key: string }, - // @ts-expect-error `null` is not a valid variables type. - null ->((req, res, ctx) => { - return res(ctx.data({ key: 'pass' })) -}) +/** + * Variables type. + */ /** * Supports `DocumentNode` as the GraphQL operation name. @@ -93,15 +116,15 @@ const getUser = parse(` } } `) -graphql.query(getUser, (req, res, ctx) => - res( - ctx.data({ - // Cannot extract query type from the runtime `DocumentNode`. - arbitrary: true, - }), - ), -) +graphql.query(getUser, () => { + return HttpResponse.json({ + // Cannot extract query type from the runtime `DocumentNode`. + data: { arbitrary: true }, + }) +}) +// Both variable and response types can be extracted +// from a "TypedDocumentNode" value. const getUserById = parse(` query GetUserById($userId: String!) { user(id: $userId) { @@ -109,21 +132,21 @@ const getUserById = parse(` } } `) -graphql.query(getUserById, (req, res, ctx) => { - req.variables.userId +graphql.query(getUserById, ({ variables }) => { + variables.userId.toUpperCase() // Extracting variables from the native "DocumentNode" is impossible. - req.variables.foo + variables.foo - return res( - ctx.data({ + return HttpResponse.json({ + data: { user: { firstName: 'John', // Extracting a query body type from the "DocumentNode" is impossible. lastName: 'Maverick', }, - }), - ) + }, + }) }) const createUser = parse(` @@ -133,28 +156,8 @@ const createUser = parse(` } } `) -graphql.mutation(createUser, (req, res, ctx) => - res( - ctx.data({ - arbitrary: true, - }), - ), -) - -// GraphQL request variables must be inferrable -// via the variables generic. -function extractVariables( - _handler: GraphQLHandler>, -): MockedRequest> { - return null as any -} -const handlerWithVariables = graphql.query<{ data: unknown }, { id: string }>( - 'GetUser', - () => void 0, -) -const handler = extractVariables(handlerWithVariables) - -handler.body.variables.id - -// @ts-expect-error Property "foo" is not defined on the variables generic. -handler.body.variables.foo +graphql.mutation(createUser, () => { + return HttpResponse.json({ + data: { arbitrary: true }, + }) +}) From f78175f87453c03f52c25fb6a9f870b7d62de850 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 18 Oct 2022 15:23:01 +0200 Subject: [PATCH 035/210] test: remove "set" typings tests --- test/typings/set.test-d.ts | 43 -------------------------------------- 1 file changed, 43 deletions(-) delete mode 100644 test/typings/set.test-d.ts diff --git a/test/typings/set.test-d.ts b/test/typings/set.test-d.ts deleted file mode 100644 index ecc6b9bde..000000000 --- a/test/typings/set.test-d.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { defaultContext } from 'msw' - -const { set } = defaultContext - -set('header', 'value') -set({ - one: 'value', - two: 'value', -}) - -// @ts-expect-error Forbidden response header. -set('cookie', 'secret') -// @ts-expect-error Forbidden response header. -set('Cookie', 'secret') -// @ts-expect-error Forbidden response header. -set('cookie2', 'secret') -// @ts-expect-error Forbidden response header. -set('Cookie2', 'secret') -// @ts-expect-error Forbidden response header. -set('set-cookie', 'secret') -// @ts-expect-error Forbidden response header. -set('Set-Cookie', 'secret') -// @ts-expect-error Forbidden response header. -set('set-cookie2', 'secret') -// @ts-expect-error Forbidden response header. -set('Set-Cookie2', 'secret') - -// @ts-expect-error Forbidden response header. -set({ cookie: 'secret' }) -// @ts-expect-error Forbidden response header. -set({ Cookie: 'secret' }) -// @ts-expect-error Forbidden response header. -set({ cookie2: 'secret' }) -// @ts-expect-error Forbidden response header. -set({ Cookie2: 'secret' }) -// @ts-expect-error Forbidden response header. -set({ 'set-cookie': 'secret' }) -// @ts-expect-error Forbidden response header. -set({ 'Set-Cookie': 'secret' }) -// @ts-expect-error Forbidden response header. -set({ 'set-cookie2': 'secret' }) -// @ts-expect-error Forbidden response header. -set({ 'Set-Cookie2': 'secret' }) From b84fd6bda63b572cb37b2eeed9ca9e6b82804695 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 18 Oct 2022 15:32:29 +0200 Subject: [PATCH 036/210] chore: remove unused "compose" --- src/index.ts | 3 +- src/utils/internal/compose.test.ts | 24 ---------------- src/utils/internal/compose.ts | 46 ------------------------------ 3 files changed, 1 insertion(+), 72 deletions(-) delete mode 100644 src/utils/internal/compose.test.ts delete mode 100644 src/utils/internal/compose.ts diff --git a/src/index.ts b/src/index.ts index 1e215aa0d..203ac4bbf 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,7 +9,6 @@ export { GraphQLHandler } from './handlers/GraphQLHandler' /* Utils */ export { matchRequestUrl } from './utils/matching/matchRequestUrl' -export { compose } from './utils/internal/compose' export * from './utils/handleRequest' export { cleanUrl } from './utils/url/cleanUrl' @@ -40,7 +39,7 @@ export type { export type { Path, PathParams, Match } from './utils/matching/matchRequestUrl' export type { DelayMode } from './delay' -export { ParsedGraphQLRequest } from './utils/internal/parseGraphQLRequest' +export type { ParsedGraphQLRequest } from './utils/internal/parseGraphQLRequest' export * from './utils/HttpResponse' export * from './delay' diff --git a/src/utils/internal/compose.test.ts b/src/utils/internal/compose.test.ts deleted file mode 100644 index 024ad7232..000000000 --- a/src/utils/internal/compose.test.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { compose } from './compose' - -test('composes given functions from right to left', () => { - const list: number[] = [] - const populateList = compose( - () => list.push(1), - () => list.push(7), - () => list.push(5), - ) - - populateList() - - expect(list).toEqual([5, 7, 1]) -}) - -test('composes a list of async functions from right to left', async () => { - const generateNumber = compose( - async (n: number) => n + 1, - async (n: number) => n * 5, - ) - const number = await generateNumber(5) - - expect(number).toEqual(26) -}) diff --git a/src/utils/internal/compose.ts b/src/utils/internal/compose.ts deleted file mode 100644 index a13ca1bf9..000000000 --- a/src/utils/internal/compose.ts +++ /dev/null @@ -1,46 +0,0 @@ -type ArityOneFunction = (arg: any) => any - -type LengthOfTuple = Tuple extends { length: infer L } - ? L - : never - -type DropFirstInTuple = ((...args: Tuple) => any) extends ( - arg: any, - ...rest: infer LastArg -) => any - ? LastArg - : Tuple - -type LastInTuple = Tuple[LengthOfTuple< - DropFirstInTuple ->] - -type FirstFnParameterType = Parameters< - LastInTuple ->[any] - -type LastFnParameterType = ReturnType< - Functions[0] -> - -/** - * Composes a given list of functions into a new function that - * executes from right to left. - */ -export function compose< - Functions extends ArityOneFunction[], - LeftReturnType extends FirstFnParameterType, - RightReturnType extends LastFnParameterType, ->( - ...fns: Functions -): ( - ...args: [LeftReturnType] extends [never] ? never[] : [LeftReturnType] -) => RightReturnType { - return (...args) => { - return fns.reduceRight((leftFn: any, rightFn) => { - return leftFn instanceof Promise - ? Promise.resolve(leftFn).then(rightFn) - : rightFn(leftFn) - }, args[0]) - } -} From 533f44c9f880a1d792b7a809b28eb68a09139ee6 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 18 Oct 2022 15:32:55 +0200 Subject: [PATCH 037/210] chore(NetworkError): add jsdoc --- src/NetworkError.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/NetworkError.ts b/src/NetworkError.ts index 50d03995e..f07dc2780 100644 --- a/src/NetworkError.ts +++ b/src/NetworkError.ts @@ -1,3 +1,14 @@ +/** + * An error indicating network issues while + * processing a request. + * + * @example + * import { rest, NetworkError } from 'msw' + * + * rest.get('/user', () => { + * throw new NetworkError('Failed to fetch') + * }) + */ export class NetworkError extends Error { constructor(message: string) { super(message) From b562f1f3bed1f13bed31f17252dbfa7e4f2d582b Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 18 Oct 2022 15:33:22 +0200 Subject: [PATCH 038/210] fix(GraphQLHandler): annotate "errors" as partial --- src/handlers/GraphQLHandler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/handlers/GraphQLHandler.ts b/src/handlers/GraphQLHandler.ts index 2a196d6ab..e007cc153 100644 --- a/src/handlers/GraphQLHandler.ts +++ b/src/handlers/GraphQLHandler.ts @@ -47,7 +47,7 @@ export interface GraphQLJsonRequestBody { export interface GraphQLResponseBody { data?: BodyType - errors?: Array + errors?: Array> } export function isDocumentNode( From 6fd2eb854958ab614d52afc25215afa8abf18d94 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 18 Oct 2022 15:33:37 +0200 Subject: [PATCH 039/210] chore(HttpResponse): remove unnecessary "defineReadOnly" --- src/utils/HttpResponse.ts | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/src/utils/HttpResponse.ts b/src/utils/HttpResponse.ts index 736141fb5..4cac16c42 100644 --- a/src/utils/HttpResponse.ts +++ b/src/utils/HttpResponse.ts @@ -134,7 +134,8 @@ function decorateResponseInit( const status = init?.status || 200 const statusText = init?.statusText || - httpStatusTexts[status.toString() as keyof typeof httpStatusTexts] + httpStatusTexts[status.toString() as keyof typeof httpStatusTexts] || + '' const headers = new Headers(init?.headers) return { @@ -151,7 +152,11 @@ function decorateResponse( ): Response { // Allow to mock the response type. if (init.type) { - defineReadOnly(response, 'type', init.type) + Object.defineProperty(response, 'type', { + value: init.type, + enumerable: true, + writable: false, + }) } // Cookie forwarding is only relevant in the browser. @@ -171,15 +176,3 @@ function decorateResponse( return response } - -function defineReadOnly( - target: any, - propertyName: string, - value: unknown, -): void { - Object.defineProperty(target, propertyName, { - value, - enumerable: true, - writable: false, - }) -} From 6f077235fe8d697f12b83425709935a18ea5b44d Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 18 Oct 2022 15:36:46 +0200 Subject: [PATCH 040/210] chore: move "HttpResponse" to the root --- src/{utils => }/HttpResponse.ts | 72 ++---------------------- src/handlers/RequestHandler.ts | 2 +- src/index.ts | 2 +- src/utils/HttpResponse/createResponse.ts | 11 ++++ src/utils/HttpResponse/decorators.ts | 58 +++++++++++++++++++ 5 files changed, 75 insertions(+), 70 deletions(-) rename src/{utils => }/HttpResponse.ts (61%) create mode 100644 src/utils/HttpResponse/createResponse.ts create mode 100644 src/utils/HttpResponse/decorators.ts diff --git a/src/utils/HttpResponse.ts b/src/HttpResponse.ts similarity index 61% rename from src/utils/HttpResponse.ts rename to src/HttpResponse.ts index 4cac16c42..0edb65bce 100644 --- a/src/utils/HttpResponse.ts +++ b/src/HttpResponse.ts @@ -1,18 +1,12 @@ -import httpStatusTexts from 'statuses/codes.json' -import { Headers } from 'headers-polyfill' -import { Response } from '../fetch' -import { type DefaultBodyType } from '../handlers/RequestHandler' +import { Response } from './fetch' +import { type DefaultBodyType } from './handlers/RequestHandler' +import { createResponse } from './utils/HttpResponse/createResponse' +import { decorateResponseInit } from './utils/HttpResponse/decorators' export interface HttpResponseInit extends ResponseInit { type?: ResponseType } -export interface HttpResponseDecoratedInit extends HttpResponseInit { - status: number - statusText: string - headers: Headers -} - declare const bodyType: unique symbol /** @@ -118,61 +112,3 @@ export const HttpResponse = { return createResponse(data, responseInit) }, } - -function createResponse( - body: BodyInit | null | undefined, - init: HttpResponseDecoratedInit, -): StrictResponse { - const response = new Response(body, init) - decorateResponse(response, init) - return response as StrictResponse -} - -function decorateResponseInit( - init: HttpResponseInit = {}, -): HttpResponseDecoratedInit { - const status = init?.status || 200 - const statusText = - init?.statusText || - httpStatusTexts[status.toString() as keyof typeof httpStatusTexts] || - '' - const headers = new Headers(init?.headers) - - return { - ...init, - headers, - status, - statusText, - } -} - -function decorateResponse( - response: Response, - init: HttpResponseDecoratedInit, -): Response { - // Allow to mock the response type. - if (init.type) { - Object.defineProperty(response, 'type', { - value: init.type, - enumerable: true, - writable: false, - }) - } - - // Cookie forwarding is only relevant in the browser. - if (typeof document !== 'undefined') { - // Write the mocked response cookies to the document. - // Note that Fetch API Headers will concatenate multiple "Set-Cookie" - // headers into a single comma-separated string, just as it does - // with any other multi-value headers. - const responseCookies = init.headers.get('Set-Cookie')?.split(',') || [] - - for (const cookieString of responseCookies) { - // No need to parse the cookie headers because it's defined - // as the valid cookie string to begin with. - document.cookie = cookieString - } - } - - return response -} diff --git a/src/handlers/RequestHandler.ts b/src/handlers/RequestHandler.ts index d22e46685..aabfb7a66 100644 --- a/src/handlers/RequestHandler.ts +++ b/src/handlers/RequestHandler.ts @@ -3,7 +3,7 @@ import { getCallFrame } from '../utils/internal/getCallFrame' import { isIterable } from '../utils/internal/isIterable' import { type ResponseResolutionContext } from '../utils/getResponse' import { type MaybePromise } from '../typeUtils' -import { StrictRequest, type StrictResponse } from '../utils/HttpResponse' +import { StrictRequest, type StrictResponse } from '../HttpResponse' export type DefaultRequestMultipartBody = Record< string, diff --git a/src/index.ts b/src/index.ts index 203ac4bbf..79e429f60 100644 --- a/src/index.ts +++ b/src/index.ts @@ -41,7 +41,7 @@ export type { Path, PathParams, Match } from './utils/matching/matchRequestUrl' export type { DelayMode } from './delay' export type { ParsedGraphQLRequest } from './utils/internal/parseGraphQLRequest' -export * from './utils/HttpResponse' +export * from './HttpResponse' export * from './delay' export { bypass } from './bypass' export { passthrough } from './passthrough' diff --git a/src/utils/HttpResponse/createResponse.ts b/src/utils/HttpResponse/createResponse.ts new file mode 100644 index 000000000..f72283551 --- /dev/null +++ b/src/utils/HttpResponse/createResponse.ts @@ -0,0 +1,11 @@ +import type { StrictResponse } from '../../HttpResponse' +import { decorateResponse, type HttpResponseDecoratedInit } from './decorators' + +export function createResponse( + body: BodyInit | null | undefined, + init: HttpResponseDecoratedInit, +): StrictResponse { + const response = new Response(body, init) + decorateResponse(response, init) + return response as StrictResponse +} diff --git a/src/utils/HttpResponse/decorators.ts b/src/utils/HttpResponse/decorators.ts new file mode 100644 index 000000000..4401684a8 --- /dev/null +++ b/src/utils/HttpResponse/decorators.ts @@ -0,0 +1,58 @@ +import httpStatusTexts from 'statuses/codes.json' +import { Headers } from 'headers-polyfill' +import type { HttpResponseInit } from '../../HttpResponse' + +export interface HttpResponseDecoratedInit extends HttpResponseInit { + status: number + statusText: string + headers: Headers +} + +export function decorateResponseInit( + init: HttpResponseInit = {}, +): HttpResponseDecoratedInit { + const status = init?.status || 200 + const statusText = + init?.statusText || + httpStatusTexts[status.toString() as keyof typeof httpStatusTexts] || + '' + const headers = new Headers(init?.headers) + + return { + ...init, + headers, + status, + statusText, + } +} + +export function decorateResponse( + response: Response, + init: HttpResponseDecoratedInit, +): Response { + // Allow to mock the response type. + if (init.type) { + Object.defineProperty(response, 'type', { + value: init.type, + enumerable: true, + writable: false, + }) + } + + // Cookie forwarding is only relevant in the browser. + if (typeof document !== 'undefined') { + // Write the mocked response cookies to the document. + // Note that Fetch API Headers will concatenate multiple "Set-Cookie" + // headers into a single comma-separated string, just as it does + // with any other multi-value headers. + const responseCookies = init.headers.get('Set-Cookie')?.split(',') || [] + + for (const cookieString of responseCookies) { + // No need to parse the cookie headers because it's defined + // as the valid cookie string to begin with. + document.cookie = cookieString + } + } + + return response +} From d61a5db931c0b0c21a827e877a19a2f079cb3715 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 18 Oct 2022 15:47:26 +0200 Subject: [PATCH 041/210] test: add unit tests for HttpResponse --- src/HttpResponse.test.ts | 66 +++++++++++++++++++ src/HttpResponse.ts | 2 +- src/handlers/GraphQLHandler.test.ts | 2 +- src/utils/HttpResponse/createResponse.test.ts | 64 ++++++++++++++++++ src/utils/HttpResponse/createResponse.ts | 1 + src/utils/handleRequest.test.ts | 2 +- 6 files changed, 134 insertions(+), 3 deletions(-) create mode 100644 src/HttpResponse.test.ts create mode 100644 src/utils/HttpResponse/createResponse.test.ts diff --git a/src/HttpResponse.test.ts b/src/HttpResponse.test.ts new file mode 100644 index 000000000..90dab4bc8 --- /dev/null +++ b/src/HttpResponse.test.ts @@ -0,0 +1,66 @@ +/** + * @jest-environment node + */ +import { TextEncoder } from 'util' +import { ReadableStream, FormData } from './fetch' +import { HttpResponse } from './HttpResponse' + +it('creates a plain response', async () => { + const response = HttpResponse.plain(null, { status: 301 }) + expect(response.status).toBe(301) + expect(response.statusText).toBe('Moved Permanently') + expect(response.body).toBe(null) + expect(await response.text()).toBe('') +}) + +it('creates a text response', async () => { + const response = HttpResponse.text('hello world', { status: 201 }) + + expect(response.status).toBe(201) + expect(response.statusText).toBe('Created') + expect(response.body).toBeInstanceOf(ReadableStream) + expect(await response.text()).toBe('hello world') +}) + +it('creates a json response', async () => { + const response = HttpResponse.json({ firstName: 'John' }) + + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + expect(response.body).toBeInstanceOf(ReadableStream) + expect(await response.json()).toEqual({ firstName: 'John' }) +}) + +it('creates an xml response', async () => { + const response = HttpResponse.xml('') + + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + expect(response.body).toBeInstanceOf(ReadableStream) + expect(await response.text()).toBe('') +}) + +it('creates an array buffer response', async () => { + const buffer = new TextEncoder().encode('hello world') + const response = HttpResponse.arrayBuffer(buffer) + + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + expect(response.body).toBeInstanceOf(ReadableStream) + + const responseData = await response.arrayBuffer() + expect(responseData).toEqual(buffer.buffer) +}) + +it('creates a form data response', async () => { + const formData = new FormData() + formData.append('firstName', 'John') + const response = HttpResponse.plain(formData) + + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + expect(response.body).toBeInstanceOf(ReadableStream) + + const responseData = await response.formData() + expect(responseData.get('firstName')).toBe('John') +}) diff --git a/src/HttpResponse.ts b/src/HttpResponse.ts index 0edb65bce..e49a29e51 100644 --- a/src/HttpResponse.ts +++ b/src/HttpResponse.ts @@ -24,7 +24,7 @@ export interface StrictRequest export const HttpResponse = { plain( - body?: BodyType, + body?: BodyType | null, init?: HttpResponseInit, ): Response { const responseInit = decorateResponseInit(init) diff --git a/src/handlers/GraphQLHandler.test.ts b/src/handlers/GraphQLHandler.test.ts index 76375c8d4..f91fdebde 100644 --- a/src/handlers/GraphQLHandler.test.ts +++ b/src/handlers/GraphQLHandler.test.ts @@ -10,7 +10,7 @@ import { GraphQLResolverExtras, isDocumentNode, } from './GraphQLHandler' -import { HttpResponse } from '../utils/HttpResponse' +import { HttpResponse } from '../HttpResponse' import { ResponseResolver } from './RequestHandler' import { Request } from '../fetch' diff --git a/src/utils/HttpResponse/createResponse.test.ts b/src/utils/HttpResponse/createResponse.test.ts new file mode 100644 index 000000000..cececcebd --- /dev/null +++ b/src/utils/HttpResponse/createResponse.test.ts @@ -0,0 +1,64 @@ +/** + * @jest-environment node + */ +import { Headers } from 'headers-polyfill' +import { ReadableStream } from '../../fetch' +import { createResponse } from './createResponse' + +it('creates an empty response', () => { + const response = createResponse(null, { + status: 200, + statusText: 'OK', + headers: new Headers(), + }) + + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + expect(response.body).toBe(null) + expect(Array.from(response.headers.entries())).toEqual([]) +}) + +it('creates a text response', async () => { + const response = createResponse('hello world', { + status: 200, + statusText: 'OK', + headers: new Headers(), + }) + + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + expect(response.body).toBeInstanceOf(ReadableStream) + expect(await response.text()).toBe('hello world') + expect(Array.from(response.headers.entries())).toEqual([ + ['content-type', 'text/plain;charset=UTF-8'], + ]) +}) + +it('creates a json response', async () => { + const response = createResponse(JSON.stringify({ firstName: 'John' }), { + status: 200, + statusText: 'OK', + headers: new Headers({ + 'Content-Type': 'application/json', + }), + }) + + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + expect(response.body).toBeInstanceOf(ReadableStream) + expect(await response.json()).toEqual({ firstName: 'John' }) + expect(Array.from(response.headers.entries())).toEqual([ + ['content-type', 'application/json'], + ]) +}) + +it('forward a custom "type" response init property', () => { + const response = createResponse(null, { + type: 'opaque', + status: 200, + statusText: 'OK', + headers: new Headers(), + }) + + expect(response.type).toBe('opaque') +}) diff --git a/src/utils/HttpResponse/createResponse.ts b/src/utils/HttpResponse/createResponse.ts index f72283551..db3858655 100644 --- a/src/utils/HttpResponse/createResponse.ts +++ b/src/utils/HttpResponse/createResponse.ts @@ -1,3 +1,4 @@ +import { Response } from '../../fetch' import type { StrictResponse } from '../../HttpResponse' import { decorateResponse, type HttpResponseDecoratedInit } from './decorators' diff --git a/src/utils/handleRequest.test.ts b/src/utils/handleRequest.test.ts index ab003e775..130367940 100644 --- a/src/utils/handleRequest.test.ts +++ b/src/utils/handleRequest.test.ts @@ -8,7 +8,7 @@ import { handleRequest, HandleRequestOptions } from './handleRequest' import { RequiredDeep } from '../typeUtils' import { uuidv4 } from './internal/uuidv4' import { Request } from '../fetch' -import { HttpResponse } from './HttpResponse' +import { HttpResponse } from '../HttpResponse' import { passthrough } from '../passthrough' const options: RequiredDeep = { From 801b5ae6750d421a869136d46e2278171e827d81 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 18 Oct 2022 16:04:41 +0200 Subject: [PATCH 042/210] chore: move fetch polyfills to root --- src/Blob.ts | 3 ++ src/File.ts | 3 ++ src/FormData.ts | 3 ++ src/Headers.ts | 3 ++ src/HttpResponse.test.ts | 3 +- src/HttpResponse.ts | 2 +- src/ReadableStream.ts | 4 +++ src/Request.ts | 3 ++ src/Response.ts | 3 ++ src/bypass.test.ts | 2 +- src/bypass.ts | 2 +- src/fetch.ts | 28 ------------------- src/handlers/GraphQLHandler.test.ts | 2 +- src/handlers/GraphQLHandler.ts | 2 +- src/index.ts | 11 ++++++-- src/passthrough.test.ts | 2 +- src/passthrough.ts | 2 +- src/utils/HttpResponse/createResponse.test.ts | 2 +- src/utils/HttpResponse/createResponse.ts | 2 +- src/utils/handleRequest.test.ts | 2 +- .../internal/parseGraphQLRequest.test.ts | 2 +- src/utils/logging/serializeRequest.test.ts | 2 +- src/utils/logging/serializeResponse.test.ts | 4 ++- .../request/getPublicUrlFromRequest.test.ts | 2 +- .../request/getRequestCookies.node.test.ts | 2 +- src/utils/request/getRequestCookies.test.ts | 2 +- src/utils/request/onUnhandledRequest.test.ts | 2 +- 27 files changed, 52 insertions(+), 48 deletions(-) create mode 100644 src/Blob.ts create mode 100644 src/File.ts create mode 100644 src/FormData.ts create mode 100644 src/Headers.ts create mode 100644 src/ReadableStream.ts create mode 100644 src/Request.ts create mode 100644 src/Response.ts delete mode 100644 src/fetch.ts diff --git a/src/Blob.ts b/src/Blob.ts new file mode 100644 index 000000000..cb9a555c8 --- /dev/null +++ b/src/Blob.ts @@ -0,0 +1,3 @@ +export const Blob: typeof globalThis.Blob = globalThis.Blob + ? globalThis.Blob + : require('@remix-run/web-fetch').Blob diff --git a/src/File.ts b/src/File.ts new file mode 100644 index 000000000..6e881734b --- /dev/null +++ b/src/File.ts @@ -0,0 +1,3 @@ +export const File: typeof globalThis.File = globalThis.File + ? globalThis.File + : require('formdata-node').File diff --git a/src/FormData.ts b/src/FormData.ts new file mode 100644 index 000000000..8af31080b --- /dev/null +++ b/src/FormData.ts @@ -0,0 +1,3 @@ +export const FormData: typeof globalThis.FormData = globalThis.FormData + ? globalThis.FormData + : require('@remix-run/web-fetch').FormData diff --git a/src/Headers.ts b/src/Headers.ts new file mode 100644 index 000000000..adb928a33 --- /dev/null +++ b/src/Headers.ts @@ -0,0 +1,3 @@ +export const Headers: typeof globalThis.Headers = globalThis.Headers + ? globalThis.Headers + : require('headers-polyfill').Headers diff --git a/src/HttpResponse.test.ts b/src/HttpResponse.test.ts index 90dab4bc8..f5921a3fb 100644 --- a/src/HttpResponse.test.ts +++ b/src/HttpResponse.test.ts @@ -2,7 +2,8 @@ * @jest-environment node */ import { TextEncoder } from 'util' -import { ReadableStream, FormData } from './fetch' +import { ReadableStream } from './ReadableStream' +import { FormData } from './FormData' import { HttpResponse } from './HttpResponse' it('creates a plain response', async () => { diff --git a/src/HttpResponse.ts b/src/HttpResponse.ts index e49a29e51..6fd9bb855 100644 --- a/src/HttpResponse.ts +++ b/src/HttpResponse.ts @@ -1,4 +1,4 @@ -import { Response } from './fetch' +import { Response } from './Response' import { type DefaultBodyType } from './handlers/RequestHandler' import { createResponse } from './utils/HttpResponse/createResponse' import { decorateResponseInit } from './utils/HttpResponse/decorators' diff --git a/src/ReadableStream.ts b/src/ReadableStream.ts new file mode 100644 index 000000000..96502476a --- /dev/null +++ b/src/ReadableStream.ts @@ -0,0 +1,4 @@ +export const ReadableStream: typeof globalThis.ReadableStream = + globalThis.ReadableStream + ? globalThis.ReadableStream + : require('@remix-run/web-fetch').ReadableStream diff --git a/src/Request.ts b/src/Request.ts new file mode 100644 index 000000000..95a3803fa --- /dev/null +++ b/src/Request.ts @@ -0,0 +1,3 @@ +export const Request: typeof globalThis.Request = globalThis.Request + ? globalThis.Request + : require('@remix-run/web-fetch').Request diff --git a/src/Response.ts b/src/Response.ts new file mode 100644 index 000000000..95fb61b93 --- /dev/null +++ b/src/Response.ts @@ -0,0 +1,3 @@ +export const Response: typeof globalThis.Response = globalThis.Response + ? globalThis.Response + : require('@remix-run/web-fetch').Response diff --git a/src/bypass.test.ts b/src/bypass.test.ts index f68868235..2f0c9aa55 100644 --- a/src/bypass.test.ts +++ b/src/bypass.test.ts @@ -1,7 +1,7 @@ /** * @jest-environment jsdom */ -import { Request } from './fetch' +import { Request } from './Request' import { bypass } from './bypass' it('returns bypassed request given a request url string', () => { diff --git a/src/bypass.ts b/src/bypass.ts index 5b0cfd20a..f9452ae9e 100644 --- a/src/bypass.ts +++ b/src/bypass.ts @@ -1,5 +1,5 @@ import type { Request as RemixRequest } from '@remix-run/web-fetch' -import { Request } from './fetch' +import { Request } from './Request' /** * Creates a "Request" instance that, when fetched, will diff --git a/src/fetch.ts b/src/fetch.ts deleted file mode 100644 index f95a8ee28..000000000 --- a/src/fetch.ts +++ /dev/null @@ -1,28 +0,0 @@ -export const Headers: typeof globalThis.Headers = globalThis.Headers - ? globalThis.Headers - : require('headers-polyfill').Headers - -export const Request: typeof globalThis.Request = globalThis.Request - ? globalThis.Request - : require('@remix-run/web-fetch').Request - -export const Response: typeof globalThis.Response = globalThis.Response - ? globalThis.Response - : require('@remix-run/web-fetch').Response - -export const ReadableStream: typeof globalThis.ReadableStream = - globalThis.ReadableStream - ? globalThis.ReadableStream - : require('@remix-run/web-fetch').ReadableStream - -export const Blob: typeof globalThis.Blob = globalThis.Blob - ? globalThis.Blob - : require('@remix-run/web-fetch').Blob - -export const FormData: typeof globalThis.FormData = globalThis.FormData - ? globalThis.FormData - : require('@remix-run/web-fetch').FormData - -export const File: typeof globalThis.File = globalThis.File - ? globalThis.File - : require('formdata-node').File diff --git a/src/handlers/GraphQLHandler.test.ts b/src/handlers/GraphQLHandler.test.ts index f91fdebde..fc2a4763d 100644 --- a/src/handlers/GraphQLHandler.test.ts +++ b/src/handlers/GraphQLHandler.test.ts @@ -12,7 +12,7 @@ import { } from './GraphQLHandler' import { HttpResponse } from '../HttpResponse' import { ResponseResolver } from './RequestHandler' -import { Request } from '../fetch' +import { Request } from '../Request' const resolver: ResponseResolver> = ({ variables, diff --git a/src/handlers/GraphQLHandler.ts b/src/handlers/GraphQLHandler.ts index e007cc153..18917c725 100644 --- a/src/handlers/GraphQLHandler.ts +++ b/src/handlers/GraphQLHandler.ts @@ -47,7 +47,7 @@ export interface GraphQLJsonRequestBody { export interface GraphQLResponseBody { data?: BodyType - errors?: Array> + errors?: readonly Partial[] } export function isDocumentNode( diff --git a/src/index.ts b/src/index.ts index 79e429f60..c4758f140 100644 --- a/src/index.ts +++ b/src/index.ts @@ -41,10 +41,17 @@ export type { Path, PathParams, Match } from './utils/matching/matchRequestUrl' export type { DelayMode } from './delay' export type { ParsedGraphQLRequest } from './utils/internal/parseGraphQLRequest' +/* Fetch API classes mirrors */ +export { Request } from './Request' +export { Response } from './Response' +export { ReadableStream } from './ReadableStream' +export { Headers } from './Headers' +export { FormData } from './FormData' +export { Blob } from './Blob' +export { File } from './File' + export * from './HttpResponse' export * from './delay' export { bypass } from './bypass' export { passthrough } from './passthrough' export { NetworkError } from './NetworkError' - -export * from './fetch' diff --git a/src/passthrough.test.ts b/src/passthrough.test.ts index 661375f3e..1b016d34d 100644 --- a/src/passthrough.test.ts +++ b/src/passthrough.test.ts @@ -1,7 +1,7 @@ /** * @jest-environment node */ -import { Response } from './fetch' +import { Response } from './Response' import { passthrough } from './passthrough' it('creates a 302 response with the intention header', () => { diff --git a/src/passthrough.ts b/src/passthrough.ts index 851a83609..887ca76f5 100644 --- a/src/passthrough.ts +++ b/src/passthrough.ts @@ -1,4 +1,4 @@ -import { Response } from './fetch' +import { Response } from './Response' /** * Instruct Mock Service Worker to perform this request as-is. diff --git a/src/utils/HttpResponse/createResponse.test.ts b/src/utils/HttpResponse/createResponse.test.ts index cececcebd..bbfc34a08 100644 --- a/src/utils/HttpResponse/createResponse.test.ts +++ b/src/utils/HttpResponse/createResponse.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import { Headers } from 'headers-polyfill' -import { ReadableStream } from '../../fetch' +import { ReadableStream } from '../../ReadableStream' import { createResponse } from './createResponse' it('creates an empty response', () => { diff --git a/src/utils/HttpResponse/createResponse.ts b/src/utils/HttpResponse/createResponse.ts index db3858655..984fb3517 100644 --- a/src/utils/HttpResponse/createResponse.ts +++ b/src/utils/HttpResponse/createResponse.ts @@ -1,4 +1,4 @@ -import { Response } from '../../fetch' +import { Response } from '../../Response' import type { StrictResponse } from '../../HttpResponse' import { decorateResponse, type HttpResponseDecoratedInit } from './decorators' diff --git a/src/utils/handleRequest.test.ts b/src/utils/handleRequest.test.ts index 130367940..d85a4ac51 100644 --- a/src/utils/handleRequest.test.ts +++ b/src/utils/handleRequest.test.ts @@ -7,7 +7,7 @@ import { rest } from '../rest' import { handleRequest, HandleRequestOptions } from './handleRequest' import { RequiredDeep } from '../typeUtils' import { uuidv4 } from './internal/uuidv4' -import { Request } from '../fetch' +import { Request } from '../Request' import { HttpResponse } from '../HttpResponse' import { passthrough } from '../passthrough' diff --git a/src/utils/internal/parseGraphQLRequest.test.ts b/src/utils/internal/parseGraphQLRequest.test.ts index 0ddab8026..9b152189e 100644 --- a/src/utils/internal/parseGraphQLRequest.test.ts +++ b/src/utils/internal/parseGraphQLRequest.test.ts @@ -4,7 +4,7 @@ import { encodeBuffer } from '@mswjs/interceptors' import { OperationTypeNode } from 'graphql' import { Headers } from 'headers-polyfill' -import { Request } from '../../fetch' +import { Request } from '../../Request' import { ParsedGraphQLRequest, parseGraphQLRequest, diff --git a/src/utils/logging/serializeRequest.test.ts b/src/utils/logging/serializeRequest.test.ts index e11d71897..86674470c 100644 --- a/src/utils/logging/serializeRequest.test.ts +++ b/src/utils/logging/serializeRequest.test.ts @@ -1,6 +1,6 @@ import { encodeBuffer } from '@mswjs/interceptors' import { Headers } from 'headers-polyfill' -import { Request } from '../../fetch' +import { Request } from '../../Request' import { serializeRequest } from './serializeRequest' test('serializes given Request instance into a plain object', async () => { diff --git a/src/utils/logging/serializeResponse.test.ts b/src/utils/logging/serializeResponse.test.ts index 229dcc417..0f0a262fe 100644 --- a/src/utils/logging/serializeResponse.test.ts +++ b/src/utils/logging/serializeResponse.test.ts @@ -2,7 +2,9 @@ * @jest-environment node */ import { encodeBuffer } from '@mswjs/interceptors' -import { Blob, FormData, Response } from '../../fetch' +import { Response } from '../../Response' +import { Blob } from '../../Blob' +import { FormData } from '../../FormData' import { serializeResponse } from './serializeResponse' it('serializes response without body', async () => { diff --git a/src/utils/request/getPublicUrlFromRequest.test.ts b/src/utils/request/getPublicUrlFromRequest.test.ts index 450445294..985f1574d 100644 --- a/src/utils/request/getPublicUrlFromRequest.test.ts +++ b/src/utils/request/getPublicUrlFromRequest.test.ts @@ -1,7 +1,7 @@ /** * @jest-environment jsdom */ -import { Request } from '../../fetch' +import { Request } from '../../Request' import { getPublicUrlFromRequest } from './getPublicUrlFromRequest' test('returns an absolute request URL withouth search params', () => { diff --git a/src/utils/request/getRequestCookies.node.test.ts b/src/utils/request/getRequestCookies.node.test.ts index d2500d5ad..ad2a5526c 100644 --- a/src/utils/request/getRequestCookies.node.test.ts +++ b/src/utils/request/getRequestCookies.node.test.ts @@ -1,7 +1,7 @@ /** * @jest-environment node */ -import { Request } from '../../fetch' +import { Request } from '../../Request' import { getRequestCookies } from './getRequestCookies' const prevLocation = global.location diff --git a/src/utils/request/getRequestCookies.test.ts b/src/utils/request/getRequestCookies.test.ts index f43e958ff..ed51e493e 100644 --- a/src/utils/request/getRequestCookies.test.ts +++ b/src/utils/request/getRequestCookies.test.ts @@ -3,7 +3,7 @@ */ import { getRequestCookies } from './getRequestCookies' import { clearCookies } from '../../../test/support/utils' -import { Request } from '../../fetch' +import { Request } from '../../Request' beforeAll(() => { // Emulate some `document.cookie` value. diff --git a/src/utils/request/onUnhandledRequest.test.ts b/src/utils/request/onUnhandledRequest.test.ts index 4dfd7b4b6..1fa248e4f 100644 --- a/src/utils/request/onUnhandledRequest.test.ts +++ b/src/utils/request/onUnhandledRequest.test.ts @@ -4,7 +4,7 @@ import { } from './onUnhandledRequest' import { RestHandler, RESTMethods } from '../../handlers/RestHandler' import { ResponseResolver } from '../../handlers/RequestHandler' -import { Request } from '../../fetch' +import { Request } from '../../Request' const resolver: ResponseResolver = () => void 0 From 24a59e532b4f0316c4cbecd8c6f9cdffcc432a41 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 19 Oct 2022 14:27:26 +0200 Subject: [PATCH 043/210] fix: correct types --- package.json | 1 + src/HttpResponse.ts | 15 ++++++++++++--- src/bypass.ts | 10 +++++----- src/handlers/GraphQLHandler.ts | 2 -- src/handlers/RequestHandler.ts | 17 ++++++++--------- src/setupWorker/glossary.ts | 2 +- src/setupWorker/setupWorker.ts | 13 +++++-------- test/typings/rest.test-d.ts | 8 +++++++- 8 files changed, 39 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index bd3017a0b..d2cbdb987 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "start": "tsup --watch", "clean": "rimraf ./lib", "lint": "eslint \"{cli,config,src,test}/**/*.ts\"", + "prebuild": "rimraf ./lib", "build": "cross-env NODE_ENV=production tsup", "test": "yarn test:unit && yarn test:integration", "test:unit": "cross-env BABEL_ENV=test jest --maxWorkers=3", diff --git a/src/HttpResponse.ts b/src/HttpResponse.ts index 6fd9bb855..07bbb6cdb 100644 --- a/src/HttpResponse.ts +++ b/src/HttpResponse.ts @@ -1,4 +1,3 @@ -import { Response } from './Response' import { type DefaultBodyType } from './handlers/RequestHandler' import { createResponse } from './utils/HttpResponse/createResponse' import { decorateResponseInit } from './utils/HttpResponse/decorators' @@ -23,7 +22,7 @@ export interface StrictRequest } export const HttpResponse = { - plain( + plain( body?: BodyType | null, init?: HttpResponseInit, ): Response { @@ -89,7 +88,7 @@ export const HttpResponse = { * * HttpResponse.arrayBuffer(buffer) */ - arrayBuffer(body?: ArrayBuffer, init?: HttpResponseInit) { + arrayBuffer(body?: ArrayBuffer, init?: HttpResponseInit): Response { const responseInit = decorateResponseInit(init) if (body) { @@ -112,3 +111,13 @@ export const HttpResponse = { return createResponse(data, responseInit) }, } + +// +// + +// function check(r: StrictResponse<{ id: number }>) { +// return r +// } + +// check(new Response(1)) +// check(HttpResponse.json({ id: 1 })) diff --git a/src/bypass.ts b/src/bypass.ts index f9452ae9e..a74924816 100644 --- a/src/bypass.ts +++ b/src/bypass.ts @@ -1,4 +1,4 @@ -import type { Request as RemixRequest } from '@remix-run/web-fetch' +import { type Request as RequestPolyfill } from '@remix-run/web-fetch' import { Request } from './Request' /** @@ -11,7 +11,7 @@ import { Request } from './Request' * bypass(new URL('/resource', 'api.example.com')) * bypass(new Request('/user')) */ -export function bypass(input: string | URL | Request): RemixRequest { +export function bypass(input: string | URL | Request): RequestPolyfill { const request = toRequest(input) // Set the internal header that would instruct MSW @@ -23,7 +23,7 @@ export function bypass(input: string | URL | Request): RemixRequest { return request } -function toRequest(input: string | URL | Request): RemixRequest { +function toRequest(input: string | URL | Request): RequestPolyfill { if (input instanceof Request) { /** * @note When using "node-fetch", if the request instance @@ -31,11 +31,11 @@ function toRequest(input: string | URL | Request): RemixRequest { * the input to its "fetch()" will be invalid. "node-fetch" will * think it's given a URL object, and will throw on it being invalid. */ - return input.clone() as RemixRequest + return input.clone() as RequestPolyfill } const baseUrl = typeof location !== 'undefined' ? location.href : undefined const requestUrl = new URL(input, baseUrl) - return new Request(requestUrl) as RemixRequest + return new Request(requestUrl) as RequestPolyfill } diff --git a/src/handlers/GraphQLHandler.ts b/src/handlers/GraphQLHandler.ts index 18917c725..f13d9e15b 100644 --- a/src/handlers/GraphQLHandler.ts +++ b/src/handlers/GraphQLHandler.ts @@ -62,8 +62,6 @@ export function isDocumentNode( export class GraphQLHandler extends RequestHandler< GraphQLHandlerInfo, - /** @@todo */ - // @ts-ignore ParsedGraphQLRequest, GraphQLResolverExtras > { diff --git a/src/handlers/RequestHandler.ts b/src/handlers/RequestHandler.ts index aabfb7a66..d630b0eaf 100644 --- a/src/handlers/RequestHandler.ts +++ b/src/handlers/RequestHandler.ts @@ -27,9 +27,10 @@ export interface RequestHandlerInternalInfo { callFrame?: string } -export type ResponseResolverReturnType = - | Response - | StrictResponse +export type ResponseResolverReturnType< + BodyType extends DefaultBodyType = undefined, +> = + | (BodyType extends undefined ? Response : StrictResponse) | undefined | void @@ -71,7 +72,7 @@ export interface RequestHandlerPublicOptions { } export interface RequestHandlerExecutionResult< - ParsedResult extends Record, + ParsedResult extends Record | undefined, > { handler: RequestHandler parsedResult?: ParsedResult @@ -81,7 +82,7 @@ export interface RequestHandlerExecutionResult< export abstract class RequestHandler< HandlerInfo extends RequestHandlerDefaultInfo = RequestHandlerDefaultInfo, - ParsedResult extends Record = any, + ParsedResult extends Record | undefined = any, ResolverExtras extends Record = any, > { public info: HandlerInfo & RequestHandlerInternalInfo @@ -97,7 +98,7 @@ export abstract class RequestHandler< MaybeAsyncResponseResolverReturnType, MaybeAsyncResponseResolverReturnType > - private resolverGeneratorResult?: ResponseResolverReturnType + private resolverGeneratorResult?: Response | StrictResponse private once: boolean constructor(options: RequestHandlerOptions) { @@ -218,9 +219,7 @@ export abstract class RequestHandler< private wrapResolver( resolver: ResponseResolver, ): ResponseResolver { - return async ( - info, - ): Promise | Response | undefined | void> => { + return async (info): Promise> => { const result = this.resolverGenerator || (await resolver(info)) if (isIterable>(result)) { diff --git a/src/setupWorker/glossary.ts b/src/setupWorker/glossary.ts index 4e602e95b..f9022359e 100644 --- a/src/setupWorker/glossary.ts +++ b/src/setupWorker/glossary.ts @@ -123,7 +123,7 @@ export interface SetupWorkerInternalContext { * Adds an event listener on the given target. * Returns a clean-up function that removes that listener. */ - addListener( + addListener( target: EventTarget, eventType: string, listener: (event: EventType) => void, diff --git a/src/setupWorker/setupWorker.ts b/src/setupWorker/setupWorker.ts index 11a11c7a3..6e69c8f05 100644 --- a/src/setupWorker/setupWorker.ts +++ b/src/setupWorker/setupWorker.ts @@ -100,16 +100,13 @@ export function setupWorker( }, }, events: { - addListener( - target: EventTarget, - eventType: string, - callback: EventListener, - ) { - target.addEventListener(eventType, callback) - listeners.push({ eventType, target, callback }) + addListener(target, eventType, callback) { + const listener = callback as EventListener + target.addEventListener(eventType, listener) + listeners.push({ eventType, target, callback: listener }) return () => { - target.removeEventListener(eventType, callback) + target.removeEventListener(eventType, listener) } }, removeAllListeners() { diff --git a/test/typings/rest.test-d.ts b/test/typings/rest.test-d.ts index 241d4762a..69d529c76 100644 --- a/test/typings/rest.test-d.ts +++ b/test/typings/rest.test-d.ts @@ -1,4 +1,4 @@ -import { rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from '../../src' /** * Request path parameters. @@ -70,6 +70,12 @@ rest.get('/user', async ({ request }) => { /** * Response body generic. */ +rest.get('/user', () => { + // Allows responding with a plain Response + // when no response body generic is set. + return new Response('hello') +}) + rest.get('/user', () => { return HttpResponse.json({ id: 1 }) }) From de0bd2f7592277f20fa53de6fa5c3c14d75193b7 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 19 Oct 2022 14:35:36 +0200 Subject: [PATCH 044/210] fix(RequestHandler): set ResponseBodyType as undefined by default --- src/handlers/GraphQLHandler.ts | 2 +- src/handlers/RequestHandler.ts | 4 ++-- src/handlers/RestHandler.ts | 7 +------ src/rest.ts | 2 +- 4 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/handlers/GraphQLHandler.ts b/src/handlers/GraphQLHandler.ts index f13d9e15b..91a6e52ba 100644 --- a/src/handlers/GraphQLHandler.ts +++ b/src/handlers/GraphQLHandler.ts @@ -71,7 +71,7 @@ export class GraphQLHandler extends RequestHandler< operationType: ExpectedOperationTypeNode, operationName: GraphQLHandlerNameSelector, endpoint: Path, - resolver: ResponseResolver, any>, + resolver: ResponseResolver, any, any>, ) { let resolvedOperationName = operationName diff --git a/src/handlers/RequestHandler.ts b/src/handlers/RequestHandler.ts index d630b0eaf..2c677a145 100644 --- a/src/handlers/RequestHandler.ts +++ b/src/handlers/RequestHandler.ts @@ -56,7 +56,7 @@ export type ResponseResolverInfo< export type ResponseResolver< ResolverExtraInfo extends Record = Record, RequestBodyType extends DefaultBodyType = DefaultBodyType, - ResponseBodyType extends DefaultBodyType = DefaultBodyType, + ResponseBodyType extends DefaultBodyType = undefined, > = ( info: ResponseResolverInfo, ) => AsyncResponseResolverReturnType @@ -92,7 +92,7 @@ export abstract class RequestHandler< */ public isUsed: boolean - protected resolver: ResponseResolver + protected resolver: ResponseResolver private resolverGenerator?: Generator< MaybeAsyncResponseResolverReturnType, MaybeAsyncResponseResolverReturnType, diff --git a/src/handlers/RestHandler.ts b/src/handlers/RestHandler.ts index 3a65823af..82c11350e 100644 --- a/src/handlers/RestHandler.ts +++ b/src/handlers/RestHandler.ts @@ -15,7 +15,6 @@ import { getPublicUrlFromRequest } from '../utils/request/getPublicUrlFromReques import { getAllRequestCookies } from '../utils/request/getRequestCookies' import { cleanUrl, getSearchParams } from '../utils/url/cleanUrl' import { - DefaultBodyType, RequestHandler, RequestHandlerDefaultInfo, RequestHandlerPublicOptions, @@ -65,11 +64,7 @@ export class RestHandler extends RequestHandler< constructor( method: RestHandlerMethod, path: Path, - resolver: ResponseResolver< - RestRequestResolverExtras, - any, - DefaultBodyType - >, + resolver: ResponseResolver, any, any>, options?: RequestHandlerPublicOptions, ) { super({ diff --git a/src/rest.ts b/src/rest.ts index 139f5939a..ab16a3cfa 100644 --- a/src/rest.ts +++ b/src/rest.ts @@ -16,7 +16,7 @@ function createRestHandler( return < Params extends PathParams = PathParams, RequestBodyType extends DefaultBodyType = DefaultBodyType, - ResponseBodyType extends DefaultBodyType = DefaultBodyType, + ResponseBodyType extends DefaultBodyType = undefined, >( path: Path, resolver: ResponseResolver< From a27f6b7d01f06f3c9033ce0e1f11d2a23cb1fcb9 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 19 Oct 2022 14:35:51 +0200 Subject: [PATCH 045/210] test(cookies-inheritance): use a response body union type --- test/rest-api/cookies-inheritance.node.test.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/rest-api/cookies-inheritance.node.test.ts b/test/rest-api/cookies-inheritance.node.test.ts index d8e4f4811..6506e24fc 100644 --- a/test/rest-api/cookies-inheritance.node.test.ts +++ b/test/rest-api/cookies-inheritance.node.test.ts @@ -27,7 +27,11 @@ beforeAll(async () => { }, }) }), - rest.get(httpServer.https.makeUrl('/user'), ({ cookies }) => { + rest.get< + never, + never, + { firstName: string; lastName: string } | { error: string } + >(httpServer.https.makeUrl('/user'), ({ cookies }) => { if (cookies.authToken == null) { return HttpResponse.json( { From e00515343dfe8ef22e93beced6e9e2cd9068e9a9 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 21 Oct 2022 17:12:56 +0200 Subject: [PATCH 046/210] fix(bypass): support request generic to satisfy various polyfills --- src/bypass.ts | 17 ++++++++++------- test/graphql-api/response-patching.node.test.ts | 4 ++-- .../scenarios/response-patching.test.ts | 6 +++--- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/bypass.ts b/src/bypass.ts index a74924816..970e6a327 100644 --- a/src/bypass.ts +++ b/src/bypass.ts @@ -1,4 +1,3 @@ -import { type Request as RequestPolyfill } from '@remix-run/web-fetch' import { Request } from './Request' /** @@ -8,11 +7,13 @@ import { Request } from './Request' * * @example * bypass('/user') - * bypass(new URL('/resource', 'api.example.com')) + * bypass(new URL('/resource', 'https://example.com')) * bypass(new Request('/user')) */ -export function bypass(input: string | URL | Request): RequestPolyfill { - const request = toRequest(input) +export function bypass( + input: string | URL | Request, +): RequestType { + const request = toRequest(input) // Set the internal header that would instruct MSW // to bypass this request from any further request matching. @@ -23,7 +24,9 @@ export function bypass(input: string | URL | Request): RequestPolyfill { return request } -function toRequest(input: string | URL | Request): RequestPolyfill { +function toRequest( + input: string | URL | Request, +): RequestType { if (input instanceof Request) { /** * @note When using "node-fetch", if the request instance @@ -31,11 +34,11 @@ function toRequest(input: string | URL | Request): RequestPolyfill { * the input to its "fetch()" will be invalid. "node-fetch" will * think it's given a URL object, and will throw on it being invalid. */ - return input.clone() as RequestPolyfill + return input.clone() as RequestType } const baseUrl = typeof location !== 'undefined' ? location.href : undefined const requestUrl = new URL(input, baseUrl) - return new Request(requestUrl) as RequestPolyfill + return new Request(requestUrl) as RequestType } diff --git a/test/graphql-api/response-patching.node.test.ts b/test/graphql-api/response-patching.node.test.ts index 330129256..b56df743e 100644 --- a/test/graphql-api/response-patching.node.test.ts +++ b/test/graphql-api/response-patching.node.test.ts @@ -1,7 +1,7 @@ /** * @jest-environment node */ -import fetch from '@remix-run/web-fetch' +import fetch, { Request as RemixRequest } from '@remix-run/web-fetch' import { bypass, graphql, HttpResponse } from 'msw' import { setupServer } from 'msw/node' import { graphql as executeGraphql, buildSchema } from 'graphql' @@ -12,7 +12,7 @@ let httpServer: ServerApi const server = setupServer( graphql.query('GetUser', async ({ request }) => { - const originalResponse = await fetch(bypass(request)) + const originalResponse = await fetch(bypass(request)) const { requestHeaders, queryResult } = await originalResponse.json() return HttpResponse.json({ diff --git a/test/msw-api/setup-server/scenarios/response-patching.test.ts b/test/msw-api/setup-server/scenarios/response-patching.test.ts index 5e4cd2165..a7789cbb6 100644 --- a/test/msw-api/setup-server/scenarios/response-patching.test.ts +++ b/test/msw-api/setup-server/scenarios/response-patching.test.ts @@ -1,7 +1,7 @@ /** * @jest-environment node */ -import fetch from '@remix-run/web-fetch' +import fetch, { Request as RemixRequest } from '@remix-run/web-fetch' import { createServer, ServerApi } from '@open-draft/test-server' import { HttpResponse, Request, rest, bypass } from 'msw' import { setupServer } from 'msw/node' @@ -16,7 +16,7 @@ interface ResponseBody { const server = setupServer( rest.get('https://test.mswjs.io/user', async () => { const originalResponse = await fetch( - bypass(httpServer.http.makeUrl('/user')), + bypass(httpServer.http.makeUrl('/user')), ) const body = await originalResponse.json() @@ -32,7 +32,7 @@ const server = setupServer( const performRequest = shouldBypass ? () => fetch( - bypass( + bypass( new Request(httpServer.http.makeUrl('/user'), { method: 'POST', }), From f3894cf515bb946ebada75affa917914f77cd281 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 7 Nov 2022 19:36:11 +0100 Subject: [PATCH 047/210] chore: update to @mswjs/interceptors@0.18.0 --- package.json | 2 +- yarn.lock | 44 +++++++++++++++++++++++++++++++++++--------- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index d2cbdb987..95065fc05 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "sideEffects": false, "dependencies": { "@mswjs/cookies": "^0.2.2", - "@mswjs/interceptors": "^0.17.5", + "@mswjs/interceptors": "^0.18.0", "@open-draft/until": "^1.0.3", "@remix-run/web-fetch": "^4.3.0", "@types/cookie": "^0.4.1", diff --git a/yarn.lock b/yarn.lock index d95f49ed7..3beaf10a8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1722,14 +1722,15 @@ "@types/set-cookie-parser" "^2.4.0" set-cookie-parser "^2.4.6" -"@mswjs/interceptors@^0.17.5": - version "0.17.5" - resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.17.5.tgz#38a7502e5bf8b579901adece32693b1620ea7172" - integrity sha512-/uZkyPUZMRExZs+DZQVnc+uoDwLfs1gFNvcRY5S3Gu78U+uhovaSEUW3tuyld1e7Oke5Qphfseb8v66V+H1zWQ== +"@mswjs/interceptors@^0.18.0": + version "0.18.0" + resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.18.0.tgz#d95c1f93499904f164eb1749ae9bf047da15fa41" + integrity sha512-eP7zXyiFnm+wmzlmPx0V8Po1+ydqqg2/7Ddj6sJfaXA4sg5pCxsU8IoCuhE3KJPomD/rVvvHdvIqq1JPB+Jqgw== dependencies: "@open-draft/until" "^1.0.3" + "@remix-run/web-fetch" "^4.3.1" "@types/debug" "^4.1.7" - "@xmldom/xmldom" "^0.7.5" + "@xmldom/xmldom" "^0.8.3" debug "^4.3.3" headers-polyfill "^3.1.0" outvariant "^1.2.1" @@ -1826,6 +1827,19 @@ data-uri-to-buffer "^3.0.1" mrmime "^1.0.0" +"@remix-run/web-fetch@^4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@remix-run/web-fetch/-/web-fetch-4.3.1.tgz#afc88e133bed1a6aecb9d09b1b02127fc844da47" + integrity sha512-TOpuJo3jI7/qJAY0yTnvNJRQl4hlWAOHUHYKAbEddcLFLydv+0/WGT6OaIurJKsBFJJTjooe3FbKiP74sUIB/g== + dependencies: + "@remix-run/web-blob" "^3.0.4" + "@remix-run/web-form-data" "^3.0.3" + "@remix-run/web-stream" "^1.0.3" + "@web3-storage/multipart-parser" "^1.0.0" + abort-controller "^3.0.0" + data-uri-to-buffer "^3.0.1" + mrmime "^1.0.0" + "@remix-run/web-form-data@^3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@remix-run/web-form-data/-/web-form-data-3.0.3.tgz#f89a7f971aaf1084d2da87affbb7f4e01c32b8ce" @@ -2458,10 +2472,10 @@ "@webassemblyjs/ast" "1.11.1" "@xtuc/long" "4.2.2" -"@xmldom/xmldom@^0.7.5": - version "0.7.5" - resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.5.tgz#09fa51e356d07d0be200642b0e4f91d8e6dd408d" - integrity sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A== +"@xmldom/xmldom@^0.8.3": + version "0.8.6" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.6.tgz#8a1524eb5bd5e965c1e3735476f0262469f71440" + integrity sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -2491,6 +2505,13 @@ abab@^2.0.3, abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -4723,6 +4744,11 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + eventemitter3@^4.0.0: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" From 0157d821831c5b68fc8a7402542b67f8902db8be Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 8 Nov 2022 14:14:22 +0100 Subject: [PATCH 048/210] chore: use @swc/jest vs ts-jest --- jest.config.js | 2 +- package.json | 5 +- test/jest.config.js | 4 +- yarn.lock | 184 ++++++++++++++++++++++++++++++-------------- 4 files changed, 132 insertions(+), 63 deletions(-) diff --git a/jest.config.js b/jest.config.js index 516f8170e..68450831a 100644 --- a/jest.config.js +++ b/jest.config.js @@ -2,7 +2,7 @@ module.exports = { bail: true, roots: ['/src', '/cli'], transform: { - '^.+\\.tsx?$': 'ts-jest', + '^.+\\.tsx?$': '@swc/jest', }, testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.(j|t)sx?$', moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'], diff --git a/package.json b/package.json index 95065fc05..dc43f7f62 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "sideEffects": false, "dependencies": { "@mswjs/cookies": "^0.2.2", - "@mswjs/interceptors": "^0.18.0", + "@mswjs/interceptors": "^0.18.2", "@open-draft/until": "^1.0.3", "@remix-run/web-fetch": "^4.3.0", "@types/cookie": "^0.4.1", @@ -117,6 +117,8 @@ "@commitlint/config-conventional": "^16.0.0", "@open-draft/test-server": "^0.2.3", "@ossjs/release": "^0.4.0", + "@swc/core": "^1.3.14", + "@swc/jest": "^0.2.23", "@types/fs-extra": "^9.0.13", "@types/jest": "26", "@types/json-bigint": "^1.0.1", @@ -144,7 +146,6 @@ "regenerator-runtime": "^0.13.9", "rimraf": "^3.0.2", "simple-git-hooks": "^2.8.0", - "ts-jest": "26", "ts-loader": "^9.2.6", "ts-node": "^10.1.0", "tsup": "^5.12.8", diff --git a/test/jest.config.js b/test/jest.config.js index df67b023f..3de3b632d 100644 --- a/test/jest.config.js +++ b/test/jest.config.js @@ -1,5 +1,7 @@ module.exports = { - preset: 'ts-jest', + transform: { + '^.+\\.(t|j)sx?$': '@swc/jest', + }, testTimeout: 15000, moduleNameMapper: { '^msw(.*)': '/..$1', diff --git a/yarn.lock b/yarn.lock index 3beaf10a8..7ad89d3f6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1541,6 +1541,13 @@ slash "^3.0.0" strip-ansi "^6.0.0" +"@jest/create-cache-key-function@^27.4.2": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-27.5.1.tgz#7448fae15602ea95c828f5eceed35c202a820b31" + integrity sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ== + dependencies: + "@jest/types" "^27.5.1" + "@jest/environment@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" @@ -1666,6 +1673,17 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + "@jridgewell/gen-mapping@^0.3.0": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" @@ -1722,10 +1740,10 @@ "@types/set-cookie-parser" "^2.4.0" set-cookie-parser "^2.4.6" -"@mswjs/interceptors@^0.18.0": - version "0.18.0" - resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.18.0.tgz#d95c1f93499904f164eb1749ae9bf047da15fa41" - integrity sha512-eP7zXyiFnm+wmzlmPx0V8Po1+ydqqg2/7Ddj6sJfaXA4sg5pCxsU8IoCuhE3KJPomD/rVvvHdvIqq1JPB+Jqgw== +"@mswjs/interceptors@^0.18.2": + version "0.18.2" + resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.18.2.tgz#9753e12d0ed24db096057d6693b9390e9c678513" + integrity sha512-Oux/yZYEZuM0vPBsk+DA9gu9Tpw+OMxIdyTxlSBCF7Rt0Yh51slq8cxy9YSojng+xgCd6jEodTwv9hPHheZk3g== dependencies: "@open-draft/until" "^1.0.3" "@remix-run/web-fetch" "^4.3.1" @@ -1868,6 +1886,80 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@swc/core-darwin-arm64@1.3.14": + version "1.3.14" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.14.tgz#47350e5cc3807a44321e883b35516146747ce4d0" + integrity sha512-QFuUq3341uOCrJMIWGuo+CmRC5qZoM2lUo7o2lmv1FO1Dh9njTG85pLD83vz6y4j/F034DBGzvRgSti/Bsoccw== + +"@swc/core-darwin-x64@1.3.14": + version "1.3.14" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.14.tgz#5028baa85f99e5fb65117a8413d6f0a000dfd136" + integrity sha512-fpAjbjXimJBmxCumRB8zjEtPc0lGUi9Uvu92XH6ww6AyXvg7KQmua5P2R9tnzAm6NwTCXKkgS86cgKysAbbObw== + +"@swc/core-linux-arm-gnueabihf@1.3.14": + version "1.3.14" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.14.tgz#6c03573b9b4b53c2e2ebb9bb52e097649bc19c5b" + integrity sha512-3XSFlgIyDPS+x2c0IFr0AGj4NUbrWGKbkkUCpmAURII0n3YoDsYw8Ux73I8MkWxTTwDGkou8qQOXyA28kAUM4w== + +"@swc/core-linux-arm64-gnu@1.3.14": + version "1.3.14" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.14.tgz#2dc7aa4b6c58be99061307fd06e56570f0f94e0e" + integrity sha512-r3fToDRYX76NEptAjvDg5aGrbitOgqooV37RpSTIGYd/CSNuin4cpCNFdca/Vh5lnNfal7mqdGDbG7gMruARtw== + +"@swc/core-linux-arm64-musl@1.3.14": + version "1.3.14" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.14.tgz#d9b8e6c91779fba0a1e8fc74f27848005516663d" + integrity sha512-IivEUC+3HNSsQNCfaCDzev2CpsvWpgFReitCmj0PKIdXFRsTi78jtJiraLWnYy956j4wwZbKN0OFGkS2ekKAVg== + +"@swc/core-linux-x64-gnu@1.3.14": + version "1.3.14" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.14.tgz#d00f39e8ab6b65761a9f6352520310154b01efbf" + integrity sha512-HtwwA1Z0tE2z9fgaR5ehgY5ULbnVLHj3tayyWhIElF4EWsi6aQfCyn/oCZAcjoPKfEnJiSNBYt5gMmfK8l4mJA== + +"@swc/core-linux-x64-musl@1.3.14": + version "1.3.14" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.14.tgz#0868546ea3228795734e771a6835c3921864604b" + integrity sha512-RPXilkTD8IVgpou4TNuqZJOB7kMrVJ7sm7GgHF4v1eV3xdIyvy4w5FWjXZRdwMW6iunLgQEckuOmVx0I4mrdNg== + +"@swc/core-win32-arm64-msvc@1.3.14": + version "1.3.14" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.14.tgz#398f6a0517b0e8bceb98680e7d2eaa9430a4df95" + integrity sha512-H8Ka/ahJRs84hQCHC5ndORujbLBmi1mv+Z/m4CXpOaEX7TmeAo8nA17rrRckNvVkud9fghsKQGjkBQvJ0v7mRw== + +"@swc/core-win32-ia32-msvc@1.3.14": + version "1.3.14" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.14.tgz#be356a8fa3810e89d72bef57497aebdf03d64b7a" + integrity sha512-H3ZmDXrVxrqBzzCFodwYfcXfTHE0xGNLJlLGzJ4haV6RBM3ZYIvRzDtPivDzic/VQncmPj1WpLoEDfx/7KNC8Q== + +"@swc/core-win32-x64-msvc@1.3.14": + version "1.3.14" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.14.tgz#5d1dba5203030538d2c0161630068a17b5b4fd88" + integrity sha512-/D1lhWF/DQi2M7b6jWL35NmTY0mRJ5mwTXdmjqNNWOZ8h8TXQo1A3/FDFnfIIcRUeSNdF7IeB3xInT3BI34E1w== + +"@swc/core@^1.3.14": + version "1.3.14" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.14.tgz#596a0ba34ffd63eb87778eeffe9e97916a87af7d" + integrity sha512-LpTTrXOGS7vnbR/rHrAux7GykUWbyVmI5NbICl9iF9yeqFdGm6JjaGBhbanmG8zrQL5aFx2kMxxb92V9D1KUiw== + optionalDependencies: + "@swc/core-darwin-arm64" "1.3.14" + "@swc/core-darwin-x64" "1.3.14" + "@swc/core-linux-arm-gnueabihf" "1.3.14" + "@swc/core-linux-arm64-gnu" "1.3.14" + "@swc/core-linux-arm64-musl" "1.3.14" + "@swc/core-linux-x64-gnu" "1.3.14" + "@swc/core-linux-x64-musl" "1.3.14" + "@swc/core-win32-arm64-msvc" "1.3.14" + "@swc/core-win32-ia32-msvc" "1.3.14" + "@swc/core-win32-x64-msvc" "1.3.14" + +"@swc/jest@^0.2.23": + version "0.2.23" + resolved "https://registry.yarnpkg.com/@swc/jest/-/jest-0.2.23.tgz#0b7499d5927faaa090c5b7a4a0e35122968fef30" + integrity sha512-ZLj17XjHbPtNsgqjm83qizENw05emLkKGu3WuPUttcy9hkngl0/kcc7fDbcSBpADS0GUtsO+iKPjZFWVAtJSlA== + dependencies: + "@jest/create-cache-key-function" "^27.4.2" + jsonc-parser "^3.2.0" + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -2252,6 +2344,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yargs@^16.0.0": + version "16.0.4" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" + integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== + dependencies: + "@types/yargs-parser" "*" + "@types/yargs@^17.0.10": version "17.0.10" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.10.tgz#591522fce85d8739bca7b8bb90d048e4478d186a" @@ -3289,13 +3388,6 @@ browserslist@^4.19.1: node-releases "^2.0.1" picocolors "^1.0.0" -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -3308,11 +3400,6 @@ buffer-crc32@~0.2.3: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= -buffer-from@1.x: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -4977,7 +5064,7 @@ fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -6652,7 +6739,7 @@ jest-snapshot@^26.6.2: pretty-format "^26.6.2" semver "^7.3.2" -jest-util@^26.1.0, jest-util@^26.6.2: +jest-util@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== @@ -6824,13 +6911,6 @@ json3@^3.3.3: resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== -json5@2.x, json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -6838,6 +6918,18 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + +jsonc-parser@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -7067,7 +7159,7 @@ lodash.uniqby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" integrity sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI= -lodash@4.x, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -7114,7 +7206,7 @@ make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: dependencies: semver "^6.0.0" -make-error@1.x, make-error@^1.1.1: +make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== @@ -7334,11 +7426,6 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@1.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - mkdirp@^0.5.1, mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" @@ -8781,18 +8868,18 @@ semver@7.3.5, semver@^7.3.5: dependencies: lru-cache "^6.0.0" -semver@7.x, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: version "7.3.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== dependencies: lru-cache "^6.0.0" -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" @@ -9706,22 +9793,6 @@ ts-interface-checker@^0.1.9: resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== -ts-jest@26: - version "26.5.6" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.6.tgz#c32e0746425274e1dfe333f43cd3c800e014ec35" - integrity sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA== - dependencies: - bs-logger "0.x" - buffer-from "1.x" - fast-json-stable-stringify "2.x" - jest-util "^26.1.0" - json5 "2.x" - lodash "4.x" - make-error "1.x" - mkdirp "1.x" - semver "7.x" - yargs-parser "20.x" - ts-loader@^9.2.6: version "9.2.6" resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.2.6.tgz#9937c4dd0a1e3dbbb5e433f8102a6601c6615d74" @@ -10526,11 +10597,6 @@ yaml@^2.1.1: resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.1.tgz#1e06fb4ca46e60d9da07e4f786ea370ed3c3cfec" integrity sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw== -yargs-parser@20.x: - version "20.2.5" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.5.tgz#5d37729146d3f894f39fc94b6796f5b239513186" - integrity sha512-jYRGS3zWy20NtDtK2kBgo/TlAoy5YUuhD9/LZ7z7W4j1Fdw2cqD0xEEclf8fxc8xjD6X5Qr+qQQwCEsP8iRiYg== - yargs-parser@^10.0.0: version "10.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" From 9b50319b8c57960b9b88a885ae30658034961c40 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 8 Nov 2022 14:24:24 +0100 Subject: [PATCH 049/210] fix(bypass): return [url, init] tuple for polyfill compatibility --- MIGRATING.md | 15 +++- src/Request.ts | 3 +- src/bypass.test.ts | 29 ++++--- src/bypass.ts | 76 ++++++++++++------- test/graphql-api/response-patching.mocks.ts | 2 +- .../response-patching.node.test.ts | 10 ++- .../scenarios/response-patching.test.ts | 8 +- test/rest-api/response-patching.mocks.ts | 20 ++--- test/support/graphql.ts | 4 +- 9 files changed, 105 insertions(+), 62 deletions(-) diff --git a/MIGRATING.md b/MIGRATING.md index fd97f0bf3..4ecac2553 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -285,11 +285,24 @@ import { rest, bypass } from 'msw' export const handlers = [ rest.get('https://api.github.com/user/:username', async ({ request }) => { // Performs an original "GET" request to the GitHub REST API. - const original = await fetch(bypass(request)) + const original = await fetch(...bypass(request)) }), ] ``` +> Note that `bypass()` returns a tuple of request input and init instead of a `Request` instance. That is because fetch polyfills lock-in the request identity to the requests created using those polyfills. + +The `bypass()` function also accepts `RequestInit` as the second argument to modify the bypassed request. + +```js +// Bypass the given "request" and modify its headers. +bypass(request, { + headers: { + 'X-Modified-Header': 'true', + }, +}) +``` + ### `ctx.cookie()` Please set the "Set-Cookie" response header in order to mock response cookies. diff --git a/src/Request.ts b/src/Request.ts index 95a3803fa..8cbe8cd59 100644 --- a/src/Request.ts +++ b/src/Request.ts @@ -1,3 +1,4 @@ export const Request: typeof globalThis.Request = globalThis.Request ? globalThis.Request - : require('@remix-run/web-fetch').Request + : require('@mswjs/interceptors/lib/utils/RequestWithCredentials') + .RequestWithCredentials diff --git a/src/bypass.test.ts b/src/bypass.test.ts index 2f0c9aa55..6d5c2d7fb 100644 --- a/src/bypass.test.ts +++ b/src/bypass.test.ts @@ -1,21 +1,25 @@ /** * @jest-environment jsdom */ +import { Headers } from 'headers-polyfill' import { Request } from './Request' import { bypass } from './bypass' it('returns bypassed request given a request url string', () => { - const request = bypass('/user') + const [url, init] = bypass('/user') + const headers = new Headers(init.headers) - expect(request.url).toBe('http://localhost/user') - expect(request.headers.get('x-msw-intention')).toBe('bypass') + // Relative URLs are rebased against the current location. + expect(url).toBe('http://localhost/user') + expect(headers.get('x-msw-intention')).toBe('bypass') }) it('returns bypassed request given a request url', () => { - const request = bypass(new URL('/user', 'https://api.github.com')) + const [url, init] = bypass(new URL('/user', 'https://api.github.com')) + const headers = new Headers(init.headers) - expect(request.url).toBe('https://api.github.com/user') - expect(request.headers.get('x-msw-intention')).toBe('bypass') + expect(url).toBe('https://api.github.com/user') + expect(headers.get('x-msw-intention')).toBe('bypass') }) it('returns bypassed request given request instance', async () => { @@ -26,11 +30,12 @@ it('returns bypassed request given request instance', async () => { }, body: 'hello world', }) - const request = bypass(original) + const [url, init] = bypass(original) + const headers = new Headers(init.headers) - expect(request.method).toBe('POST') - expect(request.url).toBe('http://localhost/resource') - expect(request.headers.get('x-msw-intention')).toBe('bypass') - expect(request.headers.get('x-my-header')).toBe('value') - expect(await request.text()).toBe('hello world') + expect(url).toBe('http://localhost/resource') + expect(init.method).toBe('POST') + expect(init.body).toEqual(original.body) + expect(headers.get('x-msw-intention')).toBe('bypass') + expect(headers.get('x-my-header')).toBe('value') }) diff --git a/src/bypass.ts b/src/bypass.ts index 970e6a327..5719a0be9 100644 --- a/src/bypass.ts +++ b/src/bypass.ts @@ -1,44 +1,62 @@ -import { Request } from './Request' +import { Headers } from 'headers-polyfill' /** - * Creates a "Request" instance that, when fetched, will - * ignore any otherwise matching request handlers and will - * by performed against the actual network. + * Derives request input and init from the given Request info + * to define a request that will always be ignored by MSW. * * @example - * bypass('/user') - * bypass(new URL('/resource', 'https://example.com')) - * bypass(new Request('/user')) + * import fetch, { Request } from 'node-fetch' + * import { bypass } from 'msw' + * + * fetch(...bypass('/resource')) + * fetch(...bypass(new URL('/resource', 'https://example.com))) + * fetch(...bypass(new Request('https://example.com/resource'))) */ -export function bypass( +export function bypass( input: string | URL | Request, -): RequestType { - const request = toRequest(input) + init?: RequestInit, +): [string, RequestInit] { + const isGivenRequest = isRequest(input) + const url = isGivenRequest ? input.url : input.toString() + const resolvedInit: RequestInit = + typeof init !== 'undefined' + ? init + : isGivenRequest + ? { + // Set each request init property explicitly + // to prevent leaking internal properties of whichever + // Request polyfill provided as the input. + mode: input.mode, + method: input.method, + body: input.body, + cache: input.cache, + headers: input.headers, + credentials: input.credentials, + signal: input.signal, + referrerPolicy: input.referrerPolicy, + referrer: input.referrer, + redirect: input.redirect, + integrity: input.integrity, + keepalive: input.keepalive, + } + : {} // Set the internal header that would instruct MSW // to bypass this request from any further request matching. // Unlike "passthrough()", bypass is meant for performing // additional requests within pending request resolution. - request.headers.set('x-msw-intention', 'bypass') + const headers = new Headers(resolvedInit.headers) + headers.set('x-msw-intention', 'bypass') + resolvedInit.headers = headers - return request + return [url, resolvedInit] } -function toRequest( - input: string | URL | Request, -): RequestType { - if (input instanceof Request) { - /** - * @note When using "node-fetch", if the request instance - * hasn't been constructed using ONLY the "node-fetch"'s Request, - * the input to its "fetch()" will be invalid. "node-fetch" will - * think it's given a URL object, and will throw on it being invalid. - */ - return input.clone() as RequestType - } - - const baseUrl = typeof location !== 'undefined' ? location.href : undefined - const requestUrl = new URL(input, baseUrl) - - return new Request(requestUrl) as RequestType +function isRequest(input: string | URL | Request): input is Request { + return ( + typeof input === 'object' && + input.constructor.name === 'Request' && + 'clone' in input && + typeof input.clone === 'function' + ) } diff --git a/test/graphql-api/response-patching.mocks.ts b/test/graphql-api/response-patching.mocks.ts index 1b257371d..f0e112355 100644 --- a/test/graphql-api/response-patching.mocks.ts +++ b/test/graphql-api/response-patching.mocks.ts @@ -10,7 +10,7 @@ interface GetUserQuery { const worker = setupWorker( graphql.query('GetUser', async ({ request }) => { - const originalResponse = await fetch(bypass(request)) + const originalResponse = await fetch(...bypass(request)) const originalJson = await originalResponse.json() return HttpResponse.json({ diff --git a/test/graphql-api/response-patching.node.test.ts b/test/graphql-api/response-patching.node.test.ts index b56df743e..d08888956 100644 --- a/test/graphql-api/response-patching.node.test.ts +++ b/test/graphql-api/response-patching.node.test.ts @@ -1,9 +1,10 @@ /** * @jest-environment node */ -import fetch, { Request as RemixRequest } from '@remix-run/web-fetch' +import { invariant } from 'outvariant' import { bypass, graphql, HttpResponse } from 'msw' import { setupServer } from 'msw/node' +import fetch from '@remix-run/web-fetch' import { graphql as executeGraphql, buildSchema } from 'graphql' import { ServerApi, createServer } from '@open-draft/test-server' import { createGraphQLClient, gql } from '../support/graphql' @@ -12,7 +13,8 @@ let httpServer: ServerApi const server = setupServer( graphql.query('GetUser', async ({ request }) => { - const originalResponse = await fetch(bypass(request)) + const requestInfo = bypass(request) + const originalResponse = await fetch(...requestInfo) const { requestHeaders, queryResult } = await originalResponse.json() return HttpResponse.json({ @@ -34,9 +36,11 @@ beforeAll(async () => { server.listen() // This test server acts as a production server MSW will be hitting - // when performing a request patching with `ctx.fetch()`. + // when performing a bypassed request. httpServer = await createServer((app) => { app.post('/graphql', async (req, res) => { + invariant(req.body.query, 'Request body does not have a query') + const result = await executeGraphql({ schema: buildSchema(gql` type User { diff --git a/test/msw-api/setup-server/scenarios/response-patching.test.ts b/test/msw-api/setup-server/scenarios/response-patching.test.ts index a7789cbb6..3005620e3 100644 --- a/test/msw-api/setup-server/scenarios/response-patching.test.ts +++ b/test/msw-api/setup-server/scenarios/response-patching.test.ts @@ -1,7 +1,7 @@ /** * @jest-environment node */ -import fetch, { Request as RemixRequest } from '@remix-run/web-fetch' +import fetch from '@remix-run/web-fetch' import { createServer, ServerApi } from '@open-draft/test-server' import { HttpResponse, Request, rest, bypass } from 'msw' import { setupServer } from 'msw/node' @@ -16,7 +16,7 @@ interface ResponseBody { const server = setupServer( rest.get('https://test.mswjs.io/user', async () => { const originalResponse = await fetch( - bypass(httpServer.http.makeUrl('/user')), + ...bypass(httpServer.http.makeUrl('/user')), ) const body = await originalResponse.json() @@ -32,7 +32,7 @@ const server = setupServer( const performRequest = shouldBypass ? () => fetch( - bypass( + ...bypass( new Request(httpServer.http.makeUrl('/user'), { method: 'POST', }), @@ -90,7 +90,7 @@ test('returns a combination of mocked and original responses', async () => { }) }) -test('bypasses a mocked request when using "ctx.fetch"', async () => { +test('bypasses a mocked request when using "bypass()"', async () => { const res = await fetch('https://test.mswjs.io/complex-request?bypass=true') expect(res.status).toBe(200) diff --git a/test/rest-api/response-patching.mocks.ts b/test/rest-api/response-patching.mocks.ts index edf9490e6..943898226 100644 --- a/test/rest-api/response-patching.mocks.ts +++ b/test/rest-api/response-patching.mocks.ts @@ -2,7 +2,7 @@ import { setupWorker, rest, HttpResponse, bypass } from 'msw' const worker = setupWorker( rest.get('/user', async () => { - const originalResponse = await fetch(bypass('/user')) + const originalResponse = await fetch(...bypass('/user')) const body = await originalResponse.json() return HttpResponse.json({ @@ -13,7 +13,7 @@ const worker = setupWorker( }), rest.get('/repos/:owner/:repoName', async ({ request }) => { - const originalResponse = await fetch(bypass(request)) + const originalResponse = await fetch(...bypass(request)) const body = await originalResponse.json() return HttpResponse.json({ @@ -23,17 +23,19 @@ const worker = setupWorker( }), rest.get('/headers', async ({ request }) => { - const originalResponse = await fetch(bypass('/headers-proxy'), { - method: 'POST', - headers: request.headers, - }) + const originalResponse = await fetch( + ...bypass('/headers-proxy', { + method: 'POST', + headers: request.headers, + }), + ) const body = await originalResponse.json() return HttpResponse.json(body) }), rest.post('/posts', async ({ request }) => { - const originalResponse = await fetch(bypass(request)) + const originalResponse = await fetch(...bypass(request)) const body = await originalResponse.json() return HttpResponse.json( @@ -50,7 +52,7 @@ const worker = setupWorker( }), rest.get('/posts', async ({ request }) => { - const originalResponse = await fetch(bypass(request)) + const originalResponse = await fetch(...bypass(request)) const body = await originalResponse.json() return HttpResponse.json({ @@ -60,7 +62,7 @@ const worker = setupWorker( }), rest.head('/posts', async ({ request }) => { - const originalResponse = await fetch(bypass(request)) + const originalResponse = await fetch(...bypass(request)) return HttpResponse.json( { diff --git a/test/support/graphql.ts b/test/support/graphql.ts index 766e47c5d..03f21c0f5 100644 --- a/test/support/graphql.ts +++ b/test/support/graphql.ts @@ -26,7 +26,7 @@ export function createGraphQLClient(options: GraphQLClientOPtions) { const fetchFn = options.fetch || fetch return async (input: GraphQLOperationInput): Promise => { - const res = await fetchFn(options.uri, { + const response = await fetchFn(options.uri, { method: 'POST', headers: { accept: '*/*', @@ -38,6 +38,6 @@ export function createGraphQLClient(options: GraphQLClientOPtions) { // No need to transform the JSON into `ExecutionResult`, // because that's the responsibility of an actual server // or an MSW request handler. - return res.json() + return response.json() } } From 10e3691a3e5c43fea21bc5508539df7a9f552812 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 14 Nov 2022 23:52:38 +0100 Subject: [PATCH 050/210] chore: fix failing bypass test --- src/bypass.test.ts | 2 +- src/setupWorker/start/utils/createMessageChannel.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bypass.test.ts b/src/bypass.test.ts index 6d5c2d7fb..4ac7975e9 100644 --- a/src/bypass.test.ts +++ b/src/bypass.test.ts @@ -10,7 +10,7 @@ it('returns bypassed request given a request url string', () => { const headers = new Headers(init.headers) // Relative URLs are rebased against the current location. - expect(url).toBe('http://localhost/user') + expect(url).toBe('/user') expect(headers.get('x-msw-intention')).toBe('bypass') }) diff --git a/src/setupWorker/start/utils/createMessageChannel.ts b/src/setupWorker/start/utils/createMessageChannel.ts index be4493ab5..60b07741e 100644 --- a/src/setupWorker/start/utils/createMessageChannel.ts +++ b/src/setupWorker/start/utils/createMessageChannel.ts @@ -31,7 +31,7 @@ export class WorkerChannel { this.port.postMessage( { type: event, data }, { - // @ts-expect-error ReadableStream can be transferred + // @ts-ignore ReadableStream can be transferred // but TypeScript doesn't acknowledge that. transfer, }, From 88748123f84051a27639097969854ab23e2db2d4 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 15 Nov 2022 00:21:22 +0100 Subject: [PATCH 051/210] chore: fix worker context event listener compatibility --- src/setupWorker/glossary.ts | 6 ++- src/setupWorker/setupWorker.ts | 72 +++++++++++++--------------------- test/typings/tsconfig.json | 6 +-- 3 files changed, 35 insertions(+), 49 deletions(-) diff --git a/src/setupWorker/glossary.ts b/src/setupWorker/glossary.ts index 07374e3b0..3a990681f 100644 --- a/src/setupWorker/glossary.ts +++ b/src/setupWorker/glossary.ts @@ -92,6 +92,10 @@ export interface ServiceWorkerBroadcastChannelMessageMap { MOCK_RESPONSE_END(): void } +export interface StrictEventListener { + (event: EventType): void +} + export interface SetupWorkerInternalContext { isMockingEnabled: boolean startOptions: RequiredDeep @@ -126,7 +130,7 @@ export interface SetupWorkerInternalContext { addListener( target: EventTarget, eventType: string, - listener: (event: EventType) => void, + callback: StrictEventListener, ): () => void /** * Removes all currently attached listeners. diff --git a/src/setupWorker/setupWorker.ts b/src/setupWorker/setupWorker.ts index 9f6b308d9..2b602815e 100644 --- a/src/setupWorker/setupWorker.ts +++ b/src/setupWorker/setupWorker.ts @@ -23,7 +23,7 @@ import { LifeCycleEventsMap } from '../sharedOptions' interface Listener { target: EventTarget eventType: string - callback: EventListener + callback: EventListenerOrEventListenerObject } export class SetupWorkerApi extends SetupApi { @@ -47,7 +47,7 @@ export class SetupWorkerApi extends SetupApi { } private createWorkerContext(): SetupWorkerInternalContext { - const context = { + const context: SetupWorkerInternalContext = { // Mocking is not considered enabled until the worker // signals back the successful activation event. isMockingEnabled: false, @@ -57,55 +57,41 @@ export class SetupWorkerApi extends SetupApi { requestHandlers: this.currentHandlers, emitter: this.emitter, workerChannel: { - on: ( - eventType: EventType, - callback: ( - event: MessageEvent, - message: ServiceWorkerMessage< - EventType, - ServiceWorkerIncomingEventsMap[EventType] - >, - ) => void, - ) => { - this.context.events.addListener( - navigator.serviceWorker, - 'message', - (event: MessageEvent) => { - // Avoid messages broadcasted from unrelated workers. - if (event.source !== this.context.worker) { - return - } + on: (eventType, callback) => { + this.context.events.addListener< + MessageEvent> + >(navigator.serviceWorker, 'message', (event) => { + // Avoid messages broadcasted from unrelated workers. + if (event.source !== this.context.worker) { + return + } - const message = event.data as ServiceWorkerMessage< - typeof eventType, - any - > + const message = event.data - if (!message) { - return - } + if (!message) { + return + } - if (message.type === eventType) { - callback(event, message) - } - }, - ) + if (message.type === eventType) { + callback(event, message) + } + }) }, - send: (type: any) => { + send: (type) => { this.context.worker?.postMessage(type) }, }, events: { - addListener: ( - target: EventTarget, - eventType: string, - callback: EventListener, - ) => { - target.addEventListener(eventType, callback) - this.listeners.push({ eventType, target, callback }) + addListener: (target, eventType, callback) => { + target.addEventListener(eventType, callback as EventListener) + this.listeners.push({ + eventType, + target, + callback: callback as EventListener, + }) return () => { - target.removeEventListener(eventType, callback) + target.removeEventListener(eventType, callback as EventListener) } }, removeAllListeners: () => { @@ -114,9 +100,7 @@ export class SetupWorkerApi extends SetupApi { } this.listeners = [] }, - once: ( - eventType: EventType, - ) => { + once: (eventType) => { const bindings: Array<() => void> = [] return new Promise< diff --git a/test/typings/tsconfig.json b/test/typings/tsconfig.json index d149b93ad..ce1fa9209 100644 --- a/test/typings/tsconfig.json +++ b/test/typings/tsconfig.json @@ -1,15 +1,13 @@ { + "extends": "../../tsconfig", "compilerOptions": { - "strict": true, "target": "esnext", "module": "commonjs", "noEmit": true, - "esModuleInterop": true, - "resolveJsonModule": true, - "moduleResolution": "Node", "types": ["node"], "typeRoots": ["../../node_modules/@types"], "lib": ["dom"], + "rootDir": "../..", "baseUrl": ".", "paths": { "msw": ["../.."], From 686109788364d117e5800c725999ce6baefbbb3d Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 15 Nov 2022 00:30:15 +0100 Subject: [PATCH 052/210] fix: typescript <= 4.4 compatibility --- src/HttpResponse.ts | 2 +- src/bypass.ts | 5 ++--- src/handlers/GraphQLHandler.ts | 8 ++++---- src/handlers/RequestHandler.ts | 15 +++++++++------ src/handlers/RestHandler.ts | 11 ++++------- src/rest.ts | 6 +++--- src/utils/HttpResponse/createResponse.ts | 2 +- src/utils/internal/parseGraphQLRequest.ts | 2 +- src/utils/logging/serializeRequest.ts | 2 +- src/utils/logging/serializeResponse.ts | 2 +- src/utils/request/onUnhandledRequest.ts | 2 +- src/utils/request/parseWorkerRequest.ts | 2 +- 12 files changed, 29 insertions(+), 30 deletions(-) diff --git a/src/HttpResponse.ts b/src/HttpResponse.ts index 07bbb6cdb..35f7bb22d 100644 --- a/src/HttpResponse.ts +++ b/src/HttpResponse.ts @@ -1,4 +1,4 @@ -import { type DefaultBodyType } from './handlers/RequestHandler' +import type { DefaultBodyType } from './handlers/RequestHandler' import { createResponse } from './utils/HttpResponse/createResponse' import { decorateResponseInit } from './utils/HttpResponse/decorators' diff --git a/src/bypass.ts b/src/bypass.ts index 5719a0be9..dc0f814c5 100644 --- a/src/bypass.ts +++ b/src/bypass.ts @@ -16,12 +16,11 @@ export function bypass( input: string | URL | Request, init?: RequestInit, ): [string, RequestInit] { - const isGivenRequest = isRequest(input) - const url = isGivenRequest ? input.url : input.toString() + const url = isRequest(input) ? input.url : input.toString() const resolvedInit: RequestInit = typeof init !== 'undefined' ? init - : isGivenRequest + : isRequest(input) ? { // Set each request init property explicitly // to prevent leaking internal properties of whichever diff --git a/src/handlers/GraphQLHandler.ts b/src/handlers/GraphQLHandler.ts index 91a6e52ba..718edcb53 100644 --- a/src/handlers/GraphQLHandler.ts +++ b/src/handlers/GraphQLHandler.ts @@ -110,14 +110,14 @@ export class GraphQLHandler extends RequestHandler< this.endpoint = endpoint } - override async parse(request: Request) { + async parse(request: Request) { return parseGraphQLRequest(request).catch((error) => { console.error(error) return undefined }) } - override predicate(request: Request, parsedResult: ParsedGraphQLRequest) { + predicate(request: Request, parsedResult: ParsedGraphQLRequest) { if (!parsedResult) { return false } @@ -150,7 +150,7 @@ Consider naming this operation or using "graphql.operation" request handler to i ) } - protected override extendInfo( + protected extendInfo( _request: Request, parsedResult: ParsedGraphQLRequest, ) { @@ -160,7 +160,7 @@ Consider naming this operation or using "graphql.operation" request handler to i } } - override async log( + async log( request: Request, response: Response, parsedRequest: ParsedGraphQLRequest, diff --git a/src/handlers/RequestHandler.ts b/src/handlers/RequestHandler.ts index 2c677a145..d29275815 100644 --- a/src/handlers/RequestHandler.ts +++ b/src/handlers/RequestHandler.ts @@ -1,9 +1,9 @@ import { invariant } from 'outvariant' import { getCallFrame } from '../utils/internal/getCallFrame' import { isIterable } from '../utils/internal/isIterable' -import { type ResponseResolutionContext } from '../utils/getResponse' -import { type MaybePromise } from '../typeUtils' -import { StrictRequest, type StrictResponse } from '../HttpResponse' +import type { ResponseResolutionContext } from '../utils/getResponse' +import type { MaybePromise } from '../typeUtils' +import { StrictRequest, StrictResponse } from '../HttpResponse' export type DefaultRequestMultipartBody = Record< string, @@ -252,9 +252,12 @@ export abstract class RequestHandler< this.resolverGenerator = result } - // Also clone the response before storing it - // so it could be read again. - this.resolverGeneratorResult = nextResponse?.clone() + if (nextResponse) { + // Also clone the response before storing it + // so it could be read again. + this.resolverGeneratorResult = nextResponse?.clone() + } + return nextResponse } diff --git a/src/handlers/RestHandler.ts b/src/handlers/RestHandler.ts index 82c11350e..c90f7360a 100644 --- a/src/handlers/RestHandler.ts +++ b/src/handlers/RestHandler.ts @@ -106,10 +106,7 @@ export class RestHandler extends RequestHandler< ) } - override async parse( - request: Request, - resolutionContext?: ResponseResolutionContext, - ) { + async parse(request: Request, resolutionContext?: ResponseResolutionContext) { const url = new URL(request.url) const match = matchRequestUrl( url, @@ -124,7 +121,7 @@ export class RestHandler extends RequestHandler< } } - override predicate(request: Request, parsedResult: RestRequestParsedResult) { + predicate(request: Request, parsedResult: RestRequestParsedResult) { const hasMatchingMethod = this.matchMethod(request.method) const hasMatchingUrl = parsedResult.match.matches return hasMatchingMethod && hasMatchingUrl @@ -136,7 +133,7 @@ export class RestHandler extends RequestHandler< : isStringEqual(this.info.method, actualMethod) } - protected override extendInfo( + protected extendInfo( _request: Request, parsedResult: RestRequestParsedResult, ) { @@ -146,7 +143,7 @@ export class RestHandler extends RequestHandler< } } - override async log(request: Request, response: Response) { + async log(request: Request, response: Response) { const publicUrl = getPublicUrlFromRequest(request) const loggedRequest = await serializeRequest(request) const loggedResponse = await serializeResponse(response) diff --git a/src/rest.ts b/src/rest.ts index ab16a3cfa..69d86e7fd 100644 --- a/src/rest.ts +++ b/src/rest.ts @@ -1,14 +1,14 @@ import { DefaultBodyType, - type RequestHandlerPublicOptions, - type ResponseResolver, + RequestHandlerPublicOptions, + ResponseResolver, } from './handlers/RequestHandler' import { RESTMethods, RestHandler, RestRequestResolverExtras, } from './handlers/RestHandler' -import { type Path, type PathParams } from './utils/matching/matchRequestUrl' +import type { Path, PathParams } from './utils/matching/matchRequestUrl' function createRestHandler( method: Method, diff --git a/src/utils/HttpResponse/createResponse.ts b/src/utils/HttpResponse/createResponse.ts index 984fb3517..917fa4c51 100644 --- a/src/utils/HttpResponse/createResponse.ts +++ b/src/utils/HttpResponse/createResponse.ts @@ -1,6 +1,6 @@ import { Response } from '../../Response' import type { StrictResponse } from '../../HttpResponse' -import { decorateResponse, type HttpResponseDecoratedInit } from './decorators' +import { decorateResponse, HttpResponseDecoratedInit } from './decorators' export function createResponse( body: BodyInit | null | undefined, diff --git a/src/utils/internal/parseGraphQLRequest.ts b/src/utils/internal/parseGraphQLRequest.ts index e6c89340d..bf6a7e8bc 100644 --- a/src/utils/internal/parseGraphQLRequest.ts +++ b/src/utils/internal/parseGraphQLRequest.ts @@ -4,7 +4,7 @@ import type { OperationTypeNode, } from 'graphql' import { parse } from 'graphql' -import { type GraphQLVariables } from '../../handlers/GraphQLHandler' +import type { GraphQLVariables } from '../../handlers/GraphQLHandler' import { getPublicUrlFromRequest } from '../request/getPublicUrlFromRequest' import { devUtils } from './devUtils' import { jsonParse } from './jsonParse' diff --git a/src/utils/logging/serializeRequest.ts b/src/utils/logging/serializeRequest.ts index 61b0e00f1..f0e5d9780 100644 --- a/src/utils/logging/serializeRequest.ts +++ b/src/utils/logging/serializeRequest.ts @@ -1,4 +1,4 @@ -import { type HeadersObject, headersToObject } from 'headers-polyfill' +import { HeadersObject, headersToObject } from 'headers-polyfill' export interface LoggedRequest { url: URL diff --git a/src/utils/logging/serializeResponse.ts b/src/utils/logging/serializeResponse.ts index 9e9caf9cb..fd33dc37a 100644 --- a/src/utils/logging/serializeResponse.ts +++ b/src/utils/logging/serializeResponse.ts @@ -1,4 +1,4 @@ -import { type HeadersObject, headersToObject } from 'headers-polyfill' +import { HeadersObject, headersToObject } from 'headers-polyfill' export interface SerializedResponse { status: number diff --git a/src/utils/request/onUnhandledRequest.ts b/src/utils/request/onUnhandledRequest.ts index 874627f7d..3c255b08b 100644 --- a/src/utils/request/onUnhandledRequest.ts +++ b/src/utils/request/onUnhandledRequest.ts @@ -7,7 +7,7 @@ import { getPublicUrlFromRequest } from './getPublicUrlFromRequest' import { isStringEqual } from '../internal/isStringEqual' import { RestHandler } from '../../handlers/RestHandler' import { GraphQLHandler } from '../../handlers/GraphQLHandler' -import { type RequestHandler } from '../../handlers/RequestHandler' +import type { RequestHandler } from '../../handlers/RequestHandler' import { devUtils } from '../internal/devUtils' const MAX_MATCH_SCORE = 3 diff --git a/src/utils/request/parseWorkerRequest.ts b/src/utils/request/parseWorkerRequest.ts index 07d4db555..7d6459662 100644 --- a/src/utils/request/parseWorkerRequest.ts +++ b/src/utils/request/parseWorkerRequest.ts @@ -1,4 +1,4 @@ -import { type ServiceWorkerIncomingRequest } from '../../setupWorker/glossary' +import type { ServiceWorkerIncomingRequest } from '../../setupWorker/glossary' import { pruneGetRequestBody } from './pruneGetRequestBody' /** From b14380b30214410a1934c5815d15466f5eb63112 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 15 Nov 2022 01:10:32 +0100 Subject: [PATCH 053/210] docs: improve migration guide --- MIGRATING.md | 338 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 259 insertions(+), 79 deletions(-) diff --git a/MIGRATING.md b/MIGRATING.md index 4ecac2553..b8fb36be3 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -1,5 +1,42 @@ # Migration guide +This guide will help you migrate from the latest version of MSW to the `next` release that introduces a first-class support for Fetch API primitives to the library. **This is a breaking change**. In fact, this is the biggest change to our public API since they day the library was first published. Do not fret, however, as this is precisely why this document exists. + +## Getting started + +```sh +npm install msw@next --save-dev +``` + +## Table of contents + +To help you navigate, we've structured this guide on the feature basis. You can read it top-to-bottom, or you can jump to a particular feature you have trouble migrating from. + +- [**Response resolver**](#response-resolver) (call signature change) +- [Request changes](#request-changes) +- [req.params](#reqparams) +- [req.cookies](#request-cookies) +- [req.passthrough](#reqpassthrough) +- [res.once](#resonce) +- [Context utilities](#context-utilities) + - [ctx.status](#ctxstatus) + - [ctx.set](#ctxset) + - [ctx.cookie](#ctxcookie) + - [ctx.body](#ctxbody) + - [ctx.text](#ctxtext) + - [ctx.json](#ctxjson) + - [ctx.xml](#ctxxml) + - [ctx.data](#ctxdata) + - [ctx.errors](#ctxerrors) + - [ctx.delay](#ctxdelay) + - [ctx.fetch](#ctx-fetch) +- [Life-cycle events](#life-cycle-events) +- [Advanced](#advanced) +- [**What's new in this release?**](#whats-new) +- [Common issues](#common-issues) + +--- + ## Response resolver A response resolver now exposes a single object argument instead of `(req, res, ctx)`. That argument represents resolver information and consists of properties that are always present for all handler types and extra properties specific to handler types. @@ -85,14 +122,26 @@ rest.get('/product', ({ request }) => { }) ``` -#### Path parameters +#### `req.params` Path parameters are now exposed directly on the [Resolver info](#resolver-info) object (previously, `req.params`). -#### Request cookies +```js +rest.get('/resource', ({ params }) => { + console.log('Request path parameters:', params) +}) +``` + +#### `req.cookies` Request cookies are now exposed directly on the [Resolver info](#resolver-info) object (previously, `req.cookies`). +```js +rest.get('/resource', ({ cookies }) => { + console.log('Request cookies:', cookies) +}) +``` + #### Request body The library now does no assumptions when reading the intercepted request's body (previously, `req.body`). Instead, you are in charge to read the request body as you see appropriate. @@ -102,8 +151,8 @@ The library now does no assumptions when reading the intercepted request's body For example, this is how you would read request body: ```js -rest.post('/user', async ({ request }) => { - const nextUser = await request.json() +rest.post('/resource', async ({ request }) => { + const data = await request.json() // request.formData() / request.arrayBuffer() / etc. }) ``` @@ -146,7 +195,7 @@ setupServer( Relying on a single universal `Response` class will allow you to write request handlers that can run in both browser and Node.js environments. -## One-time responses +## `res.once` To create a one-time request handler, pass it an object as the third argument with `once: true` set: @@ -154,14 +203,20 @@ To create a one-time request handler, pass it an object as the third argument wi import { HttpResponse, rest } from 'msw' export const handlers = [ - rest.get('/user', () => HttpResponse.text('hello'), { once: true }), + rest.get( + '/user', + () => { + return HttpResponse.text('hello') + }, + { once: true }, + ), ] ``` -## Passthrough responses +## `req.passthrough` ```js -import { passthrough } from 'msw' +import { rest, passthrough } from 'msw' export const handlers = [ rest.get('/user', () => { @@ -196,102 +251,200 @@ export const handlers = [ ] ``` -### REST response body utilities +Let's go through each previously existing context utility and see how to declare its analogue using the `Response` class. -All response body utilities, like `ctx.body()`, `ctx.text()`, `ctx.json()`, etc., were removed in favor of constructing a correct `Response` instance. However, since `Response` declarations may get verbose, the library now exports a `HttpResponse` abstraction to help you construct mocked responses with different body types easier. +### `ctx.status` ```js -import { HttpResponse, rest } from 'msw' +import { rest, HttpResponse } from 'msw' export const handlers = [ - rest.get('/body', () => { - // You can construct mocked responses with - // arbitrary bodies via a direct Response instance. - return new Response('raw-body', { + rest.get('/resource', () => { + return HttpResponse.text('hello', { status: 201 }) + }), +] +``` + +### `ctx.set` + +```js +import { rest, HttpResponse } from 'msw' + +export const handlers = [ + rest.get('/resource', () => { + return HttpResponse.text('hello', { headers: { - 'Content-Type': 'application/vnd.acme+json', + 'Content-Type': 'text/plain; charset=windows-1252', }, }) }), - rest.get('/text', () => { - return HttpResponse.text('hello world') +] +``` + +### `ctx.cookie` + +```js +import { HttpResponse } from 'msw' + +export const handlers = [ + rest.get('/resource', () => { + return HttpResponse.text('hello', { + headers: { + 'Set-Cookie': 'token=abc-123', + }, + }) }), - rest.get('/json', () => { - return HttpResponse.json({ firstName: 'John' }) +] +``` + +Although setting `Set-Cookie` header has no effect on a regular `Response` instance, we detect that header on `HttpResponse` and implement response cookie forwarding on our side for you. **This is why you must always use `HttpResponse` in order to mock response cookies**. + +Since Fetch API Headers do not support multiple values as the `HeadersInit`, to mock a multi-value response cookie create a `Headers` instance and use the `.append()` method to set multiple `Set-Cookie` response headers. + +```js +import { Headers, HttpResponse, rest } from 'msw' + +export const handlers = [ + rest.get('/resource', () => { + rest.get('/resource', () => { + const headers = new Headers() + headers.append('Set-Cookie', 'sessionId=123') + headers.append('Set-Cookie', 'gtm=en_US') + + return HttpResponse.plain(null, { headers }) + }) + }), +] +``` + +### `ctx.body` + +```js +import { rest, HttpResponse } from 'msw' + +export const handlers = [ + rest.get('/resource', () => { + return HttpResponse.raw('any-body') }), - rest.get('/xml', () => { - return HttpResponse.xml({ firstName: 'John' }) +] +``` + +> Do not forget to set the `Content-Type` header that represents the mocked response's body type. If using common response body types, like text or json, see the respective migration instructions for those context utilities below. + +### `ctx.text` + +```js +import { rest, HttpResponse } from 'msw' + +export const handlers = [ + rest.get('/resource', () => { + return HttpResponse.text('hello') }), ] ``` -> In addition, you can now mock other response bodies like `formData` or `blob` by accessing the respective methods on the `HttpResponse` object. +### `ctx.json` -### GraphQL response body utilities +```js +import { rest, HttpResponse } from 'msw' -GraphQL context utilities have been removed in favor of constructing a correct JSON response instance. +export const handlers = [ + rest.get('/resource', () => { + return HttpResponse.json({ firstName: 'John' }) + }), +] +``` + +### `ctx.xml` ```js -import { HttpResponse, graphql } from 'msw' +import { rest, HttpResponse } from 'msw' export const handlers = [ - graphql.query('GetUser', ({ variables }) => { + rest.get('/resource', () => { + return HttpResponse.xml('') + }), +] +``` + +### `ctx.data` + +The `ctx.data` utility has been removed in favor of constructing a mocked JSON response with the "data" property in it. + +```js +import { HttpResponse } from 'msw' + +export const handlers = [ + rest.get('/resource', () => { return HttpResponse.json({ data: { - // ctx.data() user: { - id: variables.id, firstName: 'John', }, }, - // ctx.errors() + }) + }), +] +``` + +### `ctx.errors` + +The `ctx.data` utility has been removed in favor of constructing a mocked JSON response with the "data" property in it. + +```js +import { HttpResponse } from 'msw' + +export const handlers = [ + rest.get('/resource', () => { + return HttpResponse.json({ errors: [ { - message: 'Failed to fetch "user.posts"', + message: 'Something went wrong', }, ], - extensions: { - // ctx.extensions() - server: 'HTTP1.1 Apache', - }, }) }), ] ``` -### `ctx.delay()` - -You can delay a mocked response by awaiting the `delay()` function: +### `ctx.delay` ```js -import { rest, delay } from 'msw' +import { rest, HttpResponse, delay } from 'msw' export const handlers = [ - rest.post('/user', async () => { + rest.get('/resource', async () => { await delay() + return HttpResponse.text('hello') }), ] ``` -> The `delay()` function has the same call signature as the `ctx.delay()` used to have. +The `delay` function has the same call signature as the `ctx.delay` context function. This means it supports the delay mode as an argument: + +```js +await delay(500) +await delay('infinite') +``` -### `ctx.fetch()` +### `ctx.fetch` The `ctx.fetch()` function has been removed in favor of the `bypass()` function. You should now always perform a regular `fetch()` call and wrap the request in the `bypass()` function if you wish for it to ignore any otherwise matching request handlers. ```js -import { rest, bypass } from 'msw' +import { rest, HttpResponse, bypass } from 'msw' export const handlers = [ - rest.get('https://api.github.com/user/:username', async ({ request }) => { - // Performs an original "GET" request to the GitHub REST API. - const original = await fetch(...bypass(request)) + rest.get('/resource', async ({ request }) => { + // Use the regular "fetch" from your environment. + const originalResponse = await fetch(...bypass(request)) + const json = await originalResponse.json() + + // ...handle the original response, maybe return a mocked one. }), ] ``` -> Note that `bypass()` returns a tuple of request input and init instead of a `Request` instance. That is because fetch polyfills lock-in the request identity to the requests created using those polyfills. - The `bypass()` function also accepts `RequestInit` as the second argument to modify the bypassed request. ```js @@ -303,37 +456,7 @@ bypass(request, { }) ``` -### `ctx.cookie()` - -Please set the "Set-Cookie" response header in order to mock response cookies. - -```js -import { HttpResponse, rest } from 'msw' - -export const handlers = [ - rest.post('/login', () => { - return HttpResponse.text(null, { - headers: { - 'Set-Cookie': 'sessionId=abc123', - }, - }) - }), -] -``` - -Since Fetch API Headers do not support multiple values as the `HeadersInit`, to mock a multi-value response cookie create a `Headers` instance and use the `.append()` method to set multiple `Set-Cookie` response headers. - -```js -import { Headers, HttpResponse, rest } from 'msw' - -rest.post('/login', () => { - const headers = new Headers() - headers.append('Set-Cookie', 'sessionId=123') - headers.append('Set-Cookie', 'gtm=en_US') - - return HttpResponse.plain(null, { headers }) -}) -``` +--- ## Life-cycle events @@ -360,6 +483,14 @@ server.events.on('request:match', async (request) => { }) ``` +The `response:*` events now always contain the response reference, the related request, and its id in the listener arguments. + +```js +worker.events.on('response:mocked', (response, request, requestId) => { + console.log('response to %s %s is:', request.method, request.url, response) +}) +``` + --- ## Advanced @@ -396,6 +527,55 @@ export const handlers = [ --- +## What's new? + +The main benefit of this release is the adoption of Fetch API primitives—`Request` and `Response` classes. By handling requests and responses as the platform does it, you bring your API mocking setup to the next level. Less library-specific abstractions, flatter learning curve, improved compatibility with other tools. But, most importantly, specification compliance and investment into a solution that uses standard APIs that are here to stay. + +### New request body methods + +You can now read the intercepted request body as you would a regular `Request` instance. This mainly means the addition of the following methods on the `request`: + +- `request.blob()` +- `request.formData()` +- `request.arrayBuffer()` + +For example, this is how you would read the request as `Blob`: + +```js +import { rest } from 'msw' + +export const handlers = [ + rest.get('/resource', async ({ request }) => { + const blob = await request.blob() + }), +] +``` + +### Support `ReadableStream` mocked responses + +You can now send a `ReadableStream` as the mocked response body. This is great for mocking any kind of streaming in HTTP responses. + +```js +import { rest, HttpResponse, ReadableStream, delay } from 'msw' + +rest.get('/greeting', () => { + const encoder = new TextEncoder() + const stream = new ReadableStream({ + async start(controller) { + controller.enqueue(encoder.encode('hello')) + await delay(100) + controller.enqueue(encoder.encode('world')) + await delay(100) + controller.close() + }, + }) + + return HttpResponse.plain(stream) +}) +``` + +--- + ## Common issues ### `Response is not defined` From b320fe5a2bf2c39a67f237767adb8df8e3e49f0a Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 15 Nov 2022 01:19:34 +0100 Subject: [PATCH 054/210] test: fix response-patching test --- .../setup-server/scenarios/https.test.ts | 32 ++++++++++--------- test/rest-api/response-patching.test.ts | 2 +- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/test/msw-api/setup-server/scenarios/https.test.ts b/test/msw-api/setup-server/scenarios/https.test.ts index 888ddb7b4..ce8181e63 100644 --- a/test/msw-api/setup-server/scenarios/https.test.ts +++ b/test/msw-api/setup-server/scenarios/https.test.ts @@ -2,8 +2,8 @@ * @jest-environment node */ import https from 'https' +import { ServerApi, createServer, httpsAgent } from '@open-draft/test-server' import { HttpResponse, rest } from 'msw' -import { ServerApi, createServer } from '@open-draft/test-server' import { setupServer } from 'msw/node' import { waitForClientRequest } from '../../../support/utils' @@ -23,19 +23,17 @@ beforeAll(async () => { beforeEach(() => { server.use( rest.get(httpServer.https.makeUrl('/resource'), () => { - rest.get('https://test.mswjs.io', () => { - return HttpResponse.json( - { - firstName: 'John', + return HttpResponse.json( + { + firstName: 'John', + }, + { + status: 401, + headers: { + 'X-Header': 'yes', }, - { - status: 401, - headers: { - 'X-Header': 'yes', - }, - }, - ) - }) + }, + ) }), ) }) @@ -50,7 +48,9 @@ afterAll(async () => { }) it('returns a mocked response to an "https.get" request', async () => { - const request = https.get(httpServer.https.makeUrl('/resource')) + const request = https.get(httpServer.https.makeUrl('/resource'), { + agent: httpsAgent, + }) const { response, responseText } = await waitForClientRequest(request) expect(response.statusCode).toBe(401) @@ -64,7 +64,9 @@ it('returns a mocked response to an "https.get" request', async () => { }) it('returns a mocked response to an "https.request" request', async () => { - const request = https.request(httpServer.https.makeUrl('/resource')) + const request = https.request(httpServer.https.makeUrl('/resource'), { + agent: httpsAgent, + }) request.end() const { response, responseText } = await waitForClientRequest(request) diff --git a/test/rest-api/response-patching.test.ts b/test/rest-api/response-patching.test.ts index ee154e68e..e4f180809 100644 --- a/test/rest-api/response-patching.test.ts +++ b/test/rest-api/response-patching.test.ts @@ -66,7 +66,7 @@ test('bypasses the original request when it equals the mocked request', async () const res = await runtime.request( '/repos/mswjs/msw?mocked=true', - null, + undefined, (res, url) => { return ( // Await the response from MSW so that the original response From 2684382a7ee16859c8010e193be73c71405ba734 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 15 Nov 2022 14:53:23 +0100 Subject: [PATCH 055/210] fix(bypass): forward request body --- MIGRATING.md | 4 +- src/bypass.test.ts | 12 +-- src/bypass.ts | 81 +++++++++++++------ test/graphql-api/response-patching.mocks.ts | 3 +- .../response-patching.node.test.ts | 16 ++-- .../scenarios/response-patching.test.ts | 19 ++--- test/rest-api/response-patching.mocks.ts | 30 ++++--- test/support/graphql.ts | 6 +- 8 files changed, 107 insertions(+), 64 deletions(-) diff --git a/MIGRATING.md b/MIGRATING.md index b8fb36be3..72fda5b38 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -436,8 +436,10 @@ import { rest, HttpResponse, bypass } from 'msw' export const handlers = [ rest.get('/resource', async ({ request }) => { + const fetchArgs = await bypass(request) + // Use the regular "fetch" from your environment. - const originalResponse = await fetch(...bypass(request)) + const originalResponse = await fetch(...fetchArgs) const json = await originalResponse.json() // ...handle the original response, maybe return a mocked one. diff --git a/src/bypass.test.ts b/src/bypass.test.ts index 4ac7975e9..827cca3b8 100644 --- a/src/bypass.test.ts +++ b/src/bypass.test.ts @@ -5,8 +5,8 @@ import { Headers } from 'headers-polyfill' import { Request } from './Request' import { bypass } from './bypass' -it('returns bypassed request given a request url string', () => { - const [url, init] = bypass('/user') +it('returns bypassed request given a request url string', async () => { + const [url, init] = await bypass('/user') const headers = new Headers(init.headers) // Relative URLs are rebased against the current location. @@ -14,8 +14,8 @@ it('returns bypassed request given a request url string', () => { expect(headers.get('x-msw-intention')).toBe('bypass') }) -it('returns bypassed request given a request url', () => { - const [url, init] = bypass(new URL('/user', 'https://api.github.com')) +it('returns bypassed request given a request url', async () => { + const [url, init] = await bypass(new URL('/user', 'https://api.github.com')) const headers = new Headers(init.headers) expect(url).toBe('https://api.github.com/user') @@ -30,12 +30,12 @@ it('returns bypassed request given request instance', async () => { }, body: 'hello world', }) - const [url, init] = bypass(original) + const [url, init] = await bypass(original) const headers = new Headers(init.headers) expect(url).toBe('http://localhost/resource') expect(init.method).toBe('POST') - expect(init.body).toEqual(original.body) + expect(init.body).toEqual(await original.arrayBuffer()) expect(headers.get('x-msw-intention')).toBe('bypass') expect(headers.get('x-my-header')).toBe('value') }) diff --git a/src/bypass.ts b/src/bypass.ts index dc0f814c5..3e37866d3 100644 --- a/src/bypass.ts +++ b/src/bypass.ts @@ -1,5 +1,8 @@ +import { invariant } from 'outvariant' import { Headers } from 'headers-polyfill' +export type BypassRequestInput = string | URL | Request + /** * Derives request input and init from the given Request info * to define a request that will always be ignored by MSW. @@ -12,33 +15,22 @@ import { Headers } from 'headers-polyfill' * fetch(...bypass(new URL('/resource', 'https://example.com))) * fetch(...bypass(new Request('https://example.com/resource'))) */ -export function bypass( - input: string | URL | Request, +export async function bypass( + input: BypassRequestInput, init?: RequestInit, -): [string, RequestInit] { +): Promise<[string, RequestInit]> { + if (isRequest(input)) { + invariant( + !input.bodyUsed, + 'Failed to create a bypassed request to "%s %s": given request instance already has its body read. Make sure to clone the intercepted request if you wish to read its body before bypassing it.', + input.method, + input.url, + ) + } + const url = isRequest(input) ? input.url : input.toString() const resolvedInit: RequestInit = - typeof init !== 'undefined' - ? init - : isRequest(input) - ? { - // Set each request init property explicitly - // to prevent leaking internal properties of whichever - // Request polyfill provided as the input. - mode: input.mode, - method: input.method, - body: input.body, - cache: input.cache, - headers: input.headers, - credentials: input.credentials, - signal: input.signal, - referrerPolicy: input.referrerPolicy, - referrer: input.referrer, - redirect: input.redirect, - integrity: input.integrity, - keepalive: input.keepalive, - } - : {} + typeof init !== 'undefined' ? init : await getRequestInit(input) // Set the internal header that would instruct MSW // to bypass this request from any further request matching. @@ -51,7 +43,7 @@ export function bypass( return [url, resolvedInit] } -function isRequest(input: string | URL | Request): input is Request { +function isRequest(input: BypassRequestInput): input is Request { return ( typeof input === 'object' && input.constructor.name === 'Request' && @@ -59,3 +51,42 @@ function isRequest(input: string | URL | Request): input is Request { typeof input.clone === 'function' ) } + +async function getRequestInit(input: BypassRequestInput): Promise { + if (!isRequest(input)) { + return {} + } + + const init: RequestInit = { + // Set each request init property explicitly + // to prevent leaking internal properties of whichever + // Request polyfill provided as the input. + mode: input.mode, + method: input.method, + cache: input.cache, + headers: input.headers, + credentials: input.credentials, + signal: input.signal, + referrerPolicy: input.referrerPolicy, + referrer: input.referrer, + redirect: input.redirect, + integrity: input.integrity, + keepalive: input.keepalive, + } + + // Include "RequestInit.body" only for appropriate requests. + if (init.method !== 'HEAD' && input.method !== 'GET') { + init.body = await input.clone().arrayBuffer() + + /** + * `RequestInit.duplex` is not present in TypeScript but is + * required if you wish to send `ReadableStream` as a request body. + * @see https://developer.chrome.com/articles/fetch-streaming-requests + * @see https://github.com/whatwg/fetch/pull/1457 + */ + // @ts-ignore + init.duplex = input.duplex + } + + return init +} diff --git a/test/graphql-api/response-patching.mocks.ts b/test/graphql-api/response-patching.mocks.ts index f0e112355..a7920278b 100644 --- a/test/graphql-api/response-patching.mocks.ts +++ b/test/graphql-api/response-patching.mocks.ts @@ -10,7 +10,8 @@ interface GetUserQuery { const worker = setupWorker( graphql.query('GetUser', async ({ request }) => { - const originalResponse = await fetch(...bypass(request)) + const fetchArgs = await bypass(request) + const originalResponse = await fetch(...fetchArgs) const originalJson = await originalResponse.json() return HttpResponse.json({ diff --git a/test/graphql-api/response-patching.node.test.ts b/test/graphql-api/response-patching.node.test.ts index d08888956..2f781f811 100644 --- a/test/graphql-api/response-patching.node.test.ts +++ b/test/graphql-api/response-patching.node.test.ts @@ -13,7 +13,7 @@ let httpServer: ServerApi const server = setupServer( graphql.query('GetUser', async ({ request }) => { - const requestInfo = bypass(request) + const requestInfo = await bypass(request) const originalResponse = await fetch(...requestInfo) const { requestHeaders, queryResult } = await originalResponse.json() @@ -91,7 +91,13 @@ test('patches a GraphQL response', async () => { fetch, }) - const res = await client({ + const res = await client<{ + user: { + firstName: string + lastName: string + } + requestHeaders: Record + }>({ query: gql` query GetUser { user { @@ -111,7 +117,7 @@ test('patches a GraphQL response', async () => { firstName: 'Christian', lastName: 'Maverick', }) - expect(res.data.requestHeaders).toHaveProperty('x-msw-intention', 'bypass') - expect(res.data.requestHeaders).not.toHaveProperty('_headers') - expect(res.data.requestHeaders).not.toHaveProperty('_names') + expect(res.data?.requestHeaders).toHaveProperty('x-msw-intention', 'bypass') + expect(res.data?.requestHeaders).not.toHaveProperty('_headers') + expect(res.data?.requestHeaders).not.toHaveProperty('_names') }) diff --git a/test/msw-api/setup-server/scenarios/response-patching.test.ts b/test/msw-api/setup-server/scenarios/response-patching.test.ts index 3005620e3..9e7bf92fe 100644 --- a/test/msw-api/setup-server/scenarios/response-patching.test.ts +++ b/test/msw-api/setup-server/scenarios/response-patching.test.ts @@ -15,9 +15,8 @@ interface ResponseBody { const server = setupServer( rest.get('https://test.mswjs.io/user', async () => { - const originalResponse = await fetch( - ...bypass(httpServer.http.makeUrl('/user')), - ) + const fetchArgs = bypass(httpServer.http.makeUrl('/user')) + const originalResponse = await fetch(...fetchArgs) const body = await originalResponse.json() return HttpResponse.json({ @@ -29,15 +28,13 @@ const server = setupServer( const url = new URL(request.url) const shouldBypass = url.searchParams.get('bypass') === 'true' + const fetchArgs = await bypass( + new Request(httpServer.http.makeUrl('/user'), { + method: 'POST', + }), + ) const performRequest = shouldBypass - ? () => - fetch( - ...bypass( - new Request(httpServer.http.makeUrl('/user'), { - method: 'POST', - }), - ), - ).then((res) => res.json()) + ? () => fetch(...fetchArgs).then((res) => res.json()) : () => fetch('https://httpbin.org/post', { method: 'POST' }).then((res) => res.json(), diff --git a/test/rest-api/response-patching.mocks.ts b/test/rest-api/response-patching.mocks.ts index 943898226..3859f172c 100644 --- a/test/rest-api/response-patching.mocks.ts +++ b/test/rest-api/response-patching.mocks.ts @@ -2,7 +2,8 @@ import { setupWorker, rest, HttpResponse, bypass } from 'msw' const worker = setupWorker( rest.get('/user', async () => { - const originalResponse = await fetch(...bypass('/user')) + const fetchArgs = await bypass('/user') + const originalResponse = await fetch(...fetchArgs) const body = await originalResponse.json() return HttpResponse.json({ @@ -13,7 +14,8 @@ const worker = setupWorker( }), rest.get('/repos/:owner/:repoName', async ({ request }) => { - const originalResponse = await fetch(...bypass(request)) + const fetchArgs = await bypass(request) + const originalResponse = await fetch(...fetchArgs) const body = await originalResponse.json() return HttpResponse.json({ @@ -23,19 +25,19 @@ const worker = setupWorker( }), rest.get('/headers', async ({ request }) => { - const originalResponse = await fetch( - ...bypass('/headers-proxy', { - method: 'POST', - headers: request.headers, - }), - ) + const fetchArgs = await bypass('/headers-proxy', { + method: 'POST', + headers: request.headers, + }) + const originalResponse = await fetch(...fetchArgs) const body = await originalResponse.json() return HttpResponse.json(body) }), rest.post('/posts', async ({ request }) => { - const originalResponse = await fetch(...bypass(request)) + const fetchArgs = await bypass(request) + const originalResponse = await fetch(...fetchArgs) const body = await originalResponse.json() return HttpResponse.json( @@ -45,14 +47,15 @@ const worker = setupWorker( }, { headers: { - 'X-Custom': originalResponse.headers.get('x-custom'), + 'X-Custom': originalResponse.headers.get('x-custom') || '', }, }, ) }), rest.get('/posts', async ({ request }) => { - const originalResponse = await fetch(...bypass(request)) + const fetchArgs = await bypass(request) + const originalResponse = await fetch(...fetchArgs) const body = await originalResponse.json() return HttpResponse.json({ @@ -62,7 +65,8 @@ const worker = setupWorker( }), rest.head('/posts', async ({ request }) => { - const originalResponse = await fetch(...bypass(request)) + const fetchArgs = await bypass(request) + const originalResponse = await fetch(...fetchArgs) return HttpResponse.json( { @@ -70,7 +74,7 @@ const worker = setupWorker( }, { headers: { - 'X-Custom': originalResponse.headers.get('x-custom'), + 'X-Custom': originalResponse.headers.get('x-custom') || '', }, }, ) diff --git a/test/support/graphql.ts b/test/support/graphql.ts index 03f21c0f5..37de7c55f 100644 --- a/test/support/graphql.ts +++ b/test/support/graphql.ts @@ -10,7 +10,7 @@ export const gql = (str: TemplateStringsArray) => { interface GraphQLClientOPtions { uri: string - fetch?: typeof fetch + fetch?: (input: any, init?: any) => Promise } interface GraphQLOperationInput { @@ -25,7 +25,9 @@ interface GraphQLOperationInput { export function createGraphQLClient(options: GraphQLClientOPtions) { const fetchFn = options.fetch || fetch - return async (input: GraphQLOperationInput): Promise => { + return async >( + input: GraphQLOperationInput, + ): Promise> => { const response = await fetchFn(options.uri, { method: 'POST', headers: { From 085d52b6308bc2ae721ac15024eb6754cd9aaa84 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 15 Nov 2022 15:14:42 +0100 Subject: [PATCH 056/210] test: fix failing tests --- test/msw-api/hard-reload.mocks.ts | 6 ++-- test/msw-api/hard-reload.test.ts | 13 +++++++-- .../scenarios/response-patching.test.ts | 2 +- .../fallback-mode/fallback-mode.test.ts | 29 ++++++++++++++----- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/test/msw-api/hard-reload.mocks.ts b/test/msw-api/hard-reload.mocks.ts index f5b465b43..683dd8ef1 100644 --- a/test/msw-api/hard-reload.mocks.ts +++ b/test/msw-api/hard-reload.mocks.ts @@ -1,10 +1,8 @@ import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('https://api.github.com', () => { - return HttpResponse.json({ - mocked: true, - }) + rest.get('*/resource', () => { + return HttpResponse.json({ mocked: true }) }), ) diff --git a/test/msw-api/hard-reload.test.ts b/test/msw-api/hard-reload.test.ts index 3a1542237..63275c760 100644 --- a/test/msw-api/hard-reload.test.ts +++ b/test/msw-api/hard-reload.test.ts @@ -1,5 +1,6 @@ import * as path from 'path' import { pageWith } from 'page-with' +import { sleep } from '../support/utils' function createRuntime() { return pageWith({ @@ -13,8 +14,7 @@ test('keeps the mocking enabled after hard-reload of the page', async () => { runtime.page.evaluate(() => { /** * Emulate a forced reload. - * Since `location.reload(true)` is deprecated, - * use a workaround. + * Since `location.reload(true)` is deprecated, using a workaround. * @see https://stackoverflow.com/a/65544086/2754939 */ location.replace(location.href) @@ -24,7 +24,14 @@ test('keeps the mocking enabled after hard-reload of the page', async () => { waitUntil: 'networkidle', }) - const res = await runtime.request('https://api.github.com') + /** + * @note No idea why immediate reload and awaiting for network idle + * stopped working. Sadness. + * @fixme Rewrite this to await a reliable source. + */ + await sleep(200) + + const res = await runtime.request('/resource') const headers = await res.allHeaders() const body = await res.json() diff --git a/test/msw-api/setup-server/scenarios/response-patching.test.ts b/test/msw-api/setup-server/scenarios/response-patching.test.ts index 9e7bf92fe..c35a7fba8 100644 --- a/test/msw-api/setup-server/scenarios/response-patching.test.ts +++ b/test/msw-api/setup-server/scenarios/response-patching.test.ts @@ -15,7 +15,7 @@ interface ResponseBody { const server = setupServer( rest.get('https://test.mswjs.io/user', async () => { - const fetchArgs = bypass(httpServer.http.makeUrl('/user')) + const fetchArgs = await bypass(httpServer.http.makeUrl('/user')) const originalResponse = await fetch(...fetchArgs) const body = await originalResponse.json() diff --git a/test/msw-api/setup-worker/fallback-mode/fallback-mode.test.ts b/test/msw-api/setup-worker/fallback-mode/fallback-mode.test.ts index 5625ff14d..c171fa4c7 100644 --- a/test/msw-api/setup-worker/fallback-mode/fallback-mode.test.ts +++ b/test/msw-api/setup-worker/fallback-mode/fallback-mode.test.ts @@ -1,7 +1,8 @@ import * as path from 'path' import { SetupWorkerApi } from 'msw' import { createTeardown } from 'fs-teardown' -import { Page, pageWith, Response, ScenarioApi } from 'page-with' +import { invariant } from 'outvariant' +import { Page, pageWith, ScenarioApi } from 'page-with' import { fromTemp } from '../../../support/utils' import { waitFor } from '../../../support/waitFor' @@ -49,12 +50,21 @@ afterAll(async () => { }) function createRequestHelper(page: Page) { - return (input: RequestInfo, init?: RequestInit): Promise => { - return page.evaluate( - ([input, init]: [RequestInfo, RequestInit]) => { + return (input: RequestInfo, init?: RequestInit) => { + return page.evaluate< + | { + status: number + statusText: string + headers: Record + body: unknown + } + | undefined, + [RequestInfo, RequestInit | undefined] + >( + ([input, init]) => { return fetch(input, init) .then((res) => { - const headers = {} + const headers: Record = {} res.headers.forEach((value, key) => { headers[key] = value }) @@ -66,7 +76,7 @@ function createRequestHelper(page: Page) { body, })) }) - .catch(() => null) + .catch(() => void 0) }, [input, init], ) @@ -74,6 +84,7 @@ function createRequestHelper(page: Page) { } test('prints a fallback start message in the console', async () => { + await runtime.page.reload() const consoleGroups = runtime.consoleSpy.get('startGroupCollapsed') expect(consoleGroups).toContain('[MSW] Mocking enabled (fallback mode).') @@ -94,10 +105,12 @@ test('responds with a mocked response to a handled request', async () => { ) }) + invariant(response, 'Expected to receive a response') + // Responds with a mocked response. expect(response.status).toBe(200) expect(response.statusText).toEqual('OK') - expect(response.headers['x-powered-by']).toEqual('msw') + expect(response.headers).toHaveProperty('x-powered-by', 'msw') expect(response.body).toEqual({ name: 'John Maverick', originalUsername: 'octocat', @@ -132,5 +145,7 @@ test('stops the fallback interceptor when called "worker.stop()"', async () => { // No requests should be intercepted. const response = await request('https://api.github.com/users/octocat') + invariant(response, 'Expected to receive a response') + expect(response.headers).toHaveProperty('x-github-media-type') }) From d84b2d0e91f845d24e14c1fcaeea2a4a94172f5a Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 16 Nov 2022 00:12:04 +0100 Subject: [PATCH 057/210] chore: v0.0.0-fetch.rc-1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9ba70ff3c..8b5b384b8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.48.2", + "version": "0.0.0-fetch.rc-1", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/index.js", "types": "./lib/index.d.ts", From 09218f36b07b58715b0dd27e33236458ec6467f7 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 16 Nov 2022 20:22:04 +0100 Subject: [PATCH 058/210] docs(migrating): remove duplicate handler in set-cookies --- MIGRATING.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/MIGRATING.md b/MIGRATING.md index 72fda5b38..c2dab5611 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -306,13 +306,11 @@ import { Headers, HttpResponse, rest } from 'msw' export const handlers = [ rest.get('/resource', () => { - rest.get('/resource', () => { - const headers = new Headers() - headers.append('Set-Cookie', 'sessionId=123') - headers.append('Set-Cookie', 'gtm=en_US') + const headers = new Headers() + headers.append('Set-Cookie', 'sessionId=123') + headers.append('Set-Cookie', 'gtm=en_US') - return HttpResponse.plain(null, { headers }) - }) + return HttpResponse.plain(null, { headers }) }), ] ``` From 84978a04ef9492b9e2c9b6c549fa1d9b7930987d Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 17 Nov 2022 01:52:12 +0100 Subject: [PATCH 059/210] docs: use HeadersInit for multi-value cookies --- MIGRATING.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/MIGRATING.md b/MIGRATING.md index c2dab5611..a10b65096 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -297,24 +297,26 @@ export const handlers = [ ] ``` -Although setting `Set-Cookie` header has no effect on a regular `Response` instance, we detect that header on `HttpResponse` and implement response cookie forwarding on our side for you. **This is why you must always use `HttpResponse` in order to mock response cookies**. - -Since Fetch API Headers do not support multiple values as the `HeadersInit`, to mock a multi-value response cookie create a `Headers` instance and use the `.append()` method to set multiple `Set-Cookie` response headers. +When you provide an object as the `ResponseInit.headers` value, you cannot specify multiple response cookies with the same name. Instead, to support multiple response cookies, provide a `Headers` instance: ```js import { Headers, HttpResponse, rest } from 'msw' export const handlers = [ rest.get('/resource', () => { - const headers = new Headers() - headers.append('Set-Cookie', 'sessionId=123') - headers.append('Set-Cookie', 'gtm=en_US') - - return HttpResponse.plain(null, { headers }) + return HttpResponse.plain(null, { + headers: new Headers([ + // Mock a multi-value response cookie header. + ['Set-Cookie', 'sessionId=123'], + ['Set-Cookie', 'gtm=en_US'], + ]), + }) }), ] ``` +> This is applicable to any multi-value headers, really. + ### `ctx.body` ```js From 3875d9b2f20578f14cd454bcef0b5eaaf4478838 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 17 Nov 2022 01:58:57 +0100 Subject: [PATCH 060/210] chore(HttpResponse): remove commented code --- src/HttpResponse.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/HttpResponse.ts b/src/HttpResponse.ts index 35f7bb22d..2c614f500 100644 --- a/src/HttpResponse.ts +++ b/src/HttpResponse.ts @@ -111,13 +111,3 @@ export const HttpResponse = { return createResponse(data, responseInit) }, } - -// -// - -// function check(r: StrictResponse<{ id: number }>) { -// return r -// } - -// check(new Response(1)) -// check(HttpResponse.json({ id: 1 })) From 80ed635f9a72d2eb92a683f9c4054f25a248214b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Rab=C3=B8l?= Date: Fri, 18 Nov 2022 14:36:33 +0100 Subject: [PATCH 061/210] docs: fix typo in migration guide (#1469) --- MIGRATING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MIGRATING.md b/MIGRATING.md index a10b65096..ab93d5392 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -1,6 +1,6 @@ # Migration guide -This guide will help you migrate from the latest version of MSW to the `next` release that introduces a first-class support for Fetch API primitives to the library. **This is a breaking change**. In fact, this is the biggest change to our public API since they day the library was first published. Do not fret, however, as this is precisely why this document exists. +This guide will help you migrate from the latest version of MSW to the `next` release that introduces a first-class support for Fetch API primitives to the library. **This is a breaking change**. In fact, this is the biggest change to our public API since the day the library was first published. Do not fret, however, as this is precisely why this document exists. ## Getting started From 041ff3e3717b6c681088d5011662638a54c384aa Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 24 Nov 2022 13:21:44 +0100 Subject: [PATCH 062/210] chore: v0.0.0-fetch.rc-2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 64ccc7d96..66114527d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-1", + "version": "0.0.0-fetch.rc-2", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/index.js", "types": "./lib/index.d.ts", From 2f8bf27e9613744b74b145b682c339c2300f8adc Mon Sep 17 00:00:00 2001 From: Christoph Fricke Date: Mon, 28 Nov 2022 16:11:42 +0100 Subject: [PATCH 063/210] fix(HttpResponse): accept interfaces as json response-data type (#1481) --- src/HttpResponse.ts | 12 ++++-------- test/typings/rest.test-d.ts | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/HttpResponse.ts b/src/HttpResponse.ts index 2c614f500..fcd78fc16 100644 --- a/src/HttpResponse.ts +++ b/src/HttpResponse.ts @@ -51,14 +51,10 @@ export const HttpResponse = { * HttpResponse.json({ firstName: 'John' }) * HttpResponse.json({ error: 'Not Authorized' }, { status: 401 }) */ - json< - BodyType extends - | Record - | Array - | boolean - | number - | string, - >(body?: BodyType | null, init?: HttpResponseInit): StrictResponse { + json( + body?: BodyType | null, + init?: HttpResponseInit, + ): StrictResponse { const responseInit = decorateResponseInit(init) responseInit.headers.set('Content-Type', 'application/json') return createResponse(JSON.stringify(body), responseInit) diff --git a/test/typings/rest.test-d.ts b/test/typings/rest.test-d.ts index 69d529c76..8190c3be6 100644 --- a/test/typings/rest.test-d.ts +++ b/test/typings/rest.test-d.ts @@ -80,6 +80,22 @@ rest.get('/user', () => { return HttpResponse.json({ id: 1 }) }) +// Supports explicit response data declared via type. +type ResponseBodyType = { id: number } +rest.get('/user', () => { + const data: ResponseBodyType = { id: 1 } + return HttpResponse.json(data) +}) + +// Supports explicit response data declared via interface. +interface ResponseBodyInterface { + id: number +} +rest.get('/user', () => { + const data: ResponseBodyInterface = { id: 1 } + return HttpResponse.json(data) +}) + rest.get( '/user', // @ts-expect-error String not assignable to number From 4bea835da03e80beda6d04cdd5d9e16d0430b096 Mon Sep 17 00:00:00 2001 From: Christoph Fricke Date: Fri, 2 Dec 2022 13:22:43 +0100 Subject: [PATCH 064/210] docs(migrating): fix example for response composition (#1483) * docs(migrating): fix example for response composition * docs(migrating): change to response generation example instead of creation --- MIGRATING.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/MIGRATING.md b/MIGRATING.md index ab93d5392..8bfa6ae75 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -503,26 +503,27 @@ It is still possible to create custom handlers and resolvers, just make sure to As this release removes the concept of response composition via `res()`, you can no longer compose context utilities or abstract their partial composed state to a helper function. -Instead, you can abstract a common response logic into a plain function and always returns a `Response` instance. +Instead, you can abstract a common response logic into a plain function that creates a new `Response` or modifies a provided instance. ```js // utils.js -import { Response } from 'msw' +import { HttpResponse } from 'msw' -export function augmentResponse() { - const response = new Response() - response.headers.set('X-Response-Source', 'mocks') +export function augmentResponse(json) { + const response = HttpResponse.json(json, { + // Come up with some reusable defaults here. + }) return response } ``` ```js -import { rest, HttpResponse } from 'msw' +import { rest } from 'msw' import { augmentResponse } from './utils' export const handlers = [ rest.get('/user', () => { - return augmentResponse(HttpResponse.json({ id: 1 })) + return augmentResponse({ id: 1 }) }), ] ``` From 3a001af2c1114f0871bc023812f5bfde7aabeb6d Mon Sep 17 00:00:00 2001 From: Christoph Fricke Date: Fri, 2 Dec 2022 15:18:36 +0100 Subject: [PATCH 065/210] docs(migrating): fix description for "ctx.errors" migration (#1487) --- MIGRATING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MIGRATING.md b/MIGRATING.md index 8bfa6ae75..0de038bee 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -389,7 +389,7 @@ export const handlers = [ ### `ctx.errors` -The `ctx.data` utility has been removed in favor of constructing a mocked JSON response with the "data" property in it. +The `ctx.errors` utility has been removed in favor of constructing a mocked JSON response with the "errors" property in it. ```js import { HttpResponse } from 'msw' From 9ba34e14877fea5583692e9462bc8148560713ea Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 7 Dec 2022 13:06:35 +0100 Subject: [PATCH 066/210] chore(release): v0.0.0-fetch.rc-3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 66114527d..6e9177967 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-2", + "version": "0.0.0-fetch.rc-3", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/index.js", "types": "./lib/index.d.ts", From 6b87f2b4da9870d34d45fc8c879e3683928df574 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 11 Jan 2023 20:06:32 +0100 Subject: [PATCH 067/210] fix(decorateResponseInit): use global "Headers" if available --- src/utils/HttpResponse/decorators.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/HttpResponse/decorators.ts b/src/utils/HttpResponse/decorators.ts index 4401684a8..f46f4a53e 100644 --- a/src/utils/HttpResponse/decorators.ts +++ b/src/utils/HttpResponse/decorators.ts @@ -1,5 +1,5 @@ import httpStatusTexts from 'statuses/codes.json' -import { Headers } from 'headers-polyfill' +import { Headers } from '../../Headers' import type { HttpResponseInit } from '../../HttpResponse' export interface HttpResponseDecoratedInit extends HttpResponseInit { From cff64525de6d2d57829193f3f1960ec16a7c1e80 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 14 Jan 2023 01:55:35 +0100 Subject: [PATCH 068/210] fix: update to @mswjs/interceptors@0.19.3 --- package.json | 4 ++-- src/Request.ts | 3 +-- yarn.lock | 12 ++++++------ 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 6e9177967..cf1eee175 100644 --- a/package.json +++ b/package.json @@ -88,9 +88,9 @@ "sideEffects": false, "dependencies": { "@mswjs/cookies": "^0.2.2", - "@mswjs/interceptors": "^0.18.2", + "@mswjs/interceptors": "^0.19.3", "@open-draft/until": "^1.0.3", - "@remix-run/web-fetch": "^4.3.0", + "@remix-run/web-fetch": "^4.3.2", "@types/cookie": "^0.4.1", "@types/js-levenshtein": "^1.1.1", "chalk": "4.1.1", diff --git a/src/Request.ts b/src/Request.ts index 8cbe8cd59..95a3803fa 100644 --- a/src/Request.ts +++ b/src/Request.ts @@ -1,4 +1,3 @@ export const Request: typeof globalThis.Request = globalThis.Request ? globalThis.Request - : require('@mswjs/interceptors/lib/utils/RequestWithCredentials') - .RequestWithCredentials + : require('@remix-run/web-fetch').Request diff --git a/yarn.lock b/yarn.lock index 48efc977e..6443538a3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1452,13 +1452,13 @@ "@types/set-cookie-parser" "^2.4.0" set-cookie-parser "^2.4.6" -"@mswjs/interceptors@^0.18.2": - version "0.18.3" - resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.18.3.tgz#bce3b5ae0d31ddb591fc70ceac414da081cf84df" - integrity sha512-OFDIeQZE8ieHFVF1ayzPAP7hBAtAR5MvkQENiP+V/I6v9sYgSE07AhCYczOntleAznJiVqvHah4DO3qzQFhajw== +"@mswjs/interceptors@^0.19.3": + version "0.19.3" + resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.19.3.tgz#dc7b21edd280f5cf7d7defac60959833f0f48672" + integrity sha512-iCs6WppZy17LA1LIonh33muRFvdp91uIbPrkW9ply5w9s2KmJ+ywa0aEN2PNptSnbQX80dZFfnGeh94TTl7aaw== dependencies: "@open-draft/until" "^1.0.3" - "@remix-run/web-fetch" "^4.3.1" + "@remix-run/web-fetch" "^4.3.2" "@types/debug" "^4.1.7" debug "^4.3.3" headers-polyfill "^3.1.0" @@ -1544,7 +1544,7 @@ "@remix-run/web-stream" "^1.0.0" web-encoding "1.1.5" -"@remix-run/web-fetch@^4.3.0", "@remix-run/web-fetch@^4.3.1": +"@remix-run/web-fetch@^4.3.2": version "4.3.2" resolved "https://registry.yarnpkg.com/@remix-run/web-fetch/-/web-fetch-4.3.2.tgz#193758bb7a301535540f0e3a86c743283f81cf56" integrity sha512-aRNaaa0Fhyegv/GkJ/qsxMhXvyWGjPNgCKrStCvAvV1XXphntZI0nQO/Fl02LIQg3cGL8lDiOXOS1gzqDOlG5w== From 1bfd751727ec2dac052c213ac86a4a9d82ef64cc Mon Sep 17 00:00:00 2001 From: Piotr Date: Tue, 21 Feb 2023 13:01:29 +0100 Subject: [PATCH 069/210] fix(worker): remove bypassing of server-sent events (#1551) Remove server-sent events bypass --- src/mockServiceWorker.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/mockServiceWorker.js b/src/mockServiceWorker.js index dbb531195..accd59acf 100644 --- a/src/mockServiceWorker.js +++ b/src/mockServiceWorker.js @@ -88,11 +88,6 @@ self.addEventListener('fetch', function (event) { const { request } = event const accept = request.headers.get('accept') || '' - // Bypass server-sent events. - if (accept.includes('text/event-stream')) { - return - } - // Bypass navigation requests. if (request.mode === 'navigate') { return From 9a2446baf97a3170e3d312f4edabf091c430ef3c Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 27 Feb 2023 01:46:20 +0100 Subject: [PATCH 070/210] feat: drop support for node < 18 --- .nvmrc | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.nvmrc b/.nvmrc index e2838c8b8..e3cdc6cb0 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v16.14.0 \ No newline at end of file +v18.8.0 \ No newline at end of file diff --git a/package.json b/package.json index 0048315ba..7f4267234 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "msw": "cli/index.js" }, "engines": { - "node": ">=14" + "node": ">=18" }, "scripts": { "start": "tsup --watch", From 0fd5019c9371c88ee1beac19934b05b649c80a46 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 27 Feb 2023 16:50:38 +0100 Subject: [PATCH 071/210] chore: fix unit tests --- jest.setup.js | 17 ++-- src/HttpResponse.test.ts | 2 - src/bypass.test.ts | 1 - src/handlers/GraphQLHandler.test.ts | 34 +++---- src/handlers/RestHandler.test.ts | 39 +++----- src/passthrough.test.ts | 1 - src/utils/HttpResponse/createResponse.test.ts | 1 - src/utils/handleRequest.test.ts | 96 ++++++++++++++----- .../internal/parseGraphQLRequest.test.ts | 1 - src/utils/logging/serializeRequest.test.ts | 1 - src/utils/logging/serializeResponse.test.ts | 3 - .../request/getPublicUrlFromRequest.test.ts | 1 - .../request/getRequestCookies.node.test.ts | 1 - src/utils/request/getRequestCookies.test.ts | 1 - src/utils/request/onUnhandledRequest.test.ts | 3 + 15 files changed, 116 insertions(+), 86 deletions(-) diff --git a/jest.setup.js b/jest.setup.js index f247a6544..318a499b0 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -9,7 +9,8 @@ Object.defineProperties(globalThis, { TextEncoder: { value: TextEncoder }, }) -const { Request, Response, Headers, File, Blob, FormData } = require('undici') +const { Blob } = require('buffer') +const { Request, Response, Headers, File, FormData } = require('undici') Object.defineProperties(globalThis, { Headers: { value: Headers }, @@ -20,9 +21,11 @@ Object.defineProperties(globalThis, { FormData: { value: FormData }, }) -Object.defineProperty(navigator || {}, 'serviceWorker', { - writable: false, - value: { - addEventListener: () => null, - }, -}) +if (typeof window !== 'undefined') { + Object.defineProperty(navigator || {}, 'serviceWorker', { + writable: false, + value: { + addEventListener: () => null, + }, + }) +} diff --git a/src/HttpResponse.test.ts b/src/HttpResponse.test.ts index f5921a3fb..6f6a4a093 100644 --- a/src/HttpResponse.test.ts +++ b/src/HttpResponse.test.ts @@ -2,8 +2,6 @@ * @jest-environment node */ import { TextEncoder } from 'util' -import { ReadableStream } from './ReadableStream' -import { FormData } from './FormData' import { HttpResponse } from './HttpResponse' it('creates a plain response', async () => { diff --git a/src/bypass.test.ts b/src/bypass.test.ts index 827cca3b8..a4de4d595 100644 --- a/src/bypass.test.ts +++ b/src/bypass.test.ts @@ -2,7 +2,6 @@ * @jest-environment jsdom */ import { Headers } from 'headers-polyfill' -import { Request } from './Request' import { bypass } from './bypass' it('returns bypassed request given a request url string', async () => { diff --git a/src/handlers/GraphQLHandler.test.ts b/src/handlers/GraphQLHandler.test.ts index 5663392b3..e98d4b35c 100644 --- a/src/handlers/GraphQLHandler.test.ts +++ b/src/handlers/GraphQLHandler.test.ts @@ -493,23 +493,25 @@ describe('run', () => { }) const result = await handler.run(request) - expect(result).toMatchObject({ - handler, - request, - parsedResult: { - operationType: 'query', - operationName: 'GetUser', - variables: { - userId: 'abc-123', - }, + expect(result!.handler).toEqual(handler) + expect(result!.parsedResult).toEqual({ + operationType: 'query', + operationName: 'GetUser', + query: GET_USER, + variables: { + userId: 'abc-123', }, - response: HttpResponse.json({ - data: { - user: { - id: 'abc-123', - }, - }, - }), + }) + expect(result!.request.method).toBe('POST') + expect(result!.request.url).toBe('https://example.com/') + expect(await result!.request.json()).toEqual({ + query: GET_USER, + variables: { userId: 'abc-123' }, + }) + expect(result!.response?.status).toBe(200) + expect(result!.response?.statusText).toBe('OK') + expect(await result!.response?.json()).toEqual({ + data: { user: { id: 'abc-123' } }, }) }) diff --git a/src/handlers/RestHandler.test.ts b/src/handlers/RestHandler.test.ts index 21b9923d8..d5d9ba94e 100644 --- a/src/handlers/RestHandler.test.ts +++ b/src/handlers/RestHandler.test.ts @@ -1,16 +1,9 @@ /** * @jest-environment jsdom */ -import { - RestHandler, - RestRequestResolverExtras, - RestRequestParsedResult, -} from './RestHandler' -import { HttpResponse, Request } from '..' -import { - RequestHandlerExecutionResult, - ResponseResolver, -} from './RequestHandler' +import { RestHandler, RestRequestResolverExtras } from './RestHandler' +import { HttpResponse } from '..' +import { ResponseResolver } from './RequestHandler' const resolver: ResponseResolver< RestRequestResolverExtras<{ userId: string }> @@ -147,24 +140,20 @@ describe('run', () => { const request = new Request(new URL('/user/abc-123', location.href)) const result = await handler.run(request) - expect(result).toEqual< - RequestHandlerExecutionResult - >({ - handler, - request, - parsedResult: { - match: { - matches: true, - params: { - userId: 'abc-123', - }, + expect(result!.handler).toEqual(handler) + expect(result!.parsedResult).toEqual({ + match: { + matches: true, + params: { + userId: 'abc-123', }, - cookies: {}, }, - response: expect.objectContaining({ - status: 200, - }), + cookies: {}, }) + expect(result!.request.method).toBe('GET') + expect(result!.request.url).toBe('http://localhost/user/abc-123') + expect(result!.response?.status).toBe(200) + expect(result!.response?.statusText).toBe('OK') expect(await result?.response?.json()).toEqual({ userId: 'abc-123' }) }) diff --git a/src/passthrough.test.ts b/src/passthrough.test.ts index 1b016d34d..631fcdaf3 100644 --- a/src/passthrough.test.ts +++ b/src/passthrough.test.ts @@ -1,7 +1,6 @@ /** * @jest-environment node */ -import { Response } from './Response' import { passthrough } from './passthrough' it('creates a 302 response with the intention header', () => { diff --git a/src/utils/HttpResponse/createResponse.test.ts b/src/utils/HttpResponse/createResponse.test.ts index bbfc34a08..6f628636c 100644 --- a/src/utils/HttpResponse/createResponse.test.ts +++ b/src/utils/HttpResponse/createResponse.test.ts @@ -2,7 +2,6 @@ * @jest-environment node */ import { Headers } from 'headers-polyfill' -import { ReadableStream } from '../../ReadableStream' import { createResponse } from './createResponse' it('creates an empty response', () => { diff --git a/src/utils/handleRequest.test.ts b/src/utils/handleRequest.test.ts index 117af5afd..677e54748 100644 --- a/src/utils/handleRequest.test.ts +++ b/src/utils/handleRequest.test.ts @@ -214,11 +214,30 @@ test('returns the mocked response for a request with a matching request handler' ['request:end', request, requestId], ]) expect(callbacks.onPassthroughResponse).not.toHaveBeenCalled() - expect(callbacks.onMockedResponse).toHaveBeenNthCalledWith( - 1, - mockedResponse, - lookupResult, - ) + + expect(callbacks.onMockedResponse).toHaveBeenCalledTimes(1) + const [mockedResponseParam, lookupResultParam] = + callbacks.onMockedResponse.mock.calls[0] + + expect(mockedResponseParam.status).toBe(mockedResponse.status) + expect(mockedResponseParam.statusText).toBe(mockedResponse.statusText) + expect(Object.fromEntries(mockedResponseParam.headers.entries())).toEqual({ + ...Object.fromEntries(mockedResponse.headers.entries()), + 'x-powered-by': 'msw', + }) + + expect(lookupResultParam).toEqual({ + handler: lookupResult.handler, + parsedRequest: lookupResult.parsedRequest, + request: expect.objectContaining({ + method: lookupResult.request.method, + url: lookupResult.request.url, + }), + response: expect.objectContaining({ + status: lookupResult.response.status, + statusText: lookupResult.response.statusText, + }), + }) }) test('returns a transformed response if the "transformResponse" option is provided', async () => { @@ -232,10 +251,13 @@ test('returns a transformed response if the "transformResponse" option is provid return mockedResponse }), ] - const transformResponse = jest.fn().mockImplementation((response) => ({ - body: response.body, - })) - const finalResponse = transformResponse(mockedResponse) + const transformResponseImpelemntation = (response: Response): Response => { + return new Response('transformed', response) + } + const transformResponse = jest + .fn() + .mockImplementation(transformResponseImpelemntation) + const finalResponse = transformResponseImpelemntation(mockedResponse) const lookupResult = { handler: handlers[0], response: mockedResponse, @@ -258,30 +280,54 @@ test('returns a transformed response if the "transformResponse" option is provid }, ) - expect(result).toEqual(finalResponse) + expect(result?.status).toEqual(finalResponse.status) + expect(result?.statusText).toEqual(finalResponse.statusText) + expect(Object.fromEntries(result!.headers.entries())).toEqual({ + ...Object.fromEntries(finalResponse.headers.entries()), + 'x-powered-by': 'msw', + }) + expect(events).toEqual([ ['request:start', request, requestId], ['request:match', request, requestId], ['request:end', request, requestId], ]) expect(callbacks.onPassthroughResponse).not.toHaveBeenCalled() - expect(transformResponse).toHaveBeenNthCalledWith( - 1, - expect.objectContaining({ - status: mockedResponse.status, - statusText: mockedResponse.statusText, - headers: mockedResponse.headers, + + expect(transformResponse).toHaveBeenCalledTimes(1) + const [responseParam] = transformResponse.mock.calls[0] + + expect(responseParam.status).toBe(mockedResponse.status) + expect(responseParam.statusText).toBe(mockedResponse.statusText) + expect(Object.fromEntries(responseParam.headers.entries())).toEqual({ + ...Object.fromEntries(mockedResponse.headers.entries()), + 'x-powered-by': 'msw', + }) + + expect(callbacks.onMockedResponse).toHaveBeenCalledTimes(1) + const [mockedResponseParam, lookupResultParam] = + callbacks.onMockedResponse.mock.calls[0] + + expect(mockedResponseParam.status).toBe(finalResponse.status) + expect(mockedResponseParam.statusText).toBe(finalResponse.statusText) + expect(Object.fromEntries(mockedResponseParam.headers.entries())).toEqual({ + ...Object.fromEntries(finalResponse.headers.entries()), + 'x-powered-by': 'msw', + }) + expect(await mockedResponseParam.text()).toBe('transformed') + + expect(lookupResultParam).toEqual({ + handler: lookupResult.handler, + parsedRequest: lookupResult.parsedRequest, + request: expect.objectContaining({ + method: lookupResult.request.method, + url: lookupResult.request.url, }), - ) - expect(callbacks.onMockedResponse).toHaveBeenNthCalledWith( - 1, - expect.objectContaining({ - status: finalResponse.status, - statusText: finalResponse.statusText, - headers: finalResponse.headers, + response: expect.objectContaining({ + status: lookupResult.response.status, + statusText: lookupResult.response.statusText, }), - lookupResult, - ) + }) }) it('returns undefined without warning on a passthrough request', async () => { diff --git a/src/utils/internal/parseGraphQLRequest.test.ts b/src/utils/internal/parseGraphQLRequest.test.ts index 9b152189e..176ab7cd0 100644 --- a/src/utils/internal/parseGraphQLRequest.test.ts +++ b/src/utils/internal/parseGraphQLRequest.test.ts @@ -4,7 +4,6 @@ import { encodeBuffer } from '@mswjs/interceptors' import { OperationTypeNode } from 'graphql' import { Headers } from 'headers-polyfill' -import { Request } from '../../Request' import { ParsedGraphQLRequest, parseGraphQLRequest, diff --git a/src/utils/logging/serializeRequest.test.ts b/src/utils/logging/serializeRequest.test.ts index 86674470c..3a964033a 100644 --- a/src/utils/logging/serializeRequest.test.ts +++ b/src/utils/logging/serializeRequest.test.ts @@ -1,6 +1,5 @@ import { encodeBuffer } from '@mswjs/interceptors' import { Headers } from 'headers-polyfill' -import { Request } from '../../Request' import { serializeRequest } from './serializeRequest' test('serializes given Request instance into a plain object', async () => { diff --git a/src/utils/logging/serializeResponse.test.ts b/src/utils/logging/serializeResponse.test.ts index 0f0a262fe..171df65e7 100644 --- a/src/utils/logging/serializeResponse.test.ts +++ b/src/utils/logging/serializeResponse.test.ts @@ -2,9 +2,6 @@ * @jest-environment node */ import { encodeBuffer } from '@mswjs/interceptors' -import { Response } from '../../Response' -import { Blob } from '../../Blob' -import { FormData } from '../../FormData' import { serializeResponse } from './serializeResponse' it('serializes response without body', async () => { diff --git a/src/utils/request/getPublicUrlFromRequest.test.ts b/src/utils/request/getPublicUrlFromRequest.test.ts index 985f1574d..3ac30af83 100644 --- a/src/utils/request/getPublicUrlFromRequest.test.ts +++ b/src/utils/request/getPublicUrlFromRequest.test.ts @@ -1,7 +1,6 @@ /** * @jest-environment jsdom */ -import { Request } from '../../Request' import { getPublicUrlFromRequest } from './getPublicUrlFromRequest' test('returns an absolute request URL withouth search params', () => { diff --git a/src/utils/request/getRequestCookies.node.test.ts b/src/utils/request/getRequestCookies.node.test.ts index ad2a5526c..2061c4fe0 100644 --- a/src/utils/request/getRequestCookies.node.test.ts +++ b/src/utils/request/getRequestCookies.node.test.ts @@ -1,7 +1,6 @@ /** * @jest-environment node */ -import { Request } from '../../Request' import { getRequestCookies } from './getRequestCookies' const prevLocation = global.location diff --git a/src/utils/request/getRequestCookies.test.ts b/src/utils/request/getRequestCookies.test.ts index ed51e493e..d7983cfce 100644 --- a/src/utils/request/getRequestCookies.test.ts +++ b/src/utils/request/getRequestCookies.test.ts @@ -3,7 +3,6 @@ */ import { getRequestCookies } from './getRequestCookies' import { clearCookies } from '../../../test/support/utils' -import { Request } from '../../Request' beforeAll(() => { // Emulate some `document.cookie` value. diff --git a/src/utils/request/onUnhandledRequest.test.ts b/src/utils/request/onUnhandledRequest.test.ts index 9d28a1f1d..c416633ed 100644 --- a/src/utils/request/onUnhandledRequest.test.ts +++ b/src/utils/request/onUnhandledRequest.test.ts @@ -1,3 +1,6 @@ +/** + * @jest-environment jsdom + */ import { onUnhandledRequest, UnhandledRequestCallback, From d0a27ef9bf78dc206af436a7e29a151d68bbb158 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 27 Feb 2023 18:37:25 +0100 Subject: [PATCH 072/210] test(xhr): rewrite to fetch api --- .../msw-api/setup-server/scenarios/xhr.node.test.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/test/node/msw-api/setup-server/scenarios/xhr.node.test.ts b/test/node/msw-api/setup-server/scenarios/xhr.node.test.ts index 25042d9ed..ac54030af 100644 --- a/test/node/msw-api/setup-server/scenarios/xhr.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/xhr.node.test.ts @@ -6,14 +6,17 @@ import { setupServer } from 'msw/node' import { stringToHeaders } from 'headers-polyfill' const server = setupServer( - rest.get('http://test.mswjs.io', (req, res, ctx) => { - return res( - ctx.status(401), - ctx.set('x-header', 'yes'), - ctx.json({ + rest.get('http://test.mswjs.io', ({ request }) => { + return new Response( + JSON.stringify({ firstName: 'John', age: 32, }), + { + status: 401, + statusText: 'Unauthorized', + headers: { 'x-header': 'yes' }, + }, ) }), ) From 7062869e58d2b6d8358219cb616066fa5f91092c Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 1 Mar 2023 19:58:30 +0100 Subject: [PATCH 073/210] chore: fix node tests --- test/jest.config.js | 9 ++++++++- test/node/graphql-api/extensions.node.test.ts | 2 +- .../scenarios/cookies-request.node.test.ts | 12 ++++++++---- .../msw-api/setup-server/scenarios/xhr.node.test.ts | 5 ++++- test/node/msw-api/setup-server/use.node.test.ts | 7 +++++-- .../request/body/body-arraybuffer.node.test.ts | 8 ++++++-- .../request/body/body-form-data.node.test.ts | 7 ++----- 7 files changed, 34 insertions(+), 16 deletions(-) diff --git a/test/jest.config.js b/test/jest.config.js index 4f865b000..5975044cc 100644 --- a/test/jest.config.js +++ b/test/jest.config.js @@ -1,4 +1,4 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ +/** @type {import('jest').Config} */ module.exports = { rootDir: './node', transform: { @@ -10,4 +10,11 @@ module.exports = { moduleNameMapper: { '^msw(.*)': '/../..$1', }, + testEnvironmentOptions: { + customExportConditions: [''], + }, + globals: { + Request, + Response, + }, } diff --git a/test/node/graphql-api/extensions.node.test.ts b/test/node/graphql-api/extensions.node.test.ts index e4b1fadaf..bd9884a69 100644 --- a/test/node/graphql-api/extensions.node.test.ts +++ b/test/node/graphql-api/extensions.node.test.ts @@ -18,7 +18,7 @@ const schema = gql` ` const server = setupServer( - graphql.query('GetUser', ({ query }) => { + graphql.query('GetUser', async ({ query }) => { const { data, errors } = await executeGraphql({ schema: buildSchema(schema), source: query, diff --git a/test/node/msw-api/setup-server/scenarios/cookies-request.node.test.ts b/test/node/msw-api/setup-server/scenarios/cookies-request.node.test.ts index 6d23c3661..981be831b 100644 --- a/test/node/msw-api/setup-server/scenarios/cookies-request.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/cookies-request.node.test.ts @@ -4,7 +4,7 @@ import https from 'https' import { rest, HttpResponse } from 'msw' import { setupServer, SetupServerApi } from 'msw/node' -import { HttpServer } from '@open-draft/test-server/http' +import { httpsAgent, HttpServer } from '@open-draft/test-server/http' import { waitForClientRequest } from '../../../../support/utils' const httpServer = new HttpServer((app) => { @@ -26,21 +26,25 @@ afterAll(async () => { }) test('has access to request cookies', async () => { + const endpointUrl = httpServer.https.url('/user') + server.use( - rest.get(httpServer.https.url('/user'), ({ cookies }) => { + rest.get(endpointUrl, ({ cookies }) => { return HttpResponse.json({ cookies }) }), ) - const url = new URL(httpServer.https.url('/user')) + const url = new URL(endpointUrl) const request = https.get({ protocol: url.protocol, - host: url.host, + hostname: url.hostname, path: url.pathname, + port: url.port, headers: { Cookie: 'auth-token=abc-123', }, + agent: httpsAgent, }) const { responseText } = await waitForClientRequest(request) diff --git a/test/node/msw-api/setup-server/scenarios/xhr.node.test.ts b/test/node/msw-api/setup-server/scenarios/xhr.node.test.ts index ac54030af..db6e1d681 100644 --- a/test/node/msw-api/setup-server/scenarios/xhr.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/xhr.node.test.ts @@ -15,7 +15,10 @@ const server = setupServer( { status: 401, statusText: 'Unauthorized', - headers: { 'x-header': 'yes' }, + headers: { + 'Content-Type': 'application/json', + 'X-Header': 'yes', + }, }, ) }), diff --git a/test/node/msw-api/setup-server/use.node.test.ts b/test/node/msw-api/setup-server/use.node.test.ts index 14394ed4e..979ed1e25 100644 --- a/test/node/msw-api/setup-server/use.node.test.ts +++ b/test/node/msw-api/setup-server/use.node.test.ts @@ -3,7 +3,7 @@ */ import fetch from 'node-fetch' import { HttpResponse, rest } from 'msw' -import { setupServer, SetupServerApi } from 'msw/node' +import { SetupServer, setupServer } from 'msw/node' import { RequestHandler as ExpressRequestHandler } from 'express' import { HttpServer } from '@open-draft/test-server/http' @@ -15,14 +15,17 @@ const httpServer = new HttpServer((app) => { app.post('/login', handler) }) -let server: SetupServerApi +let server: SetupServer beforeAll(async () => { + await httpServer.listen() + server = setupServer( rest.get<{ bookId: string }>(httpServer.http.url('/book/:bookId'), () => { return HttpResponse.json({ title: 'Original title' }) }), ) + server.listen() }) diff --git a/test/node/rest-api/request/body/body-arraybuffer.node.test.ts b/test/node/rest-api/request/body/body-arraybuffer.node.test.ts index 87ba93bbd..ce9ed2f8b 100644 --- a/test/node/rest-api/request/body/body-arraybuffer.node.test.ts +++ b/test/node/rest-api/request/body/body-arraybuffer.node.test.ts @@ -4,11 +4,15 @@ import fetch from 'node-fetch' import { rest, HttpResponse } from 'msw' import { setupServer } from 'msw/node' -import { encodeBuffer } from '@mswjs/interceptors' + +function encodeBuffer(value: unknown) { + return Buffer.from(JSON.stringify(value)).buffer +} const server = setupServer( rest.post('http://localhost/arrayBuffer', async ({ request }) => { - return HttpResponse.arrayBuffer(await request.arrayBuffer()) + const requestBodyBuffer = await request.arrayBuffer() + return HttpResponse.arrayBuffer(requestBodyBuffer) }), ) diff --git a/test/node/rest-api/request/body/body-form-data.node.test.ts b/test/node/rest-api/request/body/body-form-data.node.test.ts index 254541dd3..f50ed51ff 100644 --- a/test/node/rest-api/request/body/body-form-data.node.test.ts +++ b/test/node/rest-api/request/body/body-form-data.node.test.ts @@ -1,8 +1,6 @@ /** * @jest-environment node */ -import fetch from 'node-fetch' -import FormDataPolyfill from 'form-data' import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' @@ -21,17 +19,16 @@ afterAll(() => { server.close() }) -test('reads FormData request body', async () => { +test.skip('reads FormData request body', async () => { // Note that creating a `FormData` instance in Node/JSDOM differs // from the same instance in a real browser. Follow the instructions // of your `fetch` polyfill to learn more. - const formData = new FormDataPolyfill() + const formData = new FormData() formData.append('username', 'john.maverick') formData.append('password', 'secret123') const res = await fetch('http://localhost/resource', { method: 'POST', - headers: formData.getHeaders(), body: formData, }) const json = await res.json() From 603b24a30a262fc20b8d7470376d3a41864b9f97 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 3 Mar 2023 15:59:56 +0100 Subject: [PATCH 074/210] chore: use node 18 on ci --- .github/workflows/ci.yml | 2 +- .github/workflows/release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e8753e9d8..1f58ebb1d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v3 with: - node-version: 16 + node-version: 18 - uses: pnpm/action-setup@v2 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ecff80f93..ffd36fa8d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,7 +18,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v3 with: - node-version: 16 + node-version: 18 always-auth: true registry-url: https://registry.npmjs.org From e39b8fe6410adb8549afdc89cee0f11223569480 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 3 Mar 2023 17:35:57 +0100 Subject: [PATCH 075/210] chore: move interceptors back to regular dependencies --- package.json | 2 +- pnpm-lock.yaml | 17 +++++++---------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 362c13f11..c4e591b88 100644 --- a/package.json +++ b/package.json @@ -89,6 +89,7 @@ "sideEffects": false, "dependencies": { "@mswjs/cookies": "^0.2.2", + "@mswjs/interceptors": "^0.22.4", "@open-draft/until": "^1.0.3", "@types/cookie": "^0.4.1", "@types/js-levenshtein": "^1.1.1", @@ -113,7 +114,6 @@ "@babel/preset-env": "^7.16.11", "@commitlint/cli": "^16.1.0", "@commitlint/config-conventional": "^16.0.0", - "@mswjs/interceptors": "^0.22.1", "@open-draft/test-server": "^0.4.2", "@ossjs/release": "^0.4.0", "@playwright/test": "^1.30.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b1452e834..ed50bebbb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,7 +9,7 @@ specifiers: '@commitlint/cli': ^16.1.0 '@commitlint/config-conventional': ^16.0.0 '@mswjs/cookies': ^0.2.2 - '@mswjs/interceptors': ^0.22.1 + '@mswjs/interceptors': ^0.22.4 '@open-draft/test-server': ^0.4.2 '@open-draft/until': ^1.0.3 '@ossjs/release': ^0.4.0 @@ -76,6 +76,7 @@ specifiers: dependencies: '@mswjs/cookies': 0.2.2 + '@mswjs/interceptors': 0.22.4 '@open-draft/until': 1.0.3 '@types/cookie': 0.4.1 '@types/js-levenshtein': 1.1.1 @@ -100,7 +101,6 @@ devDependencies: '@babel/preset-env': 7.20.2_@babel+core@7.20.12 '@commitlint/cli': 16.3.0_@swc+core@1.3.35 '@commitlint/config-conventional': 16.2.4 - '@mswjs/interceptors': 0.22.1 '@open-draft/test-server': 0.4.2 '@ossjs/release': 0.4.0 '@playwright/test': 1.30.0 @@ -2123,8 +2123,8 @@ packages: set-cookie-parser: 2.5.1 dev: false - /@mswjs/interceptors/0.22.1: - resolution: {integrity: sha512-OzmSC/lPa82tng2wk7sccGsAa6BXA5RK41z4v6KMW9VHf2LxT3UxzgACjvzYYkNWC8grSxLufsxx859FVv1sdg==} + /@mswjs/interceptors/0.22.4: + resolution: {integrity: sha512-gEzL9hx1jNMbYu6a1HZpb6Om5DnmSKscdnsZtsD0KeG7OGTyXT9rW+RM+VDRc/Y0wwTcVKZibi+E8XTX83wFYQ==} engines: {node: '>=18'} dependencies: '@open-draft/deferred-promise': 2.1.0 @@ -2136,7 +2136,7 @@ packages: strict-event-emitter: 0.4.6 transitivePeerDependencies: - supports-color - dev: true + dev: false /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -2161,7 +2161,7 @@ packages: /@open-draft/deferred-promise/2.1.0: resolution: {integrity: sha512-Rzd5JrXZX8zErHzgcGyngh4fmEbSHqTETdGj9rXtejlqMIgXFlyKBA7Jn1Xp0Ls0M0Y22+xHcWiEzbmdWl0BOA==} - dev: true + dev: false /@open-draft/test-server/0.4.2: resolution: {integrity: sha512-J9wbdQkPx5WKcDNtgfnXsx5ew4UJd6BZyGr89YlHeaUkOShkO2iO5QIyCCsG4qpjIvr2ZTkEYJA9ujOXXyO6Pg==} @@ -2444,7 +2444,6 @@ packages: resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} dependencies: '@types/ms': 0.7.31 - dev: true /@types/eslint-scope/3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} @@ -2561,7 +2560,6 @@ packages: /@types/ms/0.7.31: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} - dev: true /@types/mustache/4.2.2: resolution: {integrity: sha512-MUSpfpW0yZbTgjekDbH0shMYBUD+X/uJJJMm9LXN1d5yjl5lCY1vN/eWKD6D1tOtjA6206K0zcIPnUaFMurdNA==} @@ -4353,7 +4351,6 @@ packages: optional: true dependencies: ms: 2.1.2 - dev: true /debug/4.3.4_supports-color@6.1.0: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -7686,7 +7683,6 @@ packages: /ms/2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true /ms/2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -9336,6 +9332,7 @@ packages: /strict-event-emitter/0.4.6: resolution: {integrity: sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==} + dev: false /string-argv/0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} From 7acbf212314aff9ab789d49eeaf4aa1de62681bb Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 3 Mar 2023 17:36:09 +0100 Subject: [PATCH 076/210] test: fix rest-api body mocks test --- test/browser/rest-api/body.mocks.ts | 2 +- test/browser/rest-api/body.test.ts | 65 ++++++++--------------------- 2 files changed, 18 insertions(+), 49 deletions(-) diff --git a/test/browser/rest-api/body.mocks.ts b/test/browser/rest-api/body.mocks.ts index 648b64639..5e6456e88 100644 --- a/test/browser/rest-api/body.mocks.ts +++ b/test/browser/rest-api/body.mocks.ts @@ -2,7 +2,7 @@ import { setupWorker, rest, HttpResponse, ResponseResolver } from 'msw' const forwardRequestBody: ResponseResolver = async ({ request }) => { const requestText = - request.headers.get('Content-Type') === 'application/json' + request.headers.get('Content-Type') === 'application/json' && request.body ? await request.json() : await request.text() diff --git a/test/browser/rest-api/body.test.ts b/test/browser/rest-api/body.test.ts index 1ba26970a..40a71a6aa 100644 --- a/test/browser/rest-api/body.test.ts +++ b/test/browser/rest-api/body.test.ts @@ -11,21 +11,6 @@ test('handles a GET request without a body', async ({ loadExample, fetch }) => { expect(body).toEqual({ value: '' }) }) -test('handles a GET request without a body and "Content-Type: application/json" header', async ({ - loadExample, - fetch, -}) => { - await loadExample(EXAMPLE_PATH) - - const res = await fetch('/resource', { - headers: { - 'Content-Type': 'application/json', - }, - }) - const body = await res.json() - expect(body).toEqual({ body: undefined }) -}) - test('handles a POST request with an explicit empty body', async ({ loadExample, fetch, @@ -83,45 +68,29 @@ test('handles a POST request with a JSON body and "Content-Type: application/jso test('handles a POST request with a multipart body and "Content-Type: multipart/form-data" header', async ({ loadExample, fetch, + page, }) => { await loadExample(EXAMPLE_PATH) - // WORKAROUND: `FormData` is not available in `page.evaluate` - const multipartData = `\ -------WebKitFormBoundaryvZ1cVXWyK0ilQdab\r -Content-Disposition: form-data; name="file"; filename="file1.txt"\r -Content-Type: application/octet-stream\r -\r -file content\r -------WebKitFormBoundaryvZ1cVXWyK0ilQdab\r -Content-Disposition: form-data; name="text"\r -\r -text content\r -------WebKitFormBoundaryvZ1cVXWyK0ilQdab\r -Content-Disposition: form-data; name="text2"\r -\r -another text content\r -------WebKitFormBoundaryvZ1cVXWyK0ilQdab\r -Content-Disposition: form-data; name="text2"\r -\r -another text content 2\r -------WebKitFormBoundaryvZ1cVXWyK0ilQdab--\r\n` - - const res = await fetch('/upload', { - method: 'POST', - headers: { - 'Content-Type': - 'multipart/form-data; boundary=WebKitFormBoundaryvZ1cVXWyK0ilQdab', - }, - body: multipartData, + await page.evaluate(() => { + const data = new FormData() + data.set('file', new File(['file content'], 'file1.txt')) + data.set('text', 'text content') + data.set('text2', 'another text content') + data.append('text2', 'another text content 2') + + fetch('/upload', { + method: 'POST', + body: data, + }) }) + + const res = await page.waitForResponse(/\/upload/) const body = await res.json() expect(body).toEqual({ - body: { - file: 'file content', - text: 'text content', - text2: ['another text content', 'another text content 2'], - }, + file: 'file content', + text: 'text content', + text2: ['another text content', 'another text content 2'], }) }) From fc38370399e8b8f1875d10a995baba5a6b5e96c5 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 3 Mar 2023 18:16:09 +0100 Subject: [PATCH 077/210] chore: fix browser tests --- .../graphql-api/multipart-data.mocks.ts | 64 +++++++++---------- .../graphql-api/multipart-data.test.ts | 22 +++++-- .../graphql-api/response-patching.mocks.ts | 17 +++++ .../graphql-api/response-patching.test.ts | 30 ++++----- test/browser/msw-api/hard-reload.mocks.ts | 6 +- .../msw-api/regression/null-body.test.ts | 8 +-- test/browser/msw-api/req/passthrough.mocks.ts | 3 +- test/browser/msw-api/req/passthrough.test.ts | 20 +++--- .../fallback-mode/fallback-mode.mocks.ts | 6 +- .../start/wait-until-ready.mocks.ts | 10 +-- test/browser/msw-api/unregister.mocks.ts | 6 +- test/browser/rest-api/cookies.mocks.ts | 17 ++--- .../request/body/body-form-data.page.html | 33 +++++----- .../request/body/body-form-data.test.ts | 14 ++-- .../rest-api/request/body/body-json.test.ts | 4 +- .../rest-api/response-patching.mocks.ts | 7 +- 16 files changed, 141 insertions(+), 126 deletions(-) diff --git a/test/browser/graphql-api/multipart-data.mocks.ts b/test/browser/graphql-api/multipart-data.mocks.ts index 9f971fd88..b889744ea 100644 --- a/test/browser/graphql-api/multipart-data.mocks.ts +++ b/test/browser/graphql-api/multipart-data.mocks.ts @@ -1,40 +1,36 @@ -import { setupWorker, graphql } from 'msw' - -interface UploadFileMutation { - multipart: { - file1?: string - file2?: string - files?: string[] - otherVariable?: string - } -} - -interface UploadFileVariables { - file1?: File - file2?: File - files?: File[] - otherVariable?: string -} +import { setupWorker, graphql, HttpResponse } from 'msw' const worker = setupWorker( - graphql.mutation( - 'UploadFile', - async (req, res, ctx) => { - const { file1, file2, files = [], otherVariable } = req.variables - const filesResponse = await Promise.all(files.map((file) => file.text())) - - return res( - ctx.data({ - multipart: { - file1: await file1?.text(), - file2: await file2?.text(), - files: filesResponse, - otherVariable, - }, - }), - ) + graphql.mutation< + { + multipart: { + file1?: string + file2?: string + files?: Array + plainText?: string + } }, - ), + { + file1?: File + file2?: File + files?: Array + plainText?: string + } + >('UploadFile', async ({ variables }) => { + const { file1, file2, files = [], plainText } = variables + const filesResponse = await Promise.all(files.map((file) => file.text())) + + return HttpResponse.json({ + data: { + multipart: { + file1: await file1?.text(), + file2: await file2?.text(), + files: filesResponse, + plainText, + }, + }, + }) + }), ) worker.start() diff --git a/test/browser/graphql-api/multipart-data.test.ts b/test/browser/graphql-api/multipart-data.test.ts index 0ead2e067..e5a48cafd 100644 --- a/test/browser/graphql-api/multipart-data.test.ts +++ b/test/browser/graphql-api/multipart-data.test.ts @@ -1,5 +1,4 @@ import { test, expect } from '../playwright.extend' -import { gql } from '../../support/graphql' test('accepts a file from a GraphQL mutation', async ({ loadExample, @@ -7,22 +6,31 @@ test('accepts a file from a GraphQL mutation', async ({ }) => { await loadExample(require.resolve('./multipart-data.mocks.ts')) - const UPLOAD_FILE_MUTATION = gql` - mutation UploadFile($file1: Upload, $file2: Upload, $plainText: String) { - multipart(file1: $file1, file2: $file2, plainText: $plainText) { + const UPLOAD_MUTATION = ` + mutation UploadFile( + $file1: Upload + $file2: Upload + $plainText: String + ) { + multipart( + file1: $file1 + file2: $file2 + plainText: $plainText + ){ file1 file2 plainText } } ` + const res = await query('/graphql', { - query: UPLOAD_FILE_MUTATION, + query: UPLOAD_MUTATION, variables: { file1: null, file2: null, files: [null, null], - otherVariable: 'value', + plainText: 'text', }, multipartOptions: { map: { @@ -42,7 +50,7 @@ test('accepts a file from a GraphQL mutation', async ({ file1: 'file1 content', file2: 'file2 content', files: ['file1 content', 'file2 content'], - otherVariable: 'value', + plainText: 'text', }, }, }) diff --git a/test/browser/graphql-api/response-patching.mocks.ts b/test/browser/graphql-api/response-patching.mocks.ts index 42cd6e537..90effbdca 100644 --- a/test/browser/graphql-api/response-patching.mocks.ts +++ b/test/browser/graphql-api/response-patching.mocks.ts @@ -1,4 +1,5 @@ import { setupWorker, graphql, bypass, HttpResponse } from 'msw' +import { createGraphQLClient, gql } from '../../support/graphql' interface GetUserQuery { user: { @@ -29,3 +30,19 @@ const worker = setupWorker( window.msw = { registration: worker.start(), } + +// @ts-ignore +window.dispatchGraphQLQuery = (uri: string) => { + const client = createGraphQLClient({ uri }) + + return client({ + query: gql` + query GetUser { + user { + firstName + lastName + } + } + `, + }) +} diff --git a/test/browser/graphql-api/response-patching.test.ts b/test/browser/graphql-api/response-patching.test.ts index f2994a4d3..fc3e389ee 100644 --- a/test/browser/graphql-api/response-patching.test.ts +++ b/test/browser/graphql-api/response-patching.test.ts @@ -49,7 +49,7 @@ test.afterEach(async () => { await httpServer.close() }) -test('patches a GraphQL response', async ({ loadExample, page, query }) => { +test('patches a GraphQL response', async ({ loadExample, page }) => { await loadExample(require.resolve('./response-patching.mocks.ts')) const endpointUrl = httpServer.http.url('/graphql') @@ -57,24 +57,16 @@ test('patches a GraphQL response', async ({ loadExample, page, query }) => { return window.msw.registration }) - const res = await query(endpointUrl, { - query: gql` - query GetUser { - user { - firstName - lastName - } - } - `, - }) - const body = await res.json() - - expect(body).toEqual({ - data: { - user: { - firstName: 'Christian', - lastName: 'Maverick', - }, + const res = await page.evaluate( + ([url]) => { + return window.dispatchGraphQLQuery(url) }, + [endpointUrl], + ) + + expect(res.errors).toBeUndefined() + expect(res.data).toHaveProperty('user', { + firstName: 'Christian', + lastName: 'Maverick', }) }) diff --git a/test/browser/msw-api/hard-reload.mocks.ts b/test/browser/msw-api/hard-reload.mocks.ts index 7d90bfb04..ad329259a 100644 --- a/test/browser/msw-api/hard-reload.mocks.ts +++ b/test/browser/msw-api/hard-reload.mocks.ts @@ -1,8 +1,8 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('https://example.com/resource', (req, res, ctx) => { - return res(ctx.json({ mocked: true })) + rest.get('https://example.com/resource', () => { + return HttpResponse.json({ mocked: true }) }), ) diff --git a/test/browser/msw-api/regression/null-body.test.ts b/test/browser/msw-api/regression/null-body.test.ts index 28b2aa90a..dc63a05c1 100644 --- a/test/browser/msw-api/regression/null-body.test.ts +++ b/test/browser/msw-api/regression/null-body.test.ts @@ -8,13 +8,13 @@ test('gracefully handles a 204 response null body during life-cycle events', asy }) => { await loadExample(require.resolve('./null-body.mocks.ts')) - let error: Error + const errors: Array = [] page.on('pageerror', (pageError) => { - error = pageError + errors.push(pageError) }) - await fetch('https://test.mswjs.io/api/books') + await fetch('/api/books') await sleep(500) - expect(error).not.toBeDefined() + expect(errors).toEqual([]) }) diff --git a/test/browser/msw-api/req/passthrough.mocks.ts b/test/browser/msw-api/req/passthrough.mocks.ts index 2b36f23ca..09cef966a 100644 --- a/test/browser/msw-api/req/passthrough.mocks.ts +++ b/test/browser/msw-api/req/passthrough.mocks.ts @@ -1,4 +1,4 @@ -import { setupWorker, rest, passthrough } from 'msw' +import { setupWorker, rest, passthrough, HttpResponse } from 'msw' const worker = setupWorker( rest.post('/', () => { @@ -13,4 +13,5 @@ window.msw = { worker, rest, passthrough, + HttpResponse, } diff --git a/test/browser/msw-api/req/passthrough.test.ts b/test/browser/msw-api/req/passthrough.test.ts index a9d02024d..9e1d911a0 100644 --- a/test/browser/msw-api/req/passthrough.test.ts +++ b/test/browser/msw-api/req/passthrough.test.ts @@ -1,4 +1,4 @@ -import { rest, SetupWorkerApi } from 'msw' +import { HttpResponse, passthrough, rest, SetupWorkerApi } from 'msw' import { test, expect } from '../../playwright.extend' const PASSTHROUGH_EXAMPLE = require.resolve('./passthrough.mocks.ts') @@ -7,6 +7,8 @@ declare namespace window { export const msw: { worker: SetupWorkerApi rest: typeof rest + passthrough: typeof passthrough + HttpResponse: typeof HttpResponse } } @@ -32,10 +34,10 @@ test('performs request as-is when returning "req.passthrough" call in the resolv const endpointUrl = server.http.url('/user') await page.evaluate((endpointUrl) => { - const { worker, rest } = window.msw + const { worker, rest, passthrough } = window.msw worker.use( - rest.post(endpointUrl, (req) => { - return req.passthrough() + rest.post(endpointUrl, () => { + return passthrough() }), ) }, endpointUrl) @@ -69,14 +71,14 @@ test('does not allow fall-through when returning "req.passthrough" call in the r const endpointUrl = server.http.url('/user') await page.evaluate((endpointUrl) => { - const { worker, rest } = window.msw + const { worker, rest, passthrough, HttpResponse } = window.msw worker.use( - rest.post(endpointUrl, (req) => { - return req.passthrough() + rest.post(endpointUrl, () => { + return passthrough() }), - rest.post(endpointUrl, (req, res, ctx) => { - return res(ctx.json({ name: 'Kate' })) + rest.post(endpointUrl, () => { + return HttpResponse.json({ name: 'Kate' }) }), ) }, endpointUrl) diff --git a/test/browser/msw-api/setup-worker/fallback-mode/fallback-mode.mocks.ts b/test/browser/msw-api/setup-worker/fallback-mode/fallback-mode.mocks.ts index 884815fad..870cf8a87 100644 --- a/test/browser/msw-api/setup-worker/fallback-mode/fallback-mode.mocks.ts +++ b/test/browser/msw-api/setup-worker/fallback-mode/fallback-mode.mocks.ts @@ -1,8 +1,8 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('*/user', (req, res, ctx) => { - return res(ctx.json({ name: 'John Maverick' })) + rest.get('*/user', () => { + return HttpResponse.json({ name: 'John Maverick' }) }), ) diff --git a/test/browser/msw-api/setup-worker/start/wait-until-ready.mocks.ts b/test/browser/msw-api/setup-worker/start/wait-until-ready.mocks.ts index da054483b..728193844 100644 --- a/test/browser/msw-api/setup-worker/start/wait-until-ready.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/wait-until-ready.mocks.ts @@ -1,11 +1,11 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('*/numbers', (req, res, ctx) => { - return res(ctx.json([1, 2, 3])) + rest.get('*/numbers', () => { + return HttpResponse.json([1, 2, 3]) }), - rest.get('*/letters', (req, res, ctx) => { - return res(ctx.json(['a', 'b', 'c'])) + rest.get('*/letters', () => { + return HttpResponse.json(['a', 'b', 'c']) }), ) diff --git a/test/browser/msw-api/unregister.mocks.ts b/test/browser/msw-api/unregister.mocks.ts index 27c77e1e8..4332d5d24 100644 --- a/test/browser/msw-api/unregister.mocks.ts +++ b/test/browser/msw-api/unregister.mocks.ts @@ -1,8 +1,8 @@ -import { setupWorker, rest } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( - rest.get('*/resource', (req, res, ctx) => { - return res(ctx.json({ mocked: true })) + rest.get('*/resource', () => { + return HttpResponse.json({ mocked: true }) }), ) diff --git a/test/browser/rest-api/cookies.mocks.ts b/test/browser/rest-api/cookies.mocks.ts index 4ca4b03fe..fba9b2e6a 100644 --- a/test/browser/rest-api/cookies.mocks.ts +++ b/test/browser/rest-api/cookies.mocks.ts @@ -1,4 +1,4 @@ -import { setupWorker, rest, HttpResponse, Headers } from 'msw' +import { setupWorker, rest, HttpResponse } from 'msw' const worker = setupWorker( rest.get('/user', () => { @@ -14,22 +14,15 @@ const worker = setupWorker( ) }), rest.get('/order', () => { - const headers = new Headers() - - /** - * @note Fetch API Headers don't support multi-value headers - * in the HeadersInit. You can, however, set multiple - * values by using the "append" method. - */ - headers.append('Set-Cookie', 'firstCookie=yes') - headers.append('Set-Cookie', 'secondCookie=no; Max-Age=1000') - return HttpResponse.json( { mocked: true, }, { - headers, + headers: [ + ['Set-Cookie', 'firstCookie=yes'], + ['Set-Cookie', 'secondCookie=no; Max-Age=1000'], + ], }, ) }), diff --git a/test/browser/rest-api/request/body/body-form-data.page.html b/test/browser/rest-api/request/body/body-form-data.page.html index a9f88a100..002fc728d 100644 --- a/test/browser/rest-api/request/body/body-form-data.page.html +++ b/test/browser/rest-api/request/body/body-form-data.page.html @@ -1,18 +1,17 @@ -
- - - -
+ + + + + fetch('/formData', { + method: 'POST', + body: data, + }) + } + + + diff --git a/test/browser/rest-api/request/body/body-form-data.test.ts b/test/browser/rest-api/request/body/body-form-data.test.ts index 704d8bff9..3df07b278 100644 --- a/test/browser/rest-api/request/body/body-form-data.test.ts +++ b/test/browser/rest-api/request/body/body-form-data.test.ts @@ -1,5 +1,11 @@ import { test, expect } from '../../../playwright.extend' +declare global { + interface Window { + makeRequest(): void + } +} + test('handles FormData as a request body', async ({ loadExample, page, @@ -9,15 +15,15 @@ test('handles FormData as a request body', async ({ markup: require.resolve('./body-form-data.page.html'), }) - page.click('button') + await page.evaluate(() => window.makeRequest()) - const res = await page.waitForResponse(makeUrl('/deprecated')) + const res = await page.waitForResponse(makeUrl('/formData')) const status = res.status() const json = await res.json() expect(status).toBe(200) expect(json).toEqual({ - username: 'john.maverick', - password: 'secret123', + name: 'Alice', + fileText: 'hello world', }) }) diff --git a/test/browser/rest-api/request/body/body-json.test.ts b/test/browser/rest-api/request/body/body-json.test.ts index de3cadc28..09a6e98b0 100644 --- a/test/browser/rest-api/request/body/body-json.test.ts +++ b/test/browser/rest-api/request/body/body-json.test.ts @@ -3,7 +3,7 @@ import { test, expect } from '../../../playwright.extend' test('reads request body as json', async ({ loadExample, fetch, page }) => { await loadExample(require.resolve('./body.mocks.ts')) - const res = await fetch('/deprecated', { + const res = await fetch('/json', { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -24,7 +24,7 @@ test('reads a single number as json request body', async ({ }) => { await loadExample(require.resolve('./body.mocks.ts')) - const res = await fetch('/deprecated', { + const res = await fetch('/json', { method: 'POST', headers: { 'Content-Type': 'application/json', diff --git a/test/browser/rest-api/response-patching.mocks.ts b/test/browser/rest-api/response-patching.mocks.ts index 8f3190e8c..b85d021f4 100644 --- a/test/browser/rest-api/response-patching.mocks.ts +++ b/test/browser/rest-api/response-patching.mocks.ts @@ -1,8 +1,8 @@ import { setupWorker, rest, HttpResponse, bypass } from 'msw' const worker = setupWorker( - rest.get('*/user', async () => { - const fetchArgs = await bypass('/user') + rest.get('*/user', async ({ request }) => { + const fetchArgs = await bypass(request.url) const originalResponse = await fetch(...fetchArgs) const body = await originalResponse.json() @@ -25,7 +25,8 @@ const worker = setupWorker( }), rest.get('*/headers', async ({ request }) => { - const fetchArgs = await bypass('/headers-proxy', { + const proxyUrl = new URL('/headers-proxy', request.url) + const fetchArgs = await bypass(proxyUrl, { method: 'POST', headers: request.headers, }) From 69d2c65d5b24df1af78fb45e05b07fb24d0bf0ed Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 4 Mar 2023 01:47:42 +0100 Subject: [PATCH 078/210] chore(xhr): fix onload being called twice in tests --- package.json | 2 +- pnpm-lock.yaml | 8 ++++---- test/node/msw-api/setup-server/scenarios/xhr.node.test.ts | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index c4e591b88..792b85533 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "sideEffects": false, "dependencies": { "@mswjs/cookies": "^0.2.2", - "@mswjs/interceptors": "^0.22.4", + "@mswjs/interceptors": "^0.22.6", "@open-draft/until": "^1.0.3", "@types/cookie": "^0.4.1", "@types/js-levenshtein": "^1.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ed50bebbb..510d73782 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,7 +9,7 @@ specifiers: '@commitlint/cli': ^16.1.0 '@commitlint/config-conventional': ^16.0.0 '@mswjs/cookies': ^0.2.2 - '@mswjs/interceptors': ^0.22.4 + '@mswjs/interceptors': ^0.22.6 '@open-draft/test-server': ^0.4.2 '@open-draft/until': ^1.0.3 '@ossjs/release': ^0.4.0 @@ -76,7 +76,7 @@ specifiers: dependencies: '@mswjs/cookies': 0.2.2 - '@mswjs/interceptors': 0.22.4 + '@mswjs/interceptors': 0.22.6 '@open-draft/until': 1.0.3 '@types/cookie': 0.4.1 '@types/js-levenshtein': 1.1.1 @@ -2123,8 +2123,8 @@ packages: set-cookie-parser: 2.5.1 dev: false - /@mswjs/interceptors/0.22.4: - resolution: {integrity: sha512-gEzL9hx1jNMbYu6a1HZpb6Om5DnmSKscdnsZtsD0KeG7OGTyXT9rW+RM+VDRc/Y0wwTcVKZibi+E8XTX83wFYQ==} + /@mswjs/interceptors/0.22.6: + resolution: {integrity: sha512-8VSiVkZjeiNcC0SdYSnaHY/wP8Ecs4hQAPLkhhM7Lx1Q1CCY7F+T1V7LfoQKvQyptHNO9UK+8WaKMNBLjl9hJQ==} engines: {node: '>=18'} dependencies: '@open-draft/deferred-promise': 2.1.0 diff --git a/test/node/msw-api/setup-server/scenarios/xhr.node.test.ts b/test/node/msw-api/setup-server/scenarios/xhr.node.test.ts index db6e1d681..770e0fe2d 100644 --- a/test/node/msw-api/setup-server/scenarios/xhr.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/xhr.node.test.ts @@ -6,7 +6,7 @@ import { setupServer } from 'msw/node' import { stringToHeaders } from 'headers-polyfill' const server = setupServer( - rest.get('http://test.mswjs.io', ({ request }) => { + rest.get('http://localhost:3001/resource', ({ request }) => { return new Response( JSON.stringify({ firstName: 'John', @@ -39,7 +39,7 @@ describe('given I perform an XMLHttpRequest', () => { beforeAll((done) => { const req = new XMLHttpRequest() - req.open('GET', 'http://test.mswjs.io') + req.open('GET', 'http://localhost:3001/resource') req.onload = function () { statusCode = this.status body = JSON.parse(this.response) From 5e92590cd54f5c1b5dc717f3396c5358756c2d88 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 4 Mar 2023 11:31:56 +0100 Subject: [PATCH 079/210] chore(release): v0.0.0-fetch.rc-4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 792b85533..8db81eb09 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-3", + "version": "0.0.0-fetch.rc-4", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/index.js", "types": "./lib/index.d.ts", From 22737829bd1bc735d5a8a6cb513bf63c38eccb0e Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 4 Mar 2023 11:34:32 +0100 Subject: [PATCH 080/210] chore(release): v0.0.0-fetch.rc-5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8db81eb09..07908f1b1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-4", + "version": "0.0.0-fetch.rc-5", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/index.js", "types": "./lib/index.d.ts", From 22cb9a1eaced1308b74616079a073caf2e50a7cf Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 7 Mar 2023 16:49:09 +0100 Subject: [PATCH 081/210] feat: distribute library as cjs and esm --- config/constants.js | 3 +- ...kerScriptPlugin.ts => copyWorkerPlugin.ts} | 66 ++++---- native/package.json | 3 +- node/package.json | 7 +- package.json | 28 +++- src/browser/index.ts | 7 + src/index.ts | 4 +- tsup.config.ts | 142 +++++++++--------- 8 files changed, 147 insertions(+), 113 deletions(-) rename config/plugins/esbuild/{workerScriptPlugin.ts => copyWorkerPlugin.ts} (56%) create mode 100644 src/browser/index.ts diff --git a/config/constants.js b/config/constants.js index e38940945..ba32bc9af 100644 --- a/config/constants.js +++ b/config/constants.js @@ -2,8 +2,7 @@ const path = require('path') const SERVICE_WORKER_SOURCE_PATH = path.resolve( __dirname, - '../', - 'src/mockServiceWorker.js', + '../src/mockServiceWorker.js', ) const SERVICE_WORKER_BUILD_PATH = path.resolve( diff --git a/config/plugins/esbuild/workerScriptPlugin.ts b/config/plugins/esbuild/copyWorkerPlugin.ts similarity index 56% rename from config/plugins/esbuild/workerScriptPlugin.ts rename to config/plugins/esbuild/copyWorkerPlugin.ts index f2c5885b7..3414398d3 100644 --- a/config/plugins/esbuild/workerScriptPlugin.ts +++ b/config/plugins/esbuild/copyWorkerPlugin.ts @@ -1,11 +1,21 @@ +import fs from 'fs' import path from 'path' -import fs from 'fs-extra' import crypto from 'crypto' import minify from 'babel-minify' import { invariant } from 'outvariant' import type { Plugin } from 'esbuild' import copyServiceWorker from '../../copyServiceWorker' +const SERVICE_WORKER_ENTRY_PATH = path.resolve( + process.cwd(), + './src/mockServiceWorker.js', +) + +const SERVICE_WORKER_OUTPUT_PATH = path.resolve( + process.cwd(), + './lib/mockServiceWorker.js', +) + function getChecksum(contents: string): string { const { code } = minify( contents, @@ -19,33 +29,31 @@ function getChecksum(contents: string): string { return crypto.createHash('md5').update(code, 'utf8').digest('hex') } -let hasRunAlready = false +export function getWorkerChecksum(): string { + const workerContents = fs.readFileSync(SERVICE_WORKER_ENTRY_PATH, 'utf8') + return getChecksum(workerContents) +} -export function workerScriptPlugin(): Plugin { +export function copyWorkerPlugin(checksum: string): Plugin { return { - name: 'workerScriptPlugin', + name: 'copyWorkerPlugin', async setup(build) { - const workerSourcePath = path.resolve( - process.cwd(), - './src/mockServiceWorker.js', - ) - const workerOutputPath = path.resolve( - process.cwd(), - './lib/mockServiceWorker.js', - ) - invariant( - workerSourcePath, + SERVICE_WORKER_ENTRY_PATH, 'Failed to locate the worker script source file', ) - invariant( - workerOutputPath, - 'Failed to locate the worker script output file', - ) + + if (fs.existsSync(SERVICE_WORKER_OUTPUT_PATH)) { + console.warn( + 'Skipped copying the worker script to "%s": already exists', + SERVICE_WORKER_OUTPUT_PATH, + ) + return + } // Generate the checksum from the worker script's contents. - const workerContents = await fs.readFile(workerSourcePath, 'utf8') - const checksum = getChecksum(workerContents) + // const workerContents = await fs.readFile(workerSourcePath, 'utf8') + // const checksum = getChecksum(workerContents) // Inject the global "SERVICE_WORKER_CHECKSUM" variable // for runtime worker integrity check. @@ -53,14 +61,6 @@ export function workerScriptPlugin(): Plugin { SERVICE_WORKER_CHECKSUM: JSON.stringify(checksum), } - // Prevent from copying the worker script multiple times. - // esbuild will execute this plugin for *each* format. - if (hasRunAlready) { - return - } - - hasRunAlready = true - build.onLoad({ filter: /mockServiceWorker\.js$/ }, async () => { return { // Prevent the worker script from being transpiled. @@ -73,9 +73,13 @@ export function workerScriptPlugin(): Plugin { console.log('worker script checksum:', checksum) // Copy the worker script on the next tick. - setTimeout(async () => { - await copyServiceWorker(workerSourcePath, workerOutputPath, checksum) - }, 100) + process.nextTick(async () => { + await copyServiceWorker( + SERVICE_WORKER_ENTRY_PATH, + SERVICE_WORKER_OUTPUT_PATH, + checksum, + ) + }) }) }, } diff --git a/native/package.json b/native/package.json index bb12dd1d1..a44c5d0e4 100644 --- a/native/package.json +++ b/native/package.json @@ -1,5 +1,6 @@ { + "browser": null, "main": "../lib/native/index.js", "module": "../lib/native/index.mjs", - "typings": "../lib/native/index.d.ts" + "types": "../lib/native/index.d.ts" } diff --git a/node/package.json b/node/package.json index 3d1591115..90873a259 100644 --- a/node/package.json +++ b/node/package.json @@ -1,5 +1,6 @@ { - "main": "../lib/node/index.js", - "module": "../lib/node/index.mjs", - "typings": "../lib/node/index.d.ts" + "browser": null, + "main": "../lib/node/node/index.js", + "module": "../lib/node/node/index.mjs", + "types": "../lib/node/node/index.d.ts" } diff --git a/package.json b/package.json index 07908f1b1..d5548d9c5 100644 --- a/package.json +++ b/package.json @@ -2,20 +2,36 @@ "name": "msw", "version": "0.0.0-fetch.rc-5", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", - "main": "./lib/index.js", - "types": "./lib/index.d.ts", + "main": "./lib/browser/index.js", + "types": "./lib/browser/index.d.ts", "exports": { ".": { - "default": "./lib/index.js" + "node": { + "types": "./lib/node/index.d.ts", + "import": "./lib/node/index.mjs", + "require": "./lib/node/index.js", + "default": "./lib/node/index.js" + }, + "browser": { + "types": "./lib/browser/index.d.ts", + "import": "./lib/browser/index.mjs", + "require": "./lib/browser/index.js", + "default": "./lib/browser/index.js" + } }, "./native": { + "browser": null, "types": "./lib/native/index.d.ts", + "import": "./lib/native/index.mjs", + "requier": "./lib/native/index.js", "default": "./lib/native/index.js" }, "./node": { - "types": "./lib/node/index.d.ts", - "require": "./lib/node/index.js", - "default": "./lib/node/index.mjs" + "browser": null, + "types": "./lib/node/node/index.d.ts", + "require": "./lib/node/node/index.js", + "import": "./lib/node/node/index.mjs", + "default": "./lib/node/node/index.mjs" }, "./package.json": "./package.json" }, diff --git a/src/browser/index.ts b/src/browser/index.ts new file mode 100644 index 000000000..ad48704ca --- /dev/null +++ b/src/browser/index.ts @@ -0,0 +1,7 @@ +// Include the root-level common exports so that the browser bundle +// can export everything from a single module ("msw" import root). +export * from '..' + +export { setupWorker } from '../setupWorker/setupWorker' +export type { SetupWorker, StartOptions } from '../setupWorker/glossary' +export { SetupWorkerApi } from '../setupWorker/setupWorker' diff --git a/src/index.ts b/src/index.ts index 91c83632e..f1b37650d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,4 @@ import { checkGlobals } from './utils/internal/checkGlobals' -export { setupWorker } from './setupWorker/setupWorker' export { SetupApi } from './SetupApi' @@ -18,8 +17,7 @@ export { cleanUrl } from './utils/url/cleanUrl' /** * Type definitions. */ -export type { SetupWorker, StartOptions } from './setupWorker/glossary' -export { SetupWorkerApi } from './setupWorker/setupWorker' + export type { SharedOptions } from './sharedOptions' export type { diff --git a/tsup.config.ts b/tsup.config.ts index 685e77872..d46729c43 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -1,76 +1,84 @@ -import { defineConfig } from 'tsup' -import { workerScriptPlugin } from './config/plugins/esbuild/workerScriptPlugin' +import { defineConfig, Options } from 'tsup' +import { + getWorkerChecksum, + copyWorkerPlugin, +} from './config/plugins/esbuild/copyWorkerPlugin' // Prevent from bunlding the "@mswjs/*" packages // so that the users get the latest versions without // having to bump them in "msw'." const ecosystemDependencies = /^@mswjs\/(.+)$/ -export default defineConfig([ - { - name: 'main', - entry: ['./src/index.ts'], - outDir: './lib', - format: ['cjs'], - legacyOutput: true, - sourcemap: true, - clean: true, - bundle: true, - splitting: false, - dts: false, - esbuildPlugins: [workerScriptPlugin()], - }, - { - name: 'iife', - entry: ['./src/index.ts'], - outDir: './lib', - legacyOutput: true, - format: ['iife'], - platform: 'browser', - globalName: 'MockServiceWorker', - bundle: true, - sourcemap: true, - splitting: false, - dts: false, - esbuildPlugins: [workerScriptPlugin()], - }, - { - name: 'node', - entry: ['./src/node/index.ts'], - format: ['esm', 'cjs'], - outDir: './lib/node', - platform: 'node', - external: [ - 'http', - 'https', - 'util', - 'events', - 'tty', - 'os', - 'timers', - ecosystemDependencies, - ], - clean: true, - inject: ['./config/polyfills-node.ts'], - sourcemap: true, - dts: false, - esbuildPlugins: [workerScriptPlugin()], - }, - { - name: 'native', - entry: ['./src/native/index.ts'], - format: ['esm', 'cjs'], - outDir: './lib/native', - clean: true, - external: ['chalk', 'util', 'events', ecosystemDependencies], +const SERVICE_WORKER_CHECKSUM = getWorkerChecksum() + +const nodeConfig: Options = { + name: 'node', + platform: 'node', + entry: ['./src/index.ts', './src/node/index.ts'], + inject: ['./config/polyfills-node.ts'], + external: [ecosystemDependencies], + format: ['esm', 'cjs'], + outDir: './lib/node', + sourcemap: true, + clean: true, + bundle: true, + splitting: false, + dts: true, +} + +const reactNativeConfig: Options = { + name: 'react-native', + platform: 'node', + entry: ['./src/native/index.ts'], + format: ['esm', 'cjs'], + outDir: './lib/native', + clean: true, + bundle: true, + splitting: false, + external: ['chalk', 'util', 'events', ecosystemDependencies], + dts: true, +} + +const browserConfig: Options = { + name: 'browser', + platform: 'browser', + entry: ['./src/browser/index.ts'], + external: [ecosystemDependencies], + format: ['esm', 'cjs'], + outDir: './lib/browser', + clean: true, + bundle: true, + splitting: false, + dts: true, + define: { + SERVICE_WORKER_CHECKSUM: JSON.stringify(SERVICE_WORKER_CHECKSUM), }, - { - name: 'typedefs', - entry: ['./src/index.ts', './src/node/index.ts', './src/native/index.ts'], - outDir: './lib', - clean: false, - dts: { - only: true, - }, + esbuildPlugins: [copyWorkerPlugin(SERVICE_WORKER_CHECKSUM)], +} + +const iifeConfig: Options = { + name: 'iife', + platform: 'browser', + globalName: 'MockServiceWorker', + entry: ['./src/browser/index.ts'], + outDir: './lib', + format: ['iife'], + legacyOutput: true, + clean: true, + bundle: true, + sourcemap: true, + splitting: false, + dts: false, + define: { + // Sign the IIFE build as well because any bundle containing + // the worker API must have the the integrity checksum defined. + SERVICE_WORKER_CHECKSUM: JSON.stringify(SERVICE_WORKER_CHECKSUM), }, +} + +export default defineConfig([ + nodeConfig, + reactNativeConfig, + browserConfig, + iifeConfig, ]) From c0c7f2a20d5071dbf612391d5fd58f415232f20d Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 7 Mar 2023 17:05:01 +0100 Subject: [PATCH 082/210] fix: set "main" to node, use explicit "browser" field --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d5548d9c5..2ca680e91 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,9 @@ "name": "msw", "version": "0.0.0-fetch.rc-5", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", - "main": "./lib/browser/index.js", - "types": "./lib/browser/index.d.ts", + "main": "./lib/node/index.js", + "types": "./lib/node/index.d.ts", + "browser": "./lib/browser/index.js", "exports": { ".": { "node": { From e4dce714fc95ff9a50e8c1ccf3da506bf002e4c4 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 7 Mar 2023 17:15:54 +0100 Subject: [PATCH 083/210] chore(release): 0.0.0-fetch.rc-6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2ca680e91..b08c2869f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-5", + "version": "0.0.0-fetch.rc-6", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/node/index.js", "types": "./lib/node/index.d.ts", From 694bec90d363b50a573a109143659092283ac1e3 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 7 Mar 2023 17:41:00 +0100 Subject: [PATCH 084/210] test(on): clone response before reading it --- .../msw-api/setup-worker/life-cycle-events/on.mocks.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/browser/msw-api/setup-worker/life-cycle-events/on.mocks.ts b/test/browser/msw-api/setup-worker/life-cycle-events/on.mocks.ts index 4182f34f9..735169303 100644 --- a/test/browser/msw-api/setup-worker/life-cycle-events/on.mocks.ts +++ b/test/browser/msw-api/setup-worker/life-cycle-events/on.mocks.ts @@ -37,12 +37,12 @@ const requestEndListner: ServerLifecycleEventsMap['request:end'] = ( worker.events.on('request:end', requestEndListner) worker.events.on('response:mocked', async (response, request, requestId) => { - const body = await response.text() + const body = await response.clone().text() console.warn(`[response:mocked] ${body} ${requestId}`) }) worker.events.on('response:bypass', async (response, request, requestId) => { - const body = await response.text() + const body = await response.clone().text() console.warn(`[response:bypass] ${body} ${requestId}`) }) From 0f08330b6c9f800917c615026e3560d1ce79d40e Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 7 Mar 2023 17:44:20 +0100 Subject: [PATCH 085/210] chore: use node v18.14.2 internally --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index e3cdc6cb0..e8b25b544 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v18.8.0 \ No newline at end of file +v18.14.2 \ No newline at end of file From a9cd280529b42df21bc519d4132964f7a2807b43 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 7 Mar 2023 17:44:37 +0100 Subject: [PATCH 086/210] test: unskip form-data node test --- package.json | 2 +- test/node/rest-api/request/body/body-form-data.node.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b08c2869f..9753aa25a 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "build": "cross-env NODE_ENV=production tsup", "test": "pnpm test:unit && pnpm test:node && pnpm test:browser", "test:unit": "cross-env BABEL_ENV=test jest --maxWorkers=3", - "test:node": "jest --config=./test/jest.config.js", + "test:node": "jest --config=./test/jest.config.js --forceExit", "test:browser": "playwright test -c ./test/browser/playwright.config.ts", "test:ts": "ts-node test/typings/run.ts", "prepare": "pnpm simple-git-hooks init", diff --git a/test/node/rest-api/request/body/body-form-data.node.test.ts b/test/node/rest-api/request/body/body-form-data.node.test.ts index f50ed51ff..874d78705 100644 --- a/test/node/rest-api/request/body/body-form-data.node.test.ts +++ b/test/node/rest-api/request/body/body-form-data.node.test.ts @@ -19,7 +19,7 @@ afterAll(() => { server.close() }) -test.skip('reads FormData request body', async () => { +test('reads FormData request body', async () => { // Note that creating a `FormData` instance in Node/JSDOM differs // from the same instance in a real browser. Follow the instructions // of your `fetch` polyfill to learn more. From a3699143e1991b0d99df4e6875c5e820c5f36925 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 21 Mar 2023 11:53:09 +0100 Subject: [PATCH 087/210] fix: update "strict-event-emitter" to 0.5.0 --- package.json | 4 +- pnpm-lock.yaml | 473 +++++++++++++++++++++++++------------------------ 2 files changed, 246 insertions(+), 231 deletions(-) diff --git a/package.json b/package.json index 07dedb1ec..daa12531c 100644 --- a/package.json +++ b/package.json @@ -122,7 +122,7 @@ "node-fetch": "^2.6.7", "outvariant": "^1.3.0", "path-to-regexp": "^6.2.0", - "strict-event-emitter": "^0.4.3", + "strict-event-emitter": "^0.5.0", "type-fest": "^2.19.0", "yargs": "^17.3.1" }, @@ -169,7 +169,7 @@ "simple-git-hooks": "^2.8.0", "statuses": "^2.0.0", "ts-node": "^10.9.1", - "tsup": "^5.12.8", + "tsup": "^6.7.0", "typescript": "^5.0.2", "undici": "^5.20.0", "url-loader": "^4.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0211fa65f..8742d2728 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -62,9 +62,9 @@ specifiers: rimraf: ^3.0.2 simple-git-hooks: ^2.8.0 statuses: ^2.0.0 - strict-event-emitter: ^0.4.3 + strict-event-emitter: ^0.5.0 ts-node: ^10.9.1 - tsup: ^5.12.8 + tsup: ^6.7.0 type-fest: ^2.19.0 typescript: ^5.0.2 undici: ^5.20.0 @@ -92,7 +92,7 @@ dependencies: node-fetch: 2.6.9 outvariant: 1.3.0 path-to-regexp: 6.2.1 - strict-event-emitter: 0.4.6 + strict-event-emitter: 0.5.0 type-fest: 2.19.0 yargs: 17.7.0 @@ -139,7 +139,7 @@ devDependencies: simple-git-hooks: 2.8.1 statuses: 2.0.1 ts-node: 10.9.1_t5sr3jk75kpujtfkvzpazlosxa - tsup: 5.12.9_4s7jzcjqpdttwnwh3e3glkuq6y + tsup: 6.7.0_4s7jzcjqpdttwnwh3e3glkuq6y typescript: 5.0.2 undici: 5.20.0 url-loader: 4.1.1_webpack@5.75.0 @@ -1586,6 +1586,15 @@ packages: dev: true optional: true + /@esbuild/android-arm/0.17.12: + resolution: {integrity: sha512-E/sgkvwoIfj4aMAPL2e35VnUJspzVYl7+M1B2cqeubdBhADV4uPon0KCc8p2G+LqSJ6i8ocYPCqY3A4GGq0zkQ==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm64/0.16.17: resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} engines: {node: '>=12'} @@ -1595,6 +1604,15 @@ packages: dev: true optional: true + /@esbuild/android-arm64/0.17.12: + resolution: {integrity: sha512-WQ9p5oiXXYJ33F2EkE3r0FRDFVpEdcDiwNX3u7Xaibxfx6vQE0Sb8ytrfQsA5WO6kDn6mDfKLh6KrPBjvkk7xA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-x64/0.16.17: resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} engines: {node: '>=12'} @@ -1604,6 +1622,15 @@ packages: dev: true optional: true + /@esbuild/android-x64/0.17.12: + resolution: {integrity: sha512-m4OsaCr5gT+se25rFPHKQXARMyAehHTQAz4XX1Vk3d27VtqiX0ALMBPoXZsGaB6JYryCLfgGwUslMqTfqeLU0w==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-arm64/0.16.17: resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} engines: {node: '>=12'} @@ -1613,6 +1640,15 @@ packages: dev: true optional: true + /@esbuild/darwin-arm64/0.17.12: + resolution: {integrity: sha512-O3GCZghRIx+RAN0NDPhyyhRgwa19MoKlzGonIb5hgTj78krqp9XZbYCvFr9N1eUxg0ZQEpiiZ4QvsOQwBpP+lg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-x64/0.16.17: resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} engines: {node: '>=12'} @@ -1622,6 +1658,15 @@ packages: dev: true optional: true + /@esbuild/darwin-x64/0.17.12: + resolution: {integrity: sha512-5D48jM3tW27h1qjaD9UNRuN+4v0zvksqZSPZqeSWggfMlsVdAhH3pwSfQIFJwcs9QJ9BRibPS4ViZgs3d2wsCA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-arm64/0.16.17: resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} engines: {node: '>=12'} @@ -1631,6 +1676,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-arm64/0.17.12: + resolution: {integrity: sha512-OWvHzmLNTdF1erSvrfoEBGlN94IE6vCEaGEkEH29uo/VoONqPnoDFfShi41Ew+yKimx4vrmmAJEGNoyyP+OgOQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-x64/0.16.17: resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} engines: {node: '>=12'} @@ -1640,6 +1694,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-x64/0.17.12: + resolution: {integrity: sha512-A0Xg5CZv8MU9xh4a+7NUpi5VHBKh1RaGJKqjxe4KG87X+mTjDE6ZvlJqpWoeJxgfXHT7IMP9tDFu7IZ03OtJAw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm/0.16.17: resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} engines: {node: '>=12'} @@ -1649,6 +1712,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm/0.17.12: + resolution: {integrity: sha512-WsHyJ7b7vzHdJ1fv67Yf++2dz3D726oO3QCu8iNYik4fb5YuuReOI9OtA+n7Mk0xyQivNTPbl181s+5oZ38gyA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm64/0.16.17: resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} engines: {node: '>=12'} @@ -1658,6 +1730,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm64/0.17.12: + resolution: {integrity: sha512-cK3AjkEc+8v8YG02hYLQIQlOznW+v9N+OI9BAFuyqkfQFR+DnDLhEM5N8QRxAUz99cJTo1rLNXqRrvY15gbQUg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ia32/0.16.17: resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} engines: {node: '>=12'} @@ -1667,10 +1748,10 @@ packages: dev: true optional: true - /@esbuild/linux-loong64/0.14.54: - resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==} + /@esbuild/linux-ia32/0.17.12: + resolution: {integrity: sha512-jdOBXJqcgHlah/nYHnj3Hrnl9l63RjtQ4vn9+bohjQPI2QafASB5MtHAoEv0JQHVb/xYQTFOeuHnNYE1zF7tYw==} engines: {node: '>=12'} - cpu: [loong64] + cpu: [ia32] os: [linux] requiresBuild: true dev: true @@ -1685,6 +1766,15 @@ packages: dev: true optional: true + /@esbuild/linux-loong64/0.17.12: + resolution: {integrity: sha512-GTOEtj8h9qPKXCyiBBnHconSCV9LwFyx/gv3Phw0pa25qPYjVuuGZ4Dk14bGCfGX3qKF0+ceeQvwmtI+aYBbVA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-mips64el/0.16.17: resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} engines: {node: '>=12'} @@ -1694,6 +1784,15 @@ packages: dev: true optional: true + /@esbuild/linux-mips64el/0.17.12: + resolution: {integrity: sha512-o8CIhfBwKcxmEENOH9RwmUejs5jFiNoDw7YgS0EJTF6kgPgcqLFjgoc5kDey5cMHRVCIWc6kK2ShUePOcc7RbA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ppc64/0.16.17: resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} engines: {node: '>=12'} @@ -1703,6 +1802,15 @@ packages: dev: true optional: true + /@esbuild/linux-ppc64/0.17.12: + resolution: {integrity: sha512-biMLH6NR/GR4z+ap0oJYb877LdBpGac8KfZoEnDiBKd7MD/xt8eaw1SFfYRUeMVx519kVkAOL2GExdFmYnZx3A==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-riscv64/0.16.17: resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} engines: {node: '>=12'} @@ -1712,6 +1820,15 @@ packages: dev: true optional: true + /@esbuild/linux-riscv64/0.17.12: + resolution: {integrity: sha512-jkphYUiO38wZGeWlfIBMB72auOllNA2sLfiZPGDtOBb1ELN8lmqBrlMiucgL8awBw1zBXN69PmZM6g4yTX84TA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-s390x/0.16.17: resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} engines: {node: '>=12'} @@ -1721,6 +1838,15 @@ packages: dev: true optional: true + /@esbuild/linux-s390x/0.17.12: + resolution: {integrity: sha512-j3ucLdeY9HBcvODhCY4b+Ds3hWGO8t+SAidtmWu/ukfLLG/oYDMaA+dnugTVAg5fnUOGNbIYL9TOjhWgQB8W5g==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-x64/0.16.17: resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} engines: {node: '>=12'} @@ -1730,6 +1856,15 @@ packages: dev: true optional: true + /@esbuild/linux-x64/0.17.12: + resolution: {integrity: sha512-uo5JL3cgaEGotaqSaJdRfFNSCUJOIliKLnDGWaVCgIKkHxwhYMm95pfMbWZ9l7GeW9kDg0tSxcy9NYdEtjwwmA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/netbsd-x64/0.16.17: resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} engines: {node: '>=12'} @@ -1739,6 +1874,15 @@ packages: dev: true optional: true + /@esbuild/netbsd-x64/0.17.12: + resolution: {integrity: sha512-DNdoRg8JX+gGsbqt2gPgkgb00mqOgOO27KnrWZtdABl6yWTST30aibGJ6geBq3WM2TIeW6COs5AScnC7GwtGPg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/openbsd-x64/0.16.17: resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} engines: {node: '>=12'} @@ -1748,6 +1892,15 @@ packages: dev: true optional: true + /@esbuild/openbsd-x64/0.17.12: + resolution: {integrity: sha512-aVsENlr7B64w8I1lhHShND5o8cW6sB9n9MUtLumFlPhG3elhNWtE7M1TFpj3m7lT3sKQUMkGFjTQBrvDDO1YWA==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/sunos-x64/0.16.17: resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} engines: {node: '>=12'} @@ -1757,6 +1910,15 @@ packages: dev: true optional: true + /@esbuild/sunos-x64/0.17.12: + resolution: {integrity: sha512-qbHGVQdKSwi0JQJuZznS4SyY27tYXYF0mrgthbxXrZI3AHKuRvU+Eqbg/F0rmLDpW/jkIZBlCO1XfHUBMNJ1pg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-arm64/0.16.17: resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} engines: {node: '>=12'} @@ -1766,6 +1928,15 @@ packages: dev: true optional: true + /@esbuild/win32-arm64/0.17.12: + resolution: {integrity: sha512-zsCp8Ql+96xXTVTmm6ffvoTSZSV2B/LzzkUXAY33F/76EajNw1m+jZ9zPfNJlJ3Rh4EzOszNDHsmG/fZOhtqDg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-ia32/0.16.17: resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} engines: {node: '>=12'} @@ -1775,6 +1946,15 @@ packages: dev: true optional: true + /@esbuild/win32-ia32/0.17.12: + resolution: {integrity: sha512-FfrFjR4id7wcFYOdqbDfDET3tjxCozUgbqdkOABsSFzoZGFC92UK7mg4JKRc/B3NNEf1s2WHxJ7VfTdVDPN3ng==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-x64/0.16.17: resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} engines: {node: '>=12'} @@ -1784,6 +1964,15 @@ packages: dev: true optional: true + /@esbuild/win32-x64/0.17.12: + resolution: {integrity: sha512-JOOxw49BVZx2/5tW3FqkdjSD/5gXYeVGPDcB0lvap0gLQshkh1Nyel1QazC+wNxus3xPlsYAgqU1BUmrmCvWtw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/0.4.3: resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -3697,13 +3886,13 @@ packages: base64-js: 1.5.1 ieee754: 1.2.1 - /bundle-require/3.1.2_esbuild@0.14.54: - resolution: {integrity: sha512-Of6l6JBAxiyQ5axFxUM6dYeP/W7X2Sozeo/4EYB9sJhL+dqL7TKjg+shwxp6jlu/6ZSERfsYtIpSJ1/x3XkAEA==} + /bundle-require/4.0.1_esbuild@0.17.12: + resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: - esbuild: '>=0.13' + esbuild: '>=0.17' dependencies: - esbuild: 0.14.54 + esbuild: 0.17.12 load-tsconfig: 0.2.3 dev: true @@ -4748,132 +4937,6 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild-android-64/0.14.54: - resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /esbuild-android-arm64/0.14.54: - resolution: {integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /esbuild-darwin-64/0.14.54: - resolution: {integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /esbuild-darwin-arm64/0.14.54: - resolution: {integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /esbuild-freebsd-64/0.14.54: - resolution: {integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-freebsd-arm64/0.14.54: - resolution: {integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-32/0.14.54: - resolution: {integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-64/0.14.54: - resolution: {integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-arm/0.14.54: - resolution: {integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-arm64/0.14.54: - resolution: {integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-mips64le/0.14.54: - resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-ppc64le/0.14.54: - resolution: {integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-riscv64/0.14.54: - resolution: {integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-s390x/0.14.54: - resolution: {integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - /esbuild-loader/2.21.0_webpack@5.75.0: resolution: {integrity: sha512-k7ijTkCT43YBSZ6+fBCW1Gin7s46RrJ0VQaM8qA7lq7W+OLsGgtLyFV8470FzYi/4TeDexniTBTPTwZUnXXR5g==} peerDependencies: @@ -4888,89 +4951,6 @@ packages: webpack-sources: 1.4.3 dev: true - /esbuild-netbsd-64/0.14.54: - resolution: {integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-openbsd-64/0.14.54: - resolution: {integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-sunos-64/0.14.54: - resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /esbuild-windows-32/0.14.54: - resolution: {integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /esbuild-windows-64/0.14.54: - resolution: {integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /esbuild-windows-arm64/0.14.54: - resolution: {integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /esbuild/0.14.54: - resolution: {integrity: sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/linux-loong64': 0.14.54 - esbuild-android-64: 0.14.54 - esbuild-android-arm64: 0.14.54 - esbuild-darwin-64: 0.14.54 - esbuild-darwin-arm64: 0.14.54 - esbuild-freebsd-64: 0.14.54 - esbuild-freebsd-arm64: 0.14.54 - esbuild-linux-32: 0.14.54 - esbuild-linux-64: 0.14.54 - esbuild-linux-arm: 0.14.54 - esbuild-linux-arm64: 0.14.54 - esbuild-linux-mips64le: 0.14.54 - esbuild-linux-ppc64le: 0.14.54 - esbuild-linux-riscv64: 0.14.54 - esbuild-linux-s390x: 0.14.54 - esbuild-netbsd-64: 0.14.54 - esbuild-openbsd-64: 0.14.54 - esbuild-sunos-64: 0.14.54 - esbuild-windows-32: 0.14.54 - esbuild-windows-64: 0.14.54 - esbuild-windows-arm64: 0.14.54 - dev: true - /esbuild/0.16.17: resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==} engines: {node: '>=12'} @@ -5001,6 +4981,36 @@ packages: '@esbuild/win32-x64': 0.16.17 dev: true + /esbuild/0.17.12: + resolution: {integrity: sha512-bX/zHl7Gn2CpQwcMtRogTTBf9l1nl+H6R8nUbjk+RuKqAE3+8FDulLA+pHvX7aA7Xe07Iwa+CWvy9I8Y2qqPKQ==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.17.12 + '@esbuild/android-arm64': 0.17.12 + '@esbuild/android-x64': 0.17.12 + '@esbuild/darwin-arm64': 0.17.12 + '@esbuild/darwin-x64': 0.17.12 + '@esbuild/freebsd-arm64': 0.17.12 + '@esbuild/freebsd-x64': 0.17.12 + '@esbuild/linux-arm': 0.17.12 + '@esbuild/linux-arm64': 0.17.12 + '@esbuild/linux-ia32': 0.17.12 + '@esbuild/linux-loong64': 0.17.12 + '@esbuild/linux-mips64el': 0.17.12 + '@esbuild/linux-ppc64': 0.17.12 + '@esbuild/linux-riscv64': 0.17.12 + '@esbuild/linux-s390x': 0.17.12 + '@esbuild/linux-x64': 0.17.12 + '@esbuild/netbsd-x64': 0.17.12 + '@esbuild/openbsd-x64': 0.17.12 + '@esbuild/sunos-x64': 0.17.12 + '@esbuild/win32-arm64': 0.17.12 + '@esbuild/win32-ia32': 0.17.12 + '@esbuild/win32-x64': 0.17.12 + dev: true + /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -8742,9 +8752,9 @@ packages: glob: 7.2.3 dev: true - /rollup/2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} - engines: {node: '>=10.0.0'} + /rollup/3.20.0: + resolution: {integrity: sha512-YsIfrk80NqUDrxrjWPXUa7PWvAfegZEXHuPsEZg58fGCdjL1I9C1i/NaG+L+27kxxwkrG/QEDEQc8s/ynXWWGQ==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: fsevents: 2.3.2 @@ -9334,6 +9344,10 @@ packages: resolution: {integrity: sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==} dev: false + /strict-event-emitter/0.5.0: + resolution: {integrity: sha512-sqnMpVJLSB3daNO6FcvsEk4Mq5IJeAwDeH80DP1S8+pgxrF6yZnE1+VeapesGled7nEcIkz1Ax87HzaIy+02kA==} + dev: false + /string-argv/0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} engines: {node: '>=0.6.19'} @@ -9788,13 +9802,14 @@ packages: /tslib/2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - /tsup/5.12.9_4s7jzcjqpdttwnwh3e3glkuq6y: - resolution: {integrity: sha512-dUpuouWZYe40lLufo64qEhDpIDsWhRbr2expv5dHEMjwqeKJS2aXA/FPqs1dxO4T6mBojo7rvo3jP9NNzaKyDg==} + /tsup/6.7.0_4s7jzcjqpdttwnwh3e3glkuq6y: + resolution: {integrity: sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==} + engines: {node: '>=14.18'} hasBin: true peerDependencies: '@swc/core': ^1 postcss: ^8.4.12 - typescript: ^4.1.0 + typescript: '>=4.1.0' peerDependenciesMeta: '@swc/core': optional: true @@ -9804,17 +9819,17 @@ packages: optional: true dependencies: '@swc/core': 1.3.35 - bundle-require: 3.1.2_esbuild@0.14.54 + bundle-require: 4.0.1_esbuild@0.17.12 cac: 6.7.14 chokidar: 3.4.1 debug: 4.3.4 - esbuild: 0.14.54 + esbuild: 0.17.12 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 postcss-load-config: 3.1.4_ts-node@10.9.1 resolve-from: 5.0.0 - rollup: 2.79.1 + rollup: 3.20.0 source-map: 0.8.0-beta.0 sucrase: 3.29.0 tree-kill: 1.2.2 From 37617c8e1dfd936847d147ee95bcbf29e7f45f60 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 21 Mar 2023 11:54:39 +0100 Subject: [PATCH 088/210] chore(release): v0.0.0-fetch.rc-7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index daa12531c..2481900ca 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-6", + "version": "0.0.0-fetch.rc-7", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/node/index.js", "types": "./lib/node/index.d.ts", From bedcb2c52dbbd7ca3d9024de3af51fa94999036d Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 24 Mar 2023 15:33:48 +0100 Subject: [PATCH 089/210] chore(release): v0.0.0-fetch.rc-8 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fa5fe5f77..861bbfa2e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-7", + "version": "0.0.0-fetch.rc-8", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/node/index.js", "types": "./lib/node/index.d.ts", From c4367a57366bc98c3a265a5be0855fe60d591095 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 30 Mar 2023 19:23:13 +0200 Subject: [PATCH 090/210] fix: migrate to "@open-draft/until@2" --- cli/init.js | 6 +++--- config/copyServiceWorker.ts | 12 ++++++------ package.json | 2 +- pnpm-lock.yaml | 5 ++--- src/setupWorker/start/createStartHandler.ts | 6 +++--- src/setupWorker/start/utils/getWorkerInstance.ts | 10 +++++----- src/utils/handleRequest.ts | 12 ++++++------ 7 files changed, 26 insertions(+), 27 deletions(-) diff --git a/cli/init.js b/cli/init.js index 16a0f312f..aed4f8600 100755 --- a/cli/init.js +++ b/cli/init.js @@ -21,14 +21,14 @@ module.exports = async function init(args) { if (!dirExists) { // Try to create the directory if it doesn't exist - const [createDirectoryError] = await until(() => + const createDirectoryResult = await until(() => fs.promises.mkdir(absolutePublicDir, { recursive: true }), ) invariant( - createDirectoryError == null, + createDirectoryResult.error == null, 'Failed to create a Service Worker at "%s": directory does not exist and could not be created.\nMake sure to include a relative path to the root directory of your server.\n\nSee the original error below:\n%s', absolutePublicDir, - createDirectoryError, + createDirectoryResult.error, ) } diff --git a/config/copyServiceWorker.ts b/config/copyServiceWorker.ts index 264ed4da2..1520e89dd 100644 --- a/config/copyServiceWorker.ts +++ b/config/copyServiceWorker.ts @@ -16,11 +16,11 @@ export default async function copyServiceWorker( ): Promise { console.log('Compiling Service Worker...') - const [readError, fileContent] = await until(() => + const readFileResult = await until(() => fs.promises.readFile(sourceFilePath, 'utf8'), ) - if (readError) { + if (readFileResult.error) { throw new Error('Failed to read file.\n${readError.message}') } @@ -36,16 +36,16 @@ export default async function copyServiceWorker( fs.readFileSync(path.resolve(__dirname, '..', 'package.json'), 'utf8'), ) - const nextFileContent = fileContent + const nextFileContent = readFileResult.data .replace('', checksum) .replace('', packageJson.version) - const [writeFileError] = await until(() => + const writeFileResult = await until(() => fs.promises.writeFile(destFilePath, nextFileContent), ) - if (writeFileError) { - throw new Error(`Failed to write file.\n${writeFileError.message}`) + if (writeFileResult.error) { + throw new Error(`Failed to write file.\n${writeFileResult.error.message}`) } console.log('Service Worker copied to: %s', cyan(destFilePath)) diff --git a/package.json b/package.json index 861bbfa2e..0bbc3d522 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,7 @@ "dependencies": { "@mswjs/cookies": "^0.2.2", "@mswjs/interceptors": "^0.22.6", - "@open-draft/until": "^1.0.3", + "@open-draft/until": "^2.0.0", "@types/cookie": "^0.4.1", "@types/js-levenshtein": "^1.1.1", "chalk": "4.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4c6149289..f755514a2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,7 +11,7 @@ specifiers: '@mswjs/cookies': ^0.2.2 '@mswjs/interceptors': ^0.22.6 '@open-draft/test-server': ^0.4.2 - '@open-draft/until': ^1.0.3 + '@open-draft/until': ^2.0.0 '@ossjs/release': ^0.4.0 '@playwright/test': ^1.30.0 '@swc/core': ^1.3.35 @@ -77,7 +77,7 @@ specifiers: dependencies: '@mswjs/cookies': 0.2.2 '@mswjs/interceptors': 0.22.9 - '@open-draft/until': 1.0.3 + '@open-draft/until': 2.0.0 '@types/cookie': 0.4.1 '@types/js-levenshtein': 1.1.1 chalk: 4.1.1 @@ -2373,7 +2373,6 @@ packages: /@open-draft/until/2.0.0: resolution: {integrity: sha512-0zJhDjNR0aH1d68TiD6GnYr18dcuOiyTx8xV/I7fp9+z/VQ20e305aObW1/DO5/fiCOztscmvJsCjJDYDhFW6w==} - dev: true /@ossjs/release/0.4.0: resolution: {integrity: sha512-cfW+gk3GdVqjrawkAG8q6MXPmTJouwwPegmBAVNvYvKq/tKQHgluxiueTlNTdJRryI76rpe6y5+EXlHdisrwdg==} diff --git a/src/setupWorker/start/createStartHandler.ts b/src/setupWorker/start/createStartHandler.ts index c7a127593..242a0892f 100644 --- a/src/setupWorker/start/createStartHandler.ts +++ b/src/setupWorker/start/createStartHandler.ts @@ -76,13 +76,13 @@ Please consider using a custom "serviceWorker.url" option to point to the actual }) // Check if the active Service Worker is the latest published one - const [integrityError] = await until(() => + const integrityCheckResult = await until(() => requestIntegrityCheck(context, worker), ) - if (integrityError) { + if (integrityCheckResult.error) { devUtils.error(`\ -Detected outdated Service Worker: ${integrityError.message} +Detected outdated Service Worker: ${integrityCheckResult.error.message} The mocking is still enabled, but it's highly recommended that you update your Service Worker by running: diff --git a/src/setupWorker/start/utils/getWorkerInstance.ts b/src/setupWorker/start/utils/getWorkerInstance.ts index 56949d806..90fab7481 100644 --- a/src/setupWorker/start/utils/getWorkerInstance.ts +++ b/src/setupWorker/start/utils/getWorkerInstance.ts @@ -50,7 +50,7 @@ export const getWorkerInstance = async ( } // When the Service Worker wasn't found, register it anew and return the reference. - const [error, instance] = await until( + const registrationResult = await until( async () => { const registration = await navigator.serviceWorker.register(url, options) return [ @@ -63,8 +63,8 @@ export const getWorkerInstance = async ( ) // Handle Service Worker registration errors. - if (error) { - const isWorkerMissing = error.message.includes('(404)') + if (registrationResult.error) { + const isWorkerMissing = registrationResult.error.message.includes('(404)') // Produce a custom error message when given a non-existing Service Worker url. // Suggest developers to check their setup. @@ -85,10 +85,10 @@ Learn more about creating the Service Worker script: https://mswjs.io/docs/cli/i throw new Error( devUtils.formatMessage( 'Failed to register the Service Worker:\n\n%s', - error.message, + registrationResult.error.message, ), ) } - return instance + return registrationResult.data } diff --git a/src/utils/handleRequest.ts b/src/utils/handleRequest.ts index a814365a9..4c06ecbca 100644 --- a/src/utils/handleRequest.ts +++ b/src/utils/handleRequest.ts @@ -54,7 +54,7 @@ export async function handleRequest( } // Resolve a mocked response from the list of request handlers. - const [lookupError, lookupResult] = await until(() => { + const lookupResult = await until(() => { return getResponse( request, handlers, @@ -62,13 +62,13 @@ export async function handleRequest( ) }) - if (lookupError) { + if (lookupResult.error) { // Allow developers to react to unhandled exceptions in request handlers. - emitter.emit('unhandledException', lookupError, request, requestId) - throw lookupError + emitter.emit('unhandledException', lookupResult.error, request, requestId) + throw lookupResult.error } - const { handler, response } = lookupResult + const { handler, response } = lookupResult.data // When there's no handler for the request, consider it unhandled. // Allow the developer to react to such cases. @@ -119,7 +119,7 @@ Expected response resolver to return a mocked response Object, but got %s. The o emitter.emit('request:match', request, requestId) const requiredLookupResult = - lookupResult as RequiredDeep + lookupResult.data as RequiredDeep const transformedResponse = handleRequestOptions?.transformResponse?.(response) || From c5d66001734df799dd8997b7ca5a7e7cd976cef7 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 30 Mar 2023 19:43:29 +0200 Subject: [PATCH 091/210] chore: update to "@mswjs/interceptors@0.22.10" --- package.json | 2 +- pnpm-lock.yaml | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 0bbc3d522..c07d74041 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "sideEffects": false, "dependencies": { "@mswjs/cookies": "^0.2.2", - "@mswjs/interceptors": "^0.22.6", + "@mswjs/interceptors": "^0.22.10", "@open-draft/until": "^2.0.0", "@types/cookie": "^0.4.1", "@types/js-levenshtein": "^1.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f755514a2..d78f21017 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,7 +9,7 @@ specifiers: '@commitlint/cli': ^16.1.0 '@commitlint/config-conventional': ^16.0.0 '@mswjs/cookies': ^0.2.2 - '@mswjs/interceptors': ^0.22.6 + '@mswjs/interceptors': ^0.22.10 '@open-draft/test-server': ^0.4.2 '@open-draft/until': ^2.0.0 '@ossjs/release': ^0.4.0 @@ -76,7 +76,7 @@ specifiers: dependencies: '@mswjs/cookies': 0.2.2 - '@mswjs/interceptors': 0.22.9 + '@mswjs/interceptors': 0.22.10 '@open-draft/until': 2.0.0 '@types/cookie': 0.4.1 '@types/js-levenshtein': 1.1.1 @@ -2312,12 +2312,12 @@ packages: set-cookie-parser: 2.5.1 dev: false - /@mswjs/interceptors/0.22.9: - resolution: {integrity: sha512-U+CBfa9nrpu2p14I8Q3+bTL5IN1+wHGYSD/HpepSBAPONpucek6g67S+qaG8+qFL+At1pll2DhgJ6w7SEFC59g==} + /@mswjs/interceptors/0.22.10: + resolution: {integrity: sha512-Dapt96ciy7Qg6e/QRgrzI58AD2+xhkPkhOuTmLVVRuoxFAttft8itRHdNaF4o2BSDfswOn8SI8isqECSe1yq7g==} engines: {node: '>=18'} dependencies: '@open-draft/deferred-promise': 2.1.0 - '@open-draft/until': 1.0.3 + '@open-draft/until': 2.0.0 '@types/debug': 4.1.7 debug: 4.3.4 headers-polyfill: 3.1.2 @@ -2370,6 +2370,7 @@ packages: /@open-draft/until/1.0.3: resolution: {integrity: sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==} + dev: true /@open-draft/until/2.0.0: resolution: {integrity: sha512-0zJhDjNR0aH1d68TiD6GnYr18dcuOiyTx8xV/I7fp9+z/VQ20e305aObW1/DO5/fiCOztscmvJsCjJDYDhFW6w==} From 472a35892ee5d4d75ee66b6d59ce99f605e19923 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 30 Mar 2023 22:39:43 +0200 Subject: [PATCH 092/210] chore: update to "page-with@0.6.1" --- package.json | 2 +- pnpm-lock.yaml | 14 +++++--------- test/browser/playwright.extend.ts | 2 +- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index c07d74041..6a65746e8 100644 --- a/package.json +++ b/package.json @@ -162,7 +162,7 @@ "jest-environment-jsdom": "^29.4.3", "json-bigint": "^1.0.0", "lint-staged": "^13.0.3", - "page-with": "^0.5.0", + "page-with": "^0.6.1", "prettier": "^2.7.1", "regenerator-runtime": "^0.13.9", "rimraf": "^3.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d78f21017..8bb232986 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -55,7 +55,7 @@ specifiers: lint-staged: ^13.0.3 node-fetch: ^2.6.7 outvariant: ^1.4.0 - page-with: ^0.5.0 + page-with: ^0.6.1 path-to-regexp: ^6.2.0 prettier: ^2.7.1 regenerator-runtime: ^0.13.9 @@ -132,7 +132,7 @@ devDependencies: jest-environment-jsdom: 29.4.3 json-bigint: 1.0.0 lint-staged: 13.1.2 - page-with: 0.5.1_@swc+core@1.3.35 + page-with: 0.6.1_@swc+core@1.3.35 prettier: 2.8.4 regenerator-runtime: 0.13.11 rimraf: 3.0.2 @@ -2368,10 +2368,6 @@ packages: - utf-8-validate dev: true - /@open-draft/until/1.0.3: - resolution: {integrity: sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==} - dev: true - /@open-draft/until/2.0.0: resolution: {integrity: sha512-0zJhDjNR0aH1d68TiD6GnYr18dcuOiyTx8xV/I7fp9+z/VQ20e305aObW1/DO5/fiCOztscmvJsCjJDYDhFW6w==} @@ -8076,10 +8072,10 @@ packages: engines: {node: '>=6'} dev: true - /page-with/0.5.1_@swc+core@1.3.35: - resolution: {integrity: sha512-830oKHY2kfhPuc3vsaaeqrwCH1FkOhopFQ0JmSPObGI4yVZQLYYpRW4frNP4hYyuxVgC0zbwMqr+Z4ESgDX5Sw==} + /page-with/0.6.1_@swc+core@1.3.35: + resolution: {integrity: sha512-5J58fSpc8CKonUWCPsh8b2LctFrNSOpXQ8O3tB+/iJvixOQf1qHp4+cDLiIVsl/WiuheXdZTzMcuR0KLQMaWcg==} dependencies: - '@open-draft/until': 1.0.3 + '@open-draft/until': 2.0.0 '@types/debug': 4.1.7 '@types/express': 4.17.17 '@types/mustache': 4.2.2 diff --git a/test/browser/playwright.extend.ts b/test/browser/playwright.extend.ts index 8c9bd4086..1e9aa092e 100644 --- a/test/browser/playwright.extend.ts +++ b/test/browser/playwright.extend.ts @@ -14,7 +14,7 @@ import { WebpackHttpServer, } from 'webpack-http-server' import { waitFor } from '../support/waitFor' -import { WorkerConsole } from './setup/WorkerConsole' +import { WorkerConsole } from './setup/workerConsole' import { getWebpackServer } from './setup/webpackHttpServer' export interface TestFixtures { From 7c6c9d94528d54c5018fc0af9f48bc570750dd17 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 11 Apr 2023 19:47:55 +0200 Subject: [PATCH 093/210] feat: split the library into "core", "browser" and "node" (#1584) * feat: split library modules * chore(getCallFrame): update "BUILD_FRAME" * chore: fix "node" types path * chore: replace worker checksum in the core bundle * chore: externalize root-level "core" imports * test: map "~/core" imports in unit tests * test(getCallFrame): reflect new output structure in test stack traces * chore(getCallFrame): treat "lib/core" as library asset * chore: force browser resolution in "*.mocks.ts" files * fix: export "LifeCycleEventsMap" type from the core * chore: import "setupServer" from "msw" * chore: use "msw" import for "rest" type tests * chore: use node 18 for type tests on ci * fix: node exports paths * chore: move browser utils to new directory * chore: validate package.json exports on ci * chore: enforce ".mjs" extension in relative imports * chore: split "core" overrides and ".mjs" enforcing * chore: skip extension check for cjs outputs * chore: enforce ".js" for cjs relative imports --- .github/workflows/ci.yml | 42 +--- .github/workflows/compat.yml | 72 ++++++ config/plugins/esbuild/copyWorkerPlugin.ts | 6 - .../esbuild/forceEsmExtensionsPlugin.ts | 54 ++++ .../esbuild/resolveCoreImportsPlugin.ts | 24 ++ config/replaceCoreImports.js | 21 ++ config/scripts/patch-ts.js | 29 +++ config/scripts/validate-esm.js | 237 ++++++++++++++++++ jest.config.js | 3 + node/package.json | 6 +- package.json | 29 ++- pnpm-lock.yaml | 231 ++++++++++------- src/browser/index.ts | 12 +- src/{ => browser}/setupWorker/glossary.ts | 8 +- .../setupWorker/setupWorker.node.test.ts | 0 src/{ => browser}/setupWorker/setupWorker.ts | 10 +- .../start/createFallbackRequestListener.ts | 4 +- .../setupWorker/start/createFallbackStart.ts | 0 .../start/createRequestListener.ts | 12 +- .../start/createResponseListener.ts | 2 +- .../setupWorker/start/createStartHandler.ts | 4 +- .../start/utils/createMessageChannel.ts | 0 .../setupWorker/start/utils/enableMocking.ts | 2 +- .../start/utils/getWorkerByRegistration.ts | 0 .../start/utils/getWorkerInstance.ts | 4 +- .../start/utils/prepareStartHandler.test.ts | 0 .../start/utils/prepareStartHandler.ts | 4 +- .../start/utils/printStartMessage.test.ts | 0 .../start/utils/printStartMessage.ts | 2 +- .../start/utils/validateWorkerScope.ts | 2 +- .../setupWorker/stop/createFallbackStop.ts | 0 .../setupWorker/stop/createStop.ts | 2 +- .../stop/utils/printStopMessage.test.ts | 0 .../stop/utils/printStopMessage.ts | 2 +- .../utils/deferNetworkRequestsUntil.test.ts | 0 .../utils/deferNetworkRequestsUntil.ts | 0 .../utils}/getAbsoluteWorkerUrl.test.ts | 0 .../utils}/getAbsoluteWorkerUrl.ts | 0 .../utils}/parseWorkerRequest.ts | 2 +- .../utils}/pruneGetRequestBody.test.ts | 0 .../utils}/pruneGetRequestBody.ts | 2 +- .../utils}/requestIntegrityCheck.ts | 2 +- src/{ => core}/HttpResponse.test.ts | 0 src/{ => core}/HttpResponse.ts | 0 src/{ => core}/NetworkError.ts | 0 src/{ => core}/SetupApi.ts | 0 src/{ => core}/bypass.test.ts | 0 src/{ => core}/bypass.ts | 0 src/{ => core}/delay.ts | 0 src/{ => core}/graphql.test.ts | 0 src/{ => core}/graphql.ts | 0 .../handlers/GraphQLHandler.test.ts | 0 src/{ => core}/handlers/GraphQLHandler.ts | 0 src/{ => core}/handlers/RequestHandler.ts | 4 +- src/{ => core}/handlers/RestHandler.test.ts | 0 src/{ => core}/handlers/RestHandler.ts | 0 src/{ => core}/index.ts | 3 +- src/{ => core}/passthrough.test.ts | 0 src/{ => core}/passthrough.ts | 0 src/{ => core}/rest.spec.ts | 0 src/{ => core}/rest.ts | 0 src/{ => core}/sharedOptions.ts | 0 src/{ => core}/typeUtils.ts | 0 .../utils/HttpResponse/createResponse.test.ts | 0 .../utils/HttpResponse/createResponse.ts | 0 .../utils/HttpResponse/decorators.ts | 0 src/{ => core}/utils/getResponse.ts | 0 src/{ => core}/utils/handleRequest.test.ts | 0 src/{ => core}/utils/handleRequest.ts | 0 src/{ => core}/utils/internal/checkGlobals.ts | 0 src/{ => core}/utils/internal/devUtils.ts | 0 .../utils/internal/getCallFrame.test.ts | 24 +- src/{ => core}/utils/internal/getCallFrame.ts | 2 +- .../utils/internal/isIterable.test.ts | 0 src/{ => core}/utils/internal/isIterable.ts | 0 .../utils/internal/isObject.test.ts | 0 src/{ => core}/utils/internal/isObject.ts | 0 .../utils/internal/isStringEqual.test.ts | 0 .../utils/internal/isStringEqual.ts | 0 .../utils/internal/jsonParse.test.ts | 0 src/{ => core}/utils/internal/jsonParse.ts | 0 .../utils/internal/mergeRight.test.ts | 0 src/{ => core}/utils/internal/mergeRight.ts | 0 .../internal/parseGraphQLRequest.test.ts | 0 .../utils/internal/parseGraphQLRequest.ts | 0 .../utils/internal/parseMultipartData.test.ts | 0 .../utils/internal/parseMultipartData.ts | 0 .../utils/internal/pipeEvents.test.ts | 6 +- src/{ => core}/utils/internal/pipeEvents.ts | 0 .../utils/internal/requestHandlerUtils.ts | 0 .../utils/internal/toReadonlyArray.test.ts | 0 .../utils/internal/toReadonlyArray.ts | 0 .../utils/internal/tryCatch.test.ts | 0 src/{ => core}/utils/internal/tryCatch.ts | 0 src/{ => core}/utils/internal/uuidv4.ts | 0 .../utils/logging/getStatusCodeColor.test.ts | 0 .../utils/logging/getStatusCodeColor.ts | 0 .../utils/logging/getTimestamp.test.ts | 0 src/{ => core}/utils/logging/getTimestamp.ts | 0 .../utils/logging/serializeRequest.test.ts | 0 .../utils/logging/serializeRequest.ts | 0 .../utils/logging/serializeResponse.test.ts | 0 .../utils/logging/serializeResponse.ts | 0 .../utils/matching/matchRequestUrl.test.ts | 0 .../utils/matching/matchRequestUrl.ts | 0 .../utils/matching/normalizePath.node.test.ts | 0 .../utils/matching/normalizePath.test.ts | 0 .../utils/matching/normalizePath.ts | 0 .../request/getPublicUrlFromRequest.test.ts | 0 .../utils/request/getPublicUrlFromRequest.ts | 0 .../request/getRequestCookies.node.test.ts | 0 .../utils/request/getRequestCookies.test.ts | 2 +- .../utils/request/getRequestCookies.ts | 0 .../utils/request/onUnhandledRequest.test.ts | 0 .../utils/request/onUnhandledRequest.ts | 4 +- .../utils/request/readResponseCookies.ts | 0 src/{ => core}/utils/toResponseInit.ts | 0 src/{ => core}/utils/url/cleanUrl.test.ts | 0 src/{ => core}/utils/url/cleanUrl.ts | 0 .../utils/url/getAbsoluteUrl.node.test.ts | 0 .../utils/url/getAbsoluteUrl.test.ts | 0 src/{ => core}/utils/url/getAbsoluteUrl.ts | 0 .../utils/url/isAbsoluteUrl.test.ts | 0 src/{ => core}/utils/url/isAbsoluteUrl.ts | 0 src/native/index.ts | 2 +- src/node/SetupServerApi.ts | 14 +- src/node/glossary.ts | 4 +- src/node/index.ts | 2 + src/node/setupServer.ts | 2 +- src/utils/internal/StrictBroadcastChannel.ts | 27 -- test/browser/graphql-api/logging.test.ts | 10 +- .../msw-api/exception-handling.mocks.ts | 2 +- .../life-cycle-events/on.mocks.ts | 10 +- .../setup-worker/life-cycle-events/on.test.ts | 8 +- test/browser/rest-api/logging.test.ts | 4 +- test/browser/tsconfig.json | 11 + .../rest-api/cookies-inheritance.node.test.ts | 5 +- test/typings/rest.test-d.ts | 2 +- tsconfig.json | 7 +- tsup.config.ts | 70 ++++-- 140 files changed, 760 insertions(+), 295 deletions(-) create mode 100644 .github/workflows/compat.yml create mode 100644 config/plugins/esbuild/forceEsmExtensionsPlugin.ts create mode 100644 config/plugins/esbuild/resolveCoreImportsPlugin.ts create mode 100644 config/replaceCoreImports.js create mode 100644 config/scripts/patch-ts.js create mode 100644 config/scripts/validate-esm.js rename src/{ => browser}/setupWorker/glossary.ts (97%) rename src/{ => browser}/setupWorker/setupWorker.node.test.ts (100%) rename src/{ => browser}/setupWorker/setupWorker.ts (95%) rename src/{ => browser}/setupWorker/start/createFallbackRequestListener.ts (93%) rename src/{ => browser}/setupWorker/start/createFallbackStart.ts (100%) rename src/{ => browser}/setupWorker/start/createRequestListener.ts (90%) rename src/{ => browser}/setupWorker/start/createResponseListener.ts (97%) rename src/{ => browser}/setupWorker/start/createStartHandler.ts (97%) rename src/{ => browser}/setupWorker/start/utils/createMessageChannel.ts (100%) rename src/{ => browser}/setupWorker/start/utils/enableMocking.ts (94%) rename src/{ => browser}/setupWorker/start/utils/getWorkerByRegistration.ts (100%) rename src/{ => browser}/setupWorker/start/utils/getWorkerInstance.ts (96%) rename src/{ => browser}/setupWorker/start/utils/prepareStartHandler.test.ts (100%) rename src/{ => browser}/setupWorker/start/utils/prepareStartHandler.ts (90%) rename src/{ => browser}/setupWorker/start/utils/printStartMessage.test.ts (100%) rename src/{ => browser}/setupWorker/start/utils/printStartMessage.ts (93%) rename src/{ => browser}/setupWorker/start/utils/validateWorkerScope.ts (91%) rename src/{ => browser}/setupWorker/stop/createFallbackStop.ts (100%) rename src/{ => browser}/setupWorker/stop/createStop.ts (94%) rename src/{ => browser}/setupWorker/stop/utils/printStopMessage.test.ts (100%) rename src/{ => browser}/setupWorker/stop/utils/printStopMessage.ts (79%) rename src/{ => browser}/utils/deferNetworkRequestsUntil.test.ts (100%) rename src/{ => browser}/utils/deferNetworkRequestsUntil.ts (100%) rename src/{utils/url => browser/utils}/getAbsoluteWorkerUrl.test.ts (100%) rename src/{utils/url => browser/utils}/getAbsoluteWorkerUrl.ts (100%) rename src/{utils/request => browser/utils}/parseWorkerRequest.ts (83%) rename src/{utils/request => browser/utils}/pruneGetRequestBody.test.ts (100%) rename src/{utils/request => browser/utils}/pruneGetRequestBody.ts (89%) rename src/{utils/internal => browser/utils}/requestIntegrityCheck.ts (90%) rename src/{ => core}/HttpResponse.test.ts (100%) rename src/{ => core}/HttpResponse.ts (100%) rename src/{ => core}/NetworkError.ts (100%) rename src/{ => core}/SetupApi.ts (100%) rename src/{ => core}/bypass.test.ts (100%) rename src/{ => core}/bypass.ts (100%) rename src/{ => core}/delay.ts (100%) rename src/{ => core}/graphql.test.ts (100%) rename src/{ => core}/graphql.ts (100%) rename src/{ => core}/handlers/GraphQLHandler.test.ts (100%) rename src/{ => core}/handlers/GraphQLHandler.ts (100%) rename src/{ => core}/handlers/RequestHandler.ts (98%) rename src/{ => core}/handlers/RestHandler.test.ts (100%) rename src/{ => core}/handlers/RestHandler.ts (100%) rename src/{ => core}/index.ts (94%) rename src/{ => core}/passthrough.test.ts (100%) rename src/{ => core}/passthrough.ts (100%) rename src/{ => core}/rest.spec.ts (100%) rename src/{ => core}/rest.ts (100%) rename src/{ => core}/sharedOptions.ts (100%) rename src/{ => core}/typeUtils.ts (100%) rename src/{ => core}/utils/HttpResponse/createResponse.test.ts (100%) rename src/{ => core}/utils/HttpResponse/createResponse.ts (100%) rename src/{ => core}/utils/HttpResponse/decorators.ts (100%) rename src/{ => core}/utils/getResponse.ts (100%) rename src/{ => core}/utils/handleRequest.test.ts (100%) rename src/{ => core}/utils/handleRequest.ts (100%) rename src/{ => core}/utils/internal/checkGlobals.ts (100%) rename src/{ => core}/utils/internal/devUtils.ts (100%) rename src/{ => core}/utils/internal/getCallFrame.test.ts (87%) rename src/{ => core}/utils/internal/getCallFrame.ts (91%) rename src/{ => core}/utils/internal/isIterable.test.ts (100%) rename src/{ => core}/utils/internal/isIterable.ts (100%) rename src/{ => core}/utils/internal/isObject.test.ts (100%) rename src/{ => core}/utils/internal/isObject.ts (100%) rename src/{ => core}/utils/internal/isStringEqual.test.ts (100%) rename src/{ => core}/utils/internal/isStringEqual.ts (100%) rename src/{ => core}/utils/internal/jsonParse.test.ts (100%) rename src/{ => core}/utils/internal/jsonParse.ts (100%) rename src/{ => core}/utils/internal/mergeRight.test.ts (100%) rename src/{ => core}/utils/internal/mergeRight.ts (100%) rename src/{ => core}/utils/internal/parseGraphQLRequest.test.ts (100%) rename src/{ => core}/utils/internal/parseGraphQLRequest.ts (100%) rename src/{ => core}/utils/internal/parseMultipartData.test.ts (100%) rename src/{ => core}/utils/internal/parseMultipartData.ts (100%) rename src/{ => core}/utils/internal/pipeEvents.test.ts (74%) rename src/{ => core}/utils/internal/pipeEvents.ts (100%) rename src/{ => core}/utils/internal/requestHandlerUtils.ts (100%) rename src/{ => core}/utils/internal/toReadonlyArray.test.ts (100%) rename src/{ => core}/utils/internal/toReadonlyArray.ts (100%) rename src/{ => core}/utils/internal/tryCatch.test.ts (100%) rename src/{ => core}/utils/internal/tryCatch.ts (100%) rename src/{ => core}/utils/internal/uuidv4.ts (100%) rename src/{ => core}/utils/logging/getStatusCodeColor.test.ts (100%) rename src/{ => core}/utils/logging/getStatusCodeColor.ts (100%) rename src/{ => core}/utils/logging/getTimestamp.test.ts (100%) rename src/{ => core}/utils/logging/getTimestamp.ts (100%) rename src/{ => core}/utils/logging/serializeRequest.test.ts (100%) rename src/{ => core}/utils/logging/serializeRequest.ts (100%) rename src/{ => core}/utils/logging/serializeResponse.test.ts (100%) rename src/{ => core}/utils/logging/serializeResponse.ts (100%) rename src/{ => core}/utils/matching/matchRequestUrl.test.ts (100%) rename src/{ => core}/utils/matching/matchRequestUrl.ts (100%) rename src/{ => core}/utils/matching/normalizePath.node.test.ts (100%) rename src/{ => core}/utils/matching/normalizePath.test.ts (100%) rename src/{ => core}/utils/matching/normalizePath.ts (100%) rename src/{ => core}/utils/request/getPublicUrlFromRequest.test.ts (100%) rename src/{ => core}/utils/request/getPublicUrlFromRequest.ts (100%) rename src/{ => core}/utils/request/getRequestCookies.node.test.ts (100%) rename src/{ => core}/utils/request/getRequestCookies.test.ts (95%) rename src/{ => core}/utils/request/getRequestCookies.ts (100%) rename src/{ => core}/utils/request/onUnhandledRequest.test.ts (100%) rename src/{ => core}/utils/request/onUnhandledRequest.ts (97%) rename src/{ => core}/utils/request/readResponseCookies.ts (100%) rename src/{ => core}/utils/toResponseInit.ts (100%) rename src/{ => core}/utils/url/cleanUrl.test.ts (100%) rename src/{ => core}/utils/url/cleanUrl.ts (100%) rename src/{ => core}/utils/url/getAbsoluteUrl.node.test.ts (100%) rename src/{ => core}/utils/url/getAbsoluteUrl.test.ts (100%) rename src/{ => core}/utils/url/getAbsoluteUrl.ts (100%) rename src/{ => core}/utils/url/isAbsoluteUrl.test.ts (100%) rename src/{ => core}/utils/url/isAbsoluteUrl.ts (100%) delete mode 100644 src/utils/internal/StrictBroadcastChannel.ts create mode 100644 test/browser/tsconfig.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5bd642634..1029c106f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ jobs: - name: Checkout uses: actions/checkout@v3 - - name: Setup Node.js + - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: 18 @@ -26,7 +26,7 @@ jobs: version: 7.12 - name: Install dependencies - run: pnpm install --frozen-lockfile + run: pnpm install - name: Unit tests run: pnpm test:unit @@ -46,41 +46,3 @@ jobs: with: name: playwright-report path: test/browser/test-results - - # Checks the library's compatibility with different - # TypeScript versions to discover type regressions. - typescript: - runs-on: macos-latest - # Skip TypeScript compatibility check on "main". - # A merged pull request implies passing "typescript" job. - if: github.ref != 'refs/heads/main' - strategy: - fail-fast: false - matrix: - ts: ['4.4', '4.5', '4.6', '4.7', '4.8', '4.9', '5.0'] - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: 16 - - - uses: pnpm/action-setup@v2 - with: - version: 7.12 - - - name: Install dependencies - run: pnpm install - - - name: Install TypeScript ${{ matrix.ts }} - run: pnpm add typescript@${{ matrix.ts }} - - - name: Build - run: pnpm build - - - name: Typings tests - run: | - pnpm tsc --version - pnpm test:ts diff --git a/.github/workflows/compat.yml b/.github/workflows/compat.yml new file mode 100644 index 000000000..83a62634c --- /dev/null +++ b/.github/workflows/compat.yml @@ -0,0 +1,72 @@ +name: compat + +on: + push: + branches: [main] + pull_request: + workflow_dispatch: + +jobs: + # Validate the package.json exports and emitted CJS/ESM bundles. + exports: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: 18 + + - name: Set up pnpm + uses: pnpm/action-setup@v2 + with: + version: 7.12 + + - name: Install dependencies + run: pnpm install + + - name: Build + run: pnpm build + + - name: Validate package.json exports + run: pnpm check:exports + + # Checks the library's compatibility with different + # TypeScript versions to discover type regressions. + typescript: + runs-on: macos-latest + # Skip TypeScript compatibility check on "main". + # A merged pull request implies passing "typescript" job. + if: github.ref != 'refs/heads/main' + strategy: + fail-fast: false + matrix: + ts: ['4.4', '4.5', '4.6', '4.7', '4.8', '4.9', '5.0'] + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: 18 + + - uses: pnpm/action-setup@v2 + with: + version: 7.12 + + - name: Install dependencies + run: pnpm install + + - name: Install TypeScript ${{ matrix.ts }} + run: pnpm add typescript@${{ matrix.ts }} + + - name: Build + run: pnpm build + + - name: Typings tests + run: | + pnpm tsc --version + pnpm test:ts diff --git a/config/plugins/esbuild/copyWorkerPlugin.ts b/config/plugins/esbuild/copyWorkerPlugin.ts index 3414398d3..720671b0c 100644 --- a/config/plugins/esbuild/copyWorkerPlugin.ts +++ b/config/plugins/esbuild/copyWorkerPlugin.ts @@ -55,12 +55,6 @@ export function copyWorkerPlugin(checksum: string): Plugin { // const workerContents = await fs.readFile(workerSourcePath, 'utf8') // const checksum = getChecksum(workerContents) - // Inject the global "SERVICE_WORKER_CHECKSUM" variable - // for runtime worker integrity check. - build.initialOptions.define = { - SERVICE_WORKER_CHECKSUM: JSON.stringify(checksum), - } - build.onLoad({ filter: /mockServiceWorker\.js$/ }, async () => { return { // Prevent the worker script from being transpiled. diff --git a/config/plugins/esbuild/forceEsmExtensionsPlugin.ts b/config/plugins/esbuild/forceEsmExtensionsPlugin.ts new file mode 100644 index 000000000..61e007409 --- /dev/null +++ b/config/plugins/esbuild/forceEsmExtensionsPlugin.ts @@ -0,0 +1,54 @@ +import { Plugin } from 'esbuild' + +export function forceEsmExtensionsPlugin(): Plugin { + return { + name: 'forceEsmExtensionsPlugin', + setup(build) { + const isEsm = build.initialOptions.format === 'esm' + + build.onEnd(async (result) => { + if (result.errors.length > 0) { + return + } + + for (const outputFile of result.outputFiles || []) { + const fileContents = outputFile.text + const nextFileContents = modifyRelativeImports(fileContents, isEsm) + + outputFile.contents = Buffer.from(nextFileContents) + } + }) + }, + } +} + +const CJS_RELATIVE_IMPORT_EXP = /require\(["'](\..+)["']\)(;)?/gm +const ESM_RELATIVE_IMPORT_EXP = /from ["'](\..+)["'](;)?/gm + +function modifyRelativeImports(contents: string, isEsm: boolean): string { + const extension = isEsm ? '.mjs' : '.js' + const importExpression = isEsm + ? ESM_RELATIVE_IMPORT_EXP + : CJS_RELATIVE_IMPORT_EXP + + return contents.replace( + importExpression, + (_, importPath, maybeSemicolon = '') => { + if (importPath.endsWith('.') || importPath.endsWith('/')) { + return isEsm + ? `from '${importPath}/index${extension}'${maybeSemicolon}` + : `require("${importPath}/index${extension}")${maybeSemicolon}` + } + + if (importPath.endsWith(extension)) { + return isEsm + ? `from '${importPath}'${maybeSemicolon}` + : `require("${importPath}")${maybeSemicolon}` + } + + return isEsm + ? `from '${importPath}${extension}'${maybeSemicolon}` + : `require("${importPath}${extension}")${maybeSemicolon}` + }, + ) +} diff --git a/config/plugins/esbuild/resolveCoreImportsPlugin.ts b/config/plugins/esbuild/resolveCoreImportsPlugin.ts new file mode 100644 index 000000000..1aa30ee8e --- /dev/null +++ b/config/plugins/esbuild/resolveCoreImportsPlugin.ts @@ -0,0 +1,24 @@ +import { Plugin } from 'esbuild' + +const { replaceCoreImports } = require('../../replaceCoreImports') + +export function resolveCoreImportsPlugin(): Plugin { + return { + name: 'resolveCoreImportsPlugin', + setup(build) { + build.onEnd(async (result) => { + if (result.errors.length > 0) { + return + } + + for (const outputFile of result.outputFiles || []) { + const isEsm = outputFile.path.endsWith('.mjs') + const fileContents = outputFile.text + const nextFileContents = replaceCoreImports(fileContents, isEsm) + + outputFile.contents = Buffer.from(nextFileContents) + } + }) + }, + } +} diff --git a/config/replaceCoreImports.js b/config/replaceCoreImports.js new file mode 100644 index 000000000..3087485cf --- /dev/null +++ b/config/replaceCoreImports.js @@ -0,0 +1,21 @@ +function replaceCoreImports(fileContents, isEsm) { + const importPattern = isEsm + ? /from ["'](~\/core(.*))["'](;)?$/gm + : /require\(["'](~\/core(.*))["']\)(;)?/gm + + return fileContents.replace( + importPattern, + (_, __, maybeSubmodulePath, maybeSemicolon) => { + const submodulePath = maybeSubmodulePath || '/index' + const semicolon = maybeSemicolon || '' + + return isEsm + ? `from "../core${submodulePath}"${semicolon}` + : `require("../core${submodulePath}")${semicolon}` + }, + ) +} + +module.exports = { + replaceCoreImports, +} diff --git a/config/scripts/patch-ts.js b/config/scripts/patch-ts.js new file mode 100644 index 000000000..fa25c7895 --- /dev/null +++ b/config/scripts/patch-ts.js @@ -0,0 +1,29 @@ +const fs = require('fs') +const path = require('path') +const { replaceCoreImports } = require('../replaceCoreImports') + +async function patchTypeDefs() { + const typeDefsPaths = [ + path.resolve(__dirname, '../..', 'lib/browser/index.d.ts'), + path.resolve(__dirname, '../..', 'lib/node/index.d.ts'), + path.resolve(__dirname, '../..', 'lib/native/index.d.ts'), + ] + + for (const typeDefsPath of typeDefsPaths) { + if (!fs.existsSync(typeDefsPath)) { + continue + } + + const fileContents = fs.readFileSync(typeDefsPath, 'utf8') + + // Treat ".d.ts" files as ESM to replace "import" statements. + // Force no extension on the ".d.ts" imports. + const nextFileContents = replaceCoreImports(fileContents, true) + + fs.writeFileSync(typeDefsPath, nextFileContents, 'utf8') + + console.log('Successfully patched at "%s"!', typeDefsPath) + } +} + +patchTypeDefs() diff --git a/config/scripts/validate-esm.js b/config/scripts/validate-esm.js new file mode 100644 index 000000000..045e3f7fa --- /dev/null +++ b/config/scripts/validate-esm.js @@ -0,0 +1,237 @@ +const fs = require('fs') +const path = require('path') +const { invariant } = require('outvariant') + +const ROOT_PATH = path.resolve(__dirname, '../..') + +function fromRoot(...paths) { + return path.resolve(ROOT_PATH, ...paths) +} + +const PKG_JSON_PATH = fromRoot('package.json') +const PKG_JSON = require(PKG_JSON_PATH) + +function validatePackageExports() { + const { exports } = PKG_JSON + + // Validate the "main", "browser", and "types" root fields. + invariant('main' in PKG_JSON, 'Missing "main" field in package.json') + invariant('browser' in PKG_JSON, 'Missing "browser" field in package.json') + invariant('types' in PKG_JSON, 'Missing "types" field in package.json') + + invariant( + fs.existsSync(fromRoot(PKG_JSON.main)), + 'The "main" field points at a non-existing path at "%s"', + PKG_JSON.main, + ) + invariant( + fs.existsSync(fromRoot(PKG_JSON.browser)), + 'The "browser" field points at a non-existing path at "%s"', + PKG_JSON.browser, + ) + invariant( + fs.existsSync(fromRoot(PKG_JSON.types)), + 'The "types" field points at a non-existing path at "%s"', + PKG_JSON.types, + ) + + // The "exports" key must be present. + invariant(exports, 'package.json must have an "exports" field') + + // The "exports" must list expected paths. + const expectedExportPaths = ['.', './node', './package.json', './native'] + expectedExportPaths.forEach((exportPath) => { + invariant(exportPath in exports, 'Missing exports path "%s"', exportPath) + }) + + // Must describe the root export properly. + const rootExport = exports['.'] + const expectedRootExportPaths = ['browser', 'node'] + + expectedRootExportPaths.forEach((rootExportPath) => { + invariant( + rootExportPath in rootExport, + 'Missing root export path "%s"', + rootExportPath, + ) + }) + + const rootExportKeys = Object.keys(rootExport) + + invariant( + rootExportKeys.includes('browser'), + 'Missing "browser" root-level export', + ) + invariant( + rootExportKeys.includes('node'), + 'Missing "import" root-level export', + ) + + // Listing the "browser" field first is crucial when forcing TS + // to resolve the "browser" field first. + invariant( + rootExportKeys[0] === 'browser', + 'Must list the "browser" field first in the root-level exports', + ) + + validateExportConditions(`exports['.'].browser`, rootExport.browser) + validateBundle(rootExport.browser.require, false) + validateBundle(rootExport.browser.import, true) + validateTypeDefs(rootExport.browser.types) + + validateExportConditions(`exports['.'].node`, rootExport.node) + validateBundle(rootExport.node.require, false) + validateBundle(rootExport.node.import, true) + validateTypeDefs(rootExport.node.types) + + // Validate "./node" exports. + const nodeExports = exports['./node'] + validateExportConditions(`exports['./node']`, nodeExports) + invariant( + nodeExports.browser === null, + 'The "node" export must set the "browser" field to null', + ) + validateBundle(nodeExports.require, false) + validateBundle(nodeExports.import, true) + validateTypeDefs(nodeExports.types) + + // Validate "./native" exports. + const nativeExports = exports['./native'] + validateExportConditions(`exports['./native']`, nativeExports) + invariant( + nativeExports.browser === null, + 'The "native" export must set the "browser" field to null', + ) + validateBundle(nativeExports.require, false) + validateBundle(nativeExports.import, true) + validateTypeDefs(nativeExports.types) + + // Validate "./package.json" exports. + validateExportConditions( + `exports['./package.json]`, + exports['./package.json'], + ) + + console.log('✅ Validated package.json exports') +} + +function validateExportConditions(pointer, conditions) { + if (typeof conditions === 'string') { + invariant( + fs.existsSync(conditions), + 'Expected a valid path at "%s" but got %s', + pointer, + conditions, + ) + return + } + + const keys = Object.keys(conditions) + + if (conditions[keys[0]] !== null) { + invariant(keys[0] === 'types', 'FS') + } + + // Ensure that paths point to existing files. + keys.forEach((key) => { + const relativeExportPath = conditions[key] + + if (relativeExportPath === null) { + return + } + + const exportPath = fromRoot(relativeExportPath) + invariant( + fs.existsSync(exportPath), + 'Expected the path at "%s" ("%s") to point at existing file but got %s', + pointer, + key, + exportPath, + ) + }) +} + +const ESM_CORE_IMPORT_EXP = /from ["'](..\/)+core(.*)["'];?$/gm +const CJS_CORE_IMPORT_EXP = /require\(["'](..\/)+core(.*)["']\);?$/gm + +function getCodeSnippetAt(contents, index) { + return contents.slice(index - 100, index + 50) +} + +function validateBundle(bundlePath, isEsm = false) { + const expectedExtension = isEsm ? '.mjs' : '.js' + + invariant( + bundlePath.endsWith(expectedExtension), + 'Failed to validate bundle: provided bundle path does not point at an ".mjs" file: %s', + bundlePath, + ) + + const absoluteBundlePath = fromRoot(bundlePath) + const contents = fs.readFileSync(absoluteBundlePath, 'utf8') + + // The "~/core" imports must be overwritten on the bundler level. + invariant( + !contents.includes('~/core'), + 'Bundle at "%s" includes unresolved "~/core" imports:\n\n%s', + bundlePath, + getCodeSnippetAt(contents, contents.indexOf('~/core')), + ) + + // The "core" imports must end with the explicit ".mjs" extension. + const coreImportsMatches = + contents.matchAll(isEsm ? ESM_CORE_IMPORT_EXP : CJS_CORE_IMPORT_EXP) || [] + + for (const match of coreImportsMatches) { + const [, backslashes, relativeImportPath] = match + + invariant( + backslashes === '../', + 'Found a "core" import with incorrect nesting level', + ) + + invariant( + relativeImportPath !== '', + 'Found a "core" import without an explicit path at "%s":\n\n%s', + absoluteBundlePath, + getCodeSnippetAt(contents, match.index), + ) + + if (isEsm) { + // Ensure that all relative imports in the ESM bundle end with ".mjs". + // This way bundlers can distinguish between the referenced modules + // since the "core" directory contains both ".js" and ".mjs" modules on the same level. + invariant( + relativeImportPath.endsWith('.mjs'), + `Found a "core" import without "${expectedExtension}" extension at "%s":\n\n%s`, + absoluteBundlePath, + getCodeSnippetAt(contents, match.index), + ) + } + } + + console.log('✅ Validated bundle at "%s"', bundlePath) +} + +function validateTypeDefs(typeDefsPath) { + const absoluteTypeDefsPath = fromRoot(typeDefsPath) + invariant( + fs.existsSync(absoluteTypeDefsPath), + 'Failed to validate type definitions at "%s": file does not exist', + absoluteTypeDefsPath, + ) + + const contents = fs.readFileSync(absoluteTypeDefsPath, 'utf8') + + // The "~/core" imports must also be replaced with relative paths on build. + invariant( + !contents.includes('~/core'), + 'Found unresolved "~/core" imports at "%s":\n\n%s', + absoluteTypeDefsPath, + getCodeSnippetAt(contents, contents.indexOf('~/core')), + ) + + console.log('✅ Validated type definitions at "%s"', typeDefsPath) +} + +validatePackageExports() diff --git a/jest.config.js b/jest.config.js index 68450831a..6feb897fd 100644 --- a/jest.config.js +++ b/jest.config.js @@ -7,4 +7,7 @@ module.exports = { testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.(j|t)sx?$', moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'], setupFiles: ['./jest.setup.js'], + moduleNameMapper: { + '^~/core(/.*)?$': '/src/core/$1', + }, } diff --git a/node/package.json b/node/package.json index 90873a259..395e07575 100644 --- a/node/package.json +++ b/node/package.json @@ -1,6 +1,6 @@ { "browser": null, - "main": "../lib/node/node/index.js", - "module": "../lib/node/node/index.mjs", - "types": "../lib/node/node/index.d.ts" + "main": "../lib/node/index.js", + "module": "../lib/node/index.mjs", + "types": "../lib/node/index.d.ts" } diff --git a/package.json b/package.json index 6a65746e8..1b5847286 100644 --- a/package.json +++ b/package.json @@ -7,32 +7,32 @@ "browser": "./lib/browser/index.js", "exports": { ".": { - "node": { - "types": "./lib/node/index.d.ts", - "import": "./lib/node/index.mjs", - "require": "./lib/node/index.js", - "default": "./lib/node/index.js" - }, "browser": { "types": "./lib/browser/index.d.ts", "import": "./lib/browser/index.mjs", "require": "./lib/browser/index.js", "default": "./lib/browser/index.js" + }, + "node": { + "types": "./lib/node/index.d.ts", + "import": "./lib/node/index.mjs", + "require": "./lib/node/index.js", + "default": "./lib/node/index.js" } }, "./native": { "browser": null, "types": "./lib/native/index.d.ts", "import": "./lib/native/index.mjs", - "requier": "./lib/native/index.js", + "require": "./lib/native/index.js", "default": "./lib/native/index.js" }, "./node": { "browser": null, - "types": "./lib/node/node/index.d.ts", - "require": "./lib/node/node/index.js", - "import": "./lib/node/node/index.mjs", - "default": "./lib/node/node/index.mjs" + "types": "./lib/node/index.d.ts", + "require": "./lib/node/index.js", + "import": "./lib/node/index.mjs", + "default": "./lib/node/index.mjs" }, "./package.json": "./package.json" }, @@ -47,7 +47,9 @@ "clean": "rimraf ./lib", "lint": "eslint \"{cli,config,src,test}/**/*.ts\"", "prebuild": "rimraf ./lib", - "build": "cross-env NODE_ENV=production tsup", + "build": "pnpm clean && cross-env NODE_ENV=production tsup && pnpm patch:dts", + "patch:dts": "node \"./config/scripts/patch-ts.js\"", + "check:exports": "node \"./config/scripts/validate-esm.js\"", "test": "pnpm test:unit && pnpm test:node && pnpm test:browser", "test:unit": "cross-env BABEL_ENV=test jest --maxWorkers=3", "test:node": "jest --config=./test/jest.config.js --forceExit", @@ -138,6 +140,7 @@ "@swc/jest": "^0.2.24", "@types/express": "^4.17.17", "@types/fs-extra": "^9.0.13", + "@types/glob": "^8.1.0", "@types/jest": "^29.4.0", "@types/json-bigint": "^1.0.1", "@types/node": "18.x", @@ -151,6 +154,7 @@ "cross-env": "^7.0.3", "cross-fetch": "^3.1.5", "cz-conventional-changelog": "3.3.0", + "esbuild": "^0.17.15", "esbuild-loader": "^2.21.0", "eslint": "^7.30.0", "eslint-config-prettier": "^8.3.0", @@ -158,6 +162,7 @@ "express": "^4.18.2", "fs-extra": "^10.0.0", "fs-teardown": "^0.3.0", + "glob": "^9.3.4", "jest": "^29.4.3", "jest-environment-jsdom": "^29.4.3", "json-bigint": "^1.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8bb232986..26cb8a934 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,6 +19,7 @@ specifiers: '@types/cookie': ^0.4.1 '@types/express': ^4.17.17 '@types/fs-extra': ^9.0.13 + '@types/glob': ^8.1.0 '@types/jest': ^29.4.0 '@types/js-levenshtein': ^1.1.1 '@types/json-bigint': ^1.0.1 @@ -36,6 +37,7 @@ specifiers: cross-env: ^7.0.3 cross-fetch: ^3.1.5 cz-conventional-changelog: 3.3.0 + esbuild: ^0.17.15 esbuild-loader: ^2.21.0 eslint: ^7.30.0 eslint-config-prettier: ^8.3.0 @@ -44,6 +46,7 @@ specifiers: formdata-node: 4.4.1 fs-extra: ^10.0.0 fs-teardown: ^0.3.0 + glob: ^9.3.4 graphql: ^15.0.0 || ^16.0.0 headers-polyfill: ^3.1.2 inquirer: ^8.2.0 @@ -108,6 +111,7 @@ devDependencies: '@swc/jest': 0.2.24_@swc+core@1.3.35 '@types/express': 4.17.17 '@types/fs-extra': 9.0.13 + '@types/glob': 8.1.0 '@types/jest': 29.4.0 '@types/json-bigint': 1.0.1 '@types/node': 18.15.5 @@ -121,6 +125,7 @@ devDependencies: cross-env: 7.0.3 cross-fetch: 3.1.5 cz-conventional-changelog: 3.3.0_@swc+core@1.3.35 + esbuild: 0.17.15 esbuild-loader: 2.21.0_webpack@5.75.0 eslint: 7.32.0 eslint-config-prettier: 8.6.0_eslint@7.32.0 @@ -128,11 +133,12 @@ devDependencies: express: 4.18.2 fs-extra: 10.1.0 fs-teardown: 0.3.2 + glob: 9.3.4 jest: 29.4.3_757mb262zsxkcnuknwfdsckmku jest-environment-jsdom: 29.4.3 json-bigint: 1.0.0 lint-staged: 13.1.2 - page-with: 0.6.1_@swc+core@1.3.35 + page-with: 0.6.1_44e4morsomth5ookbazmyefmhi prettier: 2.8.4 regenerator-runtime: 0.13.11 rimraf: 3.0.2 @@ -143,9 +149,9 @@ devDependencies: typescript: 5.0.2 undici: 5.21.0 url-loader: 4.1.1_webpack@5.75.0 - webpack: 5.75.0_@swc+core@1.3.35 + webpack: 5.75.0_44e4morsomth5ookbazmyefmhi webpack-dev-server: 3.11.3_webpack@5.75.0 - webpack-http-server: 0.5.0_@swc+core@1.3.35 + webpack-http-server: 0.5.0_44e4morsomth5ookbazmyefmhi packages: @@ -1586,8 +1592,8 @@ packages: dev: true optional: true - /@esbuild/android-arm/0.17.12: - resolution: {integrity: sha512-E/sgkvwoIfj4aMAPL2e35VnUJspzVYl7+M1B2cqeubdBhADV4uPon0KCc8p2G+LqSJ6i8ocYPCqY3A4GGq0zkQ==} + /@esbuild/android-arm/0.17.15: + resolution: {integrity: sha512-sRSOVlLawAktpMvDyJIkdLI/c/kdRTOqo8t6ImVxg8yT7LQDUYV5Rp2FKeEosLr6ZCja9UjYAzyRSxGteSJPYg==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -1604,8 +1610,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64/0.17.12: - resolution: {integrity: sha512-WQ9p5oiXXYJ33F2EkE3r0FRDFVpEdcDiwNX3u7Xaibxfx6vQE0Sb8ytrfQsA5WO6kDn6mDfKLh6KrPBjvkk7xA==} + /@esbuild/android-arm64/0.17.15: + resolution: {integrity: sha512-0kOB6Y7Br3KDVgHeg8PRcvfLkq+AccreK///B4Z6fNZGr/tNHX0z2VywCc7PTeWp+bPvjA5WMvNXltHw5QjAIA==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -1622,8 +1628,8 @@ packages: dev: true optional: true - /@esbuild/android-x64/0.17.12: - resolution: {integrity: sha512-m4OsaCr5gT+se25rFPHKQXARMyAehHTQAz4XX1Vk3d27VtqiX0ALMBPoXZsGaB6JYryCLfgGwUslMqTfqeLU0w==} + /@esbuild/android-x64/0.17.15: + resolution: {integrity: sha512-MzDqnNajQZ63YkaUWVl9uuhcWyEyh69HGpMIrf+acR4otMkfLJ4sUCxqwbCyPGicE9dVlrysI3lMcDBjGiBBcQ==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -1640,8 +1646,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64/0.17.12: - resolution: {integrity: sha512-O3GCZghRIx+RAN0NDPhyyhRgwa19MoKlzGonIb5hgTj78krqp9XZbYCvFr9N1eUxg0ZQEpiiZ4QvsOQwBpP+lg==} + /@esbuild/darwin-arm64/0.17.15: + resolution: {integrity: sha512-7siLjBc88Z4+6qkMDxPT2juf2e8SJxmsbNVKFY2ifWCDT72v5YJz9arlvBw5oB4W/e61H1+HDB/jnu8nNg0rLA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -1658,8 +1664,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64/0.17.12: - resolution: {integrity: sha512-5D48jM3tW27h1qjaD9UNRuN+4v0zvksqZSPZqeSWggfMlsVdAhH3pwSfQIFJwcs9QJ9BRibPS4ViZgs3d2wsCA==} + /@esbuild/darwin-x64/0.17.15: + resolution: {integrity: sha512-NbImBas2rXwYI52BOKTW342Tm3LTeVlaOQ4QPZ7XuWNKiO226DisFk/RyPk3T0CKZkKMuU69yOvlapJEmax7cg==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -1676,8 +1682,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64/0.17.12: - resolution: {integrity: sha512-OWvHzmLNTdF1erSvrfoEBGlN94IE6vCEaGEkEH29uo/VoONqPnoDFfShi41Ew+yKimx4vrmmAJEGNoyyP+OgOQ==} + /@esbuild/freebsd-arm64/0.17.15: + resolution: {integrity: sha512-Xk9xMDjBVG6CfgoqlVczHAdJnCs0/oeFOspFap5NkYAmRCT2qTn1vJWA2f419iMtsHSLm+O8B6SLV/HlY5cYKg==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -1694,8 +1700,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64/0.17.12: - resolution: {integrity: sha512-A0Xg5CZv8MU9xh4a+7NUpi5VHBKh1RaGJKqjxe4KG87X+mTjDE6ZvlJqpWoeJxgfXHT7IMP9tDFu7IZ03OtJAw==} + /@esbuild/freebsd-x64/0.17.15: + resolution: {integrity: sha512-3TWAnnEOdclvb2pnfsTWtdwthPfOz7qAfcwDLcfZyGJwm1SRZIMOeB5FODVhnM93mFSPsHB9b/PmxNNbSnd0RQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -1712,8 +1718,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm/0.17.12: - resolution: {integrity: sha512-WsHyJ7b7vzHdJ1fv67Yf++2dz3D726oO3QCu8iNYik4fb5YuuReOI9OtA+n7Mk0xyQivNTPbl181s+5oZ38gyA==} + /@esbuild/linux-arm/0.17.15: + resolution: {integrity: sha512-MLTgiXWEMAMr8nmS9Gigx43zPRmEfeBfGCwxFQEMgJ5MC53QKajaclW6XDPjwJvhbebv+RzK05TQjvH3/aM4Xw==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -1730,8 +1736,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64/0.17.12: - resolution: {integrity: sha512-cK3AjkEc+8v8YG02hYLQIQlOznW+v9N+OI9BAFuyqkfQFR+DnDLhEM5N8QRxAUz99cJTo1rLNXqRrvY15gbQUg==} + /@esbuild/linux-arm64/0.17.15: + resolution: {integrity: sha512-T0MVnYw9KT6b83/SqyznTs/3Jg2ODWrZfNccg11XjDehIved2oQfrX/wVuev9N936BpMRaTR9I1J0tdGgUgpJA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -1748,8 +1754,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32/0.17.12: - resolution: {integrity: sha512-jdOBXJqcgHlah/nYHnj3Hrnl9l63RjtQ4vn9+bohjQPI2QafASB5MtHAoEv0JQHVb/xYQTFOeuHnNYE1zF7tYw==} + /@esbuild/linux-ia32/0.17.15: + resolution: {integrity: sha512-wp02sHs015T23zsQtU4Cj57WiteiuASHlD7rXjKUyAGYzlOKDAjqK6bk5dMi2QEl/KVOcsjwL36kD+WW7vJt8Q==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -1766,8 +1772,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64/0.17.12: - resolution: {integrity: sha512-GTOEtj8h9qPKXCyiBBnHconSCV9LwFyx/gv3Phw0pa25qPYjVuuGZ4Dk14bGCfGX3qKF0+ceeQvwmtI+aYBbVA==} + /@esbuild/linux-loong64/0.17.15: + resolution: {integrity: sha512-k7FsUJjGGSxwnBmMh8d7IbObWu+sF/qbwc+xKZkBe/lTAF16RqxRCnNHA7QTd3oS2AfGBAnHlXL67shV5bBThQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -1784,8 +1790,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el/0.17.12: - resolution: {integrity: sha512-o8CIhfBwKcxmEENOH9RwmUejs5jFiNoDw7YgS0EJTF6kgPgcqLFjgoc5kDey5cMHRVCIWc6kK2ShUePOcc7RbA==} + /@esbuild/linux-mips64el/0.17.15: + resolution: {integrity: sha512-ZLWk6czDdog+Q9kE/Jfbilu24vEe/iW/Sj2d8EVsmiixQ1rM2RKH2n36qfxK4e8tVcaXkvuV3mU5zTZviE+NVQ==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -1802,8 +1808,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64/0.17.12: - resolution: {integrity: sha512-biMLH6NR/GR4z+ap0oJYb877LdBpGac8KfZoEnDiBKd7MD/xt8eaw1SFfYRUeMVx519kVkAOL2GExdFmYnZx3A==} + /@esbuild/linux-ppc64/0.17.15: + resolution: {integrity: sha512-mY6dPkIRAiFHRsGfOYZC8Q9rmr8vOBZBme0/j15zFUKM99d4ILY4WpOC7i/LqoY+RE7KaMaSfvY8CqjJtuO4xg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -1820,8 +1826,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64/0.17.12: - resolution: {integrity: sha512-jkphYUiO38wZGeWlfIBMB72auOllNA2sLfiZPGDtOBb1ELN8lmqBrlMiucgL8awBw1zBXN69PmZM6g4yTX84TA==} + /@esbuild/linux-riscv64/0.17.15: + resolution: {integrity: sha512-EcyUtxffdDtWjjwIH8sKzpDRLcVtqANooMNASO59y+xmqqRYBBM7xVLQhqF7nksIbm2yHABptoioS9RAbVMWVA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -1838,8 +1844,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x/0.17.12: - resolution: {integrity: sha512-j3ucLdeY9HBcvODhCY4b+Ds3hWGO8t+SAidtmWu/ukfLLG/oYDMaA+dnugTVAg5fnUOGNbIYL9TOjhWgQB8W5g==} + /@esbuild/linux-s390x/0.17.15: + resolution: {integrity: sha512-BuS6Jx/ezxFuHxgsfvz7T4g4YlVrmCmg7UAwboeyNNg0OzNzKsIZXpr3Sb/ZREDXWgt48RO4UQRDBxJN3B9Rbg==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -1856,8 +1862,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64/0.17.12: - resolution: {integrity: sha512-uo5JL3cgaEGotaqSaJdRfFNSCUJOIliKLnDGWaVCgIKkHxwhYMm95pfMbWZ9l7GeW9kDg0tSxcy9NYdEtjwwmA==} + /@esbuild/linux-x64/0.17.15: + resolution: {integrity: sha512-JsdS0EgEViwuKsw5tiJQo9UdQdUJYuB+Mf6HxtJSPN35vez1hlrNb1KajvKWF5Sa35j17+rW1ECEO9iNrIXbNg==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -1874,8 +1880,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64/0.17.12: - resolution: {integrity: sha512-DNdoRg8JX+gGsbqt2gPgkgb00mqOgOO27KnrWZtdABl6yWTST30aibGJ6geBq3WM2TIeW6COs5AScnC7GwtGPg==} + /@esbuild/netbsd-x64/0.17.15: + resolution: {integrity: sha512-R6fKjtUysYGym6uXf6qyNephVUQAGtf3n2RCsOST/neIwPqRWcnc3ogcielOd6pT+J0RDR1RGcy0ZY7d3uHVLA==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -1892,8 +1898,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64/0.17.12: - resolution: {integrity: sha512-aVsENlr7B64w8I1lhHShND5o8cW6sB9n9MUtLumFlPhG3elhNWtE7M1TFpj3m7lT3sKQUMkGFjTQBrvDDO1YWA==} + /@esbuild/openbsd-x64/0.17.15: + resolution: {integrity: sha512-mVD4PGc26b8PI60QaPUltYKeSX0wxuy0AltC+WCTFwvKCq2+OgLP4+fFd+hZXzO2xW1HPKcytZBdjqL6FQFa7w==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -1910,8 +1916,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64/0.17.12: - resolution: {integrity: sha512-qbHGVQdKSwi0JQJuZznS4SyY27tYXYF0mrgthbxXrZI3AHKuRvU+Eqbg/F0rmLDpW/jkIZBlCO1XfHUBMNJ1pg==} + /@esbuild/sunos-x64/0.17.15: + resolution: {integrity: sha512-U6tYPovOkw3459t2CBwGcFYfFRjivcJJc1WC8Q3funIwX8x4fP+R6xL/QuTPNGOblbq/EUDxj9GU+dWKX0oWlQ==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -1928,8 +1934,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64/0.17.12: - resolution: {integrity: sha512-zsCp8Ql+96xXTVTmm6ffvoTSZSV2B/LzzkUXAY33F/76EajNw1m+jZ9zPfNJlJ3Rh4EzOszNDHsmG/fZOhtqDg==} + /@esbuild/win32-arm64/0.17.15: + resolution: {integrity: sha512-W+Z5F++wgKAleDABemiyXVnzXgvRFs+GVKThSI+mGgleLWluv0D7Diz4oQpgdpNzh4i2nNDzQtWbjJiqutRp6Q==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -1946,8 +1952,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32/0.17.12: - resolution: {integrity: sha512-FfrFjR4id7wcFYOdqbDfDET3tjxCozUgbqdkOABsSFzoZGFC92UK7mg4JKRc/B3NNEf1s2WHxJ7VfTdVDPN3ng==} + /@esbuild/win32-ia32/0.17.15: + resolution: {integrity: sha512-Muz/+uGgheShKGqSVS1KsHtCyEzcdOn/W/Xbh6H91Etm+wiIfwZaBn1W58MeGtfI8WA961YMHFYTthBdQs4t+w==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -1964,8 +1970,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64/0.17.12: - resolution: {integrity: sha512-JOOxw49BVZx2/5tW3FqkdjSD/5gXYeVGPDcB0lvap0gLQshkh1Nyel1QazC+wNxus3xPlsYAgqU1BUmrmCvWtw==} + /@esbuild/win32-x64/0.17.15: + resolution: {integrity: sha512-DjDa9ywLUUmjhV2Y9wUTIF+1XsmuFGvZoCmOWkli1XcNAh5t25cc7fgsCx4Zi/Uurep3TTLyDiKATgGEg61pkA==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -2678,6 +2684,13 @@ packages: '@types/node': 18.15.5 dev: true + /@types/glob/8.1.0: + resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 18.15.5 + dev: true + /@types/graceful-fs/4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: @@ -3472,7 +3485,7 @@ packages: loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.75.0_@swc+core@1.3.35 + webpack: 5.75.0_44e4morsomth5ookbazmyefmhi dev: true /babel-minify/0.5.2: @@ -3827,6 +3840,12 @@ packages: concat-map: 0.0.1 dev: true + /brace-expansion/2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + /braces/2.3.2_supports-color@6.1.0: resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} engines: {node: '>=0.10.0'} @@ -3882,13 +3901,13 @@ packages: base64-js: 1.5.1 ieee754: 1.2.1 - /bundle-require/4.0.1_esbuild@0.17.12: + /bundle-require/4.0.1_esbuild@0.17.15: resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: esbuild: '>=0.17' dependencies: - esbuild: 0.17.12 + esbuild: 0.17.15 load-tsconfig: 0.2.3 dev: true @@ -4943,7 +4962,7 @@ packages: json5: 2.2.3 loader-utils: 2.0.4 tapable: 2.2.1 - webpack: 5.75.0_@swc+core@1.3.35 + webpack: 5.75.0_44e4morsomth5ookbazmyefmhi webpack-sources: 1.4.3 dev: true @@ -4977,34 +4996,34 @@ packages: '@esbuild/win32-x64': 0.16.17 dev: true - /esbuild/0.17.12: - resolution: {integrity: sha512-bX/zHl7Gn2CpQwcMtRogTTBf9l1nl+H6R8nUbjk+RuKqAE3+8FDulLA+pHvX7aA7Xe07Iwa+CWvy9I8Y2qqPKQ==} + /esbuild/0.17.15: + resolution: {integrity: sha512-LBUV2VsUIc/iD9ME75qhT4aJj0r75abCVS0jakhFzOtR7TQsqQA5w0tZ+KTKnwl3kXE0MhskNdHDh/I5aCR1Zw==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.17.12 - '@esbuild/android-arm64': 0.17.12 - '@esbuild/android-x64': 0.17.12 - '@esbuild/darwin-arm64': 0.17.12 - '@esbuild/darwin-x64': 0.17.12 - '@esbuild/freebsd-arm64': 0.17.12 - '@esbuild/freebsd-x64': 0.17.12 - '@esbuild/linux-arm': 0.17.12 - '@esbuild/linux-arm64': 0.17.12 - '@esbuild/linux-ia32': 0.17.12 - '@esbuild/linux-loong64': 0.17.12 - '@esbuild/linux-mips64el': 0.17.12 - '@esbuild/linux-ppc64': 0.17.12 - '@esbuild/linux-riscv64': 0.17.12 - '@esbuild/linux-s390x': 0.17.12 - '@esbuild/linux-x64': 0.17.12 - '@esbuild/netbsd-x64': 0.17.12 - '@esbuild/openbsd-x64': 0.17.12 - '@esbuild/sunos-x64': 0.17.12 - '@esbuild/win32-arm64': 0.17.12 - '@esbuild/win32-ia32': 0.17.12 - '@esbuild/win32-x64': 0.17.12 + '@esbuild/android-arm': 0.17.15 + '@esbuild/android-arm64': 0.17.15 + '@esbuild/android-x64': 0.17.15 + '@esbuild/darwin-arm64': 0.17.15 + '@esbuild/darwin-x64': 0.17.15 + '@esbuild/freebsd-arm64': 0.17.15 + '@esbuild/freebsd-x64': 0.17.15 + '@esbuild/linux-arm': 0.17.15 + '@esbuild/linux-arm64': 0.17.15 + '@esbuild/linux-ia32': 0.17.15 + '@esbuild/linux-loong64': 0.17.15 + '@esbuild/linux-mips64el': 0.17.15 + '@esbuild/linux-ppc64': 0.17.15 + '@esbuild/linux-riscv64': 0.17.15 + '@esbuild/linux-s390x': 0.17.15 + '@esbuild/linux-x64': 0.17.15 + '@esbuild/netbsd-x64': 0.17.15 + '@esbuild/openbsd-x64': 0.17.15 + '@esbuild/sunos-x64': 0.17.15 + '@esbuild/win32-arm64': 0.17.15 + '@esbuild/win32-ia32': 0.17.15 + '@esbuild/win32-x64': 0.17.15 dev: true /escalade/3.1.1: @@ -5841,6 +5860,16 @@ packages: path-is-absolute: 1.0.1 dev: true + /glob/9.3.4: + resolution: {integrity: sha512-qaSc49hojMOv1EPM4EuyITjDSgSKI0rthoHnvE81tcOi1SCVndHko7auqxdQ14eiQG2NDBJBE86+2xIrbIvrbA==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + fs.realpath: 1.0.0 + minimatch: 8.0.3 + minipass: 4.2.5 + path-scurry: 1.6.3 + dev: true + /global-dirs/0.1.1: resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} engines: {node: '>=4'} @@ -7472,6 +7501,11 @@ packages: yallist: 4.0.0 dev: true + /lru-cache/7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + dev: true + /make-dir/3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -7646,6 +7680,13 @@ packages: brace-expansion: 1.1.11 dev: true + /minimatch/8.0.3: + resolution: {integrity: sha512-tEEvU9TkZgnFDCtpnrEYnPsjT7iUx42aXfs4bzmQ5sMA09/6hZY0jeZcGkXyDagiBOvkUjNo8Viom+Me6+2x7g==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist-options/4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} @@ -7663,6 +7704,11 @@ packages: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true + /minipass/4.2.5: + resolution: {integrity: sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==} + engines: {node: '>=8'} + dev: true + /mixin-deep/1.3.2: resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} engines: {node: '>=0.10.0'} @@ -8072,7 +8118,7 @@ packages: engines: {node: '>=6'} dev: true - /page-with/0.6.1_@swc+core@1.3.35: + /page-with/0.6.1_44e4morsomth5ookbazmyefmhi: resolution: {integrity: sha512-5J58fSpc8CKonUWCPsh8b2LctFrNSOpXQ8O3tB+/iJvixOQf1qHp4+cDLiIVsl/WiuheXdZTzMcuR0KLQMaWcg==} dependencies: '@open-draft/until': 2.0.0 @@ -8087,7 +8133,7 @@ packages: mustache: 4.2.0 playwright: 1.30.0 uuid: 8.3.2 - webpack: 5.75.0_@swc+core@1.3.35 + webpack: 5.75.0_44e4morsomth5ookbazmyefmhi webpack-merge: 5.8.0 transitivePeerDependencies: - '@swc/core' @@ -8173,6 +8219,14 @@ packages: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true + /path-scurry/1.6.3: + resolution: {integrity: sha512-RAmB+n30SlN+HnNx6EbcpoDy9nwdpcGPnEKrJnu6GZoDWBdIjo1UQMVtW2ybtC7LC2oKLcMq8y5g8WnKLiod9g==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 7.18.3 + minipass: 4.2.5 + dev: true + /path-to-regexp/0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: true @@ -9535,7 +9589,7 @@ packages: engines: {node: '>=6'} dev: true - /terser-webpack-plugin/5.3.6_gwpkmym7uf5m6snr3dgsgj5rrq: + /terser-webpack-plugin/5.3.6_7lhzojqiyzh43yiyfexcg3btze: resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -9553,11 +9607,12 @@ packages: dependencies: '@jridgewell/trace-mapping': 0.3.17 '@swc/core': 1.3.35 + esbuild: 0.17.15 jest-worker: 27.5.1 schema-utils: 3.1.1 serialize-javascript: 6.0.1 terser: 5.16.4 - webpack: 5.75.0_@swc+core@1.3.35 + webpack: 5.75.0_44e4morsomth5ookbazmyefmhi dev: true /terser/5.16.4: @@ -9811,11 +9866,11 @@ packages: optional: true dependencies: '@swc/core': 1.3.35 - bundle-require: 4.0.1_esbuild@0.17.12 + bundle-require: 4.0.1_esbuild@0.17.15 cac: 6.7.14 chokidar: 3.4.1 debug: 4.3.4 - esbuild: 0.17.12 + esbuild: 0.17.15 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 @@ -10024,7 +10079,7 @@ packages: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.1.1 - webpack: 5.75.0_@swc+core@1.3.35 + webpack: 5.75.0_44e4morsomth5ookbazmyefmhi dev: true /url-parse/1.5.10: @@ -10163,7 +10218,7 @@ packages: mime: 2.6.0 mkdirp: 0.5.6 range-parser: 1.2.1 - webpack: 5.75.0_@swc+core@1.3.35 + webpack: 5.75.0_44e4morsomth5ookbazmyefmhi webpack-log: 2.0.0 dev: true @@ -10207,7 +10262,7 @@ packages: strip-ansi: 3.0.1 supports-color: 6.1.0 url: 0.11.0 - webpack: 5.75.0_@swc+core@1.3.35 + webpack: 5.75.0_44e4morsomth5ookbazmyefmhi webpack-dev-middleware: 3.7.3_webpack@5.75.0 webpack-log: 2.0.0 ws: 6.2.2 @@ -10217,7 +10272,7 @@ packages: - utf-8-validate dev: true - /webpack-http-server/0.5.0_@swc+core@1.3.35: + /webpack-http-server/0.5.0_44e4morsomth5ookbazmyefmhi: resolution: {integrity: sha512-kyewxAnzmDuZxe09fn/Bb0PeEnaDxHChYKFVsMy4oeBUs9Cyv2j1uEgzQJ7ljPFexLU8ongUS4i4O+e22CeBZQ==} dependencies: '@types/express': 4.17.17 @@ -10226,7 +10281,7 @@ packages: memfs: 3.4.13 mustache: 4.2.0 outvariant: 1.4.0 - webpack: 5.75.0_@swc+core@1.3.35 + webpack: 5.75.0_44e4morsomth5ookbazmyefmhi transitivePeerDependencies: - '@swc/core' - esbuild @@ -10263,7 +10318,7 @@ packages: engines: {node: '>=10.13.0'} dev: true - /webpack/5.75.0_@swc+core@1.3.35: + /webpack/5.75.0_44e4morsomth5ookbazmyefmhi: resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} engines: {node: '>=10.13.0'} hasBin: true @@ -10294,7 +10349,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.1.1 tapable: 2.2.1 - terser-webpack-plugin: 5.3.6_gwpkmym7uf5m6snr3dgsgj5rrq + terser-webpack-plugin: 5.3.6_7lhzojqiyzh43yiyfexcg3btze watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: diff --git a/src/browser/index.ts b/src/browser/index.ts index ad48704ca..48b31d08d 100644 --- a/src/browser/index.ts +++ b/src/browser/index.ts @@ -1,7 +1,7 @@ -// Include the root-level common exports so that the browser bundle -// can export everything from a single module ("msw" import root). -export * from '..' +// Re-export the code MSW API (e.g. "rest", "RequestHandler") because +// they are available from the "msw" (browser) root-level export. +export * from '~/core' -export { setupWorker } from '../setupWorker/setupWorker' -export type { SetupWorker, StartOptions } from '../setupWorker/glossary' -export { SetupWorkerApi } from '../setupWorker/setupWorker' +export { setupWorker } from './setupWorker/setupWorker' +export type { SetupWorker, StartOptions } from './setupWorker/glossary' +export { SetupWorkerApi } from './setupWorker/setupWorker' diff --git a/src/setupWorker/glossary.ts b/src/browser/setupWorker/glossary.ts similarity index 97% rename from src/setupWorker/glossary.ts rename to src/browser/setupWorker/glossary.ts index 65c096901..8a15eb80e 100644 --- a/src/setupWorker/glossary.ts +++ b/src/browser/setupWorker/glossary.ts @@ -3,15 +3,15 @@ import { LifeCycleEventEmitter, LifeCycleEventsMap, SharedOptions, -} from '../sharedOptions' +} from '~/core/sharedOptions' import { ServiceWorkerMessage } from './start/utils/createMessageChannel' import { RequestHandler, RequestHandlerDefaultInfo, -} from '../handlers/RequestHandler' +} from '~/core/handlers/RequestHandler' import type { HttpRequestEventMap, Interceptor } from '@mswjs/interceptors' -import { Path } from '../utils/matching/matchRequestUrl' -import { RequiredDeep } from '../typeUtils' +import { Path } from '~/core/utils/matching/matchRequestUrl' +import { RequiredDeep } from '~/core/typeUtils' export type ResolvedPath = Path | URL diff --git a/src/setupWorker/setupWorker.node.test.ts b/src/browser/setupWorker/setupWorker.node.test.ts similarity index 100% rename from src/setupWorker/setupWorker.node.test.ts rename to src/browser/setupWorker/setupWorker.node.test.ts diff --git a/src/setupWorker/setupWorker.ts b/src/browser/setupWorker/setupWorker.ts similarity index 95% rename from src/setupWorker/setupWorker.ts rename to src/browser/setupWorker/setupWorker.ts index 87c53e452..e772556f3 100644 --- a/src/setupWorker/setupWorker.ts +++ b/src/browser/setupWorker/setupWorker.ts @@ -11,14 +11,14 @@ import { import { createStartHandler } from './start/createStartHandler' import { createStop } from './stop/createStop' import { ServiceWorkerMessage } from './start/utils/createMessageChannel' -import { RequestHandler } from '../handlers/RequestHandler' +import { RequestHandler } from '~/core/handlers/RequestHandler' import { DEFAULT_START_OPTIONS } from './start/utils/prepareStartHandler' import { createFallbackStart } from './start/createFallbackStart' import { createFallbackStop } from './stop/createFallbackStop' -import { devUtils } from '../utils/internal/devUtils' -import { SetupApi } from '../SetupApi' -import { mergeRight } from '../utils/internal/mergeRight' -import { LifeCycleEventsMap } from '../sharedOptions' +import { devUtils } from '~/core/utils/internal/devUtils' +import { SetupApi } from '~/core/SetupApi' +import { mergeRight } from '~/core/utils/internal/mergeRight' +import { LifeCycleEventsMap } from '~/core/sharedOptions' import { SetupWorker } from './glossary' interface Listener { diff --git a/src/setupWorker/start/createFallbackRequestListener.ts b/src/browser/setupWorker/start/createFallbackRequestListener.ts similarity index 93% rename from src/setupWorker/start/createFallbackRequestListener.ts rename to src/browser/setupWorker/start/createFallbackRequestListener.ts index f658568df..d5704b829 100644 --- a/src/setupWorker/start/createFallbackRequestListener.ts +++ b/src/browser/setupWorker/start/createFallbackRequestListener.ts @@ -6,8 +6,8 @@ import { import { FetchInterceptor } from '@mswjs/interceptors/fetch' import { XMLHttpRequestInterceptor } from '@mswjs/interceptors/XMLHttpRequest' import { SetupWorkerInternalContext, StartOptions } from '../glossary' -import type { RequiredDeep } from '../../typeUtils' -import { handleRequest } from '../../utils/handleRequest' +import type { RequiredDeep } from '~/core/typeUtils' +import { handleRequest } from '~/core/utils/handleRequest' export function createFallbackRequestListener( context: SetupWorkerInternalContext, diff --git a/src/setupWorker/start/createFallbackStart.ts b/src/browser/setupWorker/start/createFallbackStart.ts similarity index 100% rename from src/setupWorker/start/createFallbackStart.ts rename to src/browser/setupWorker/start/createFallbackStart.ts diff --git a/src/setupWorker/start/createRequestListener.ts b/src/browser/setupWorker/start/createRequestListener.ts similarity index 90% rename from src/setupWorker/start/createRequestListener.ts rename to src/browser/setupWorker/start/createRequestListener.ts index a6b540f62..a879119ca 100644 --- a/src/setupWorker/start/createRequestListener.ts +++ b/src/browser/setupWorker/start/createRequestListener.ts @@ -7,12 +7,12 @@ import { ServiceWorkerMessage, WorkerChannel, } from './utils/createMessageChannel' -import { NetworkError } from '../../NetworkError' -import { parseWorkerRequest } from '../../utils/request/parseWorkerRequest' -import { handleRequest } from '../../utils/handleRequest' -import { RequiredDeep } from '../../typeUtils' -import { devUtils } from '../../utils/internal/devUtils' -import { toResponseInit } from '../../utils/toResponseInit' +import { NetworkError } from '~/core/NetworkError' +import { parseWorkerRequest } from '../../utils/parseWorkerRequest' +import { handleRequest } from '~/core/utils/handleRequest' +import { RequiredDeep } from '~/core/typeUtils' +import { devUtils } from '~/core/utils/internal/devUtils' +import { toResponseInit } from '~/core/utils/toResponseInit' export const createRequestListener = ( context: SetupWorkerInternalContext, diff --git a/src/setupWorker/start/createResponseListener.ts b/src/browser/setupWorker/start/createResponseListener.ts similarity index 97% rename from src/setupWorker/start/createResponseListener.ts rename to src/browser/setupWorker/start/createResponseListener.ts index 8b2e46da0..966adab13 100644 --- a/src/setupWorker/start/createResponseListener.ts +++ b/src/browser/setupWorker/start/createResponseListener.ts @@ -1,7 +1,7 @@ import { ServiceWorkerIncomingEventsMap, SetupWorkerInternalContext, -} from '../../setupWorker/glossary' +} from '../glossary' import { ServiceWorkerMessage } from './utils/createMessageChannel' export function createResponseListener(context: SetupWorkerInternalContext) { diff --git a/src/setupWorker/start/createStartHandler.ts b/src/browser/setupWorker/start/createStartHandler.ts similarity index 97% rename from src/setupWorker/start/createStartHandler.ts rename to src/browser/setupWorker/start/createStartHandler.ts index 242a0892f..2ad650604 100644 --- a/src/setupWorker/start/createStartHandler.ts +++ b/src/browser/setupWorker/start/createStartHandler.ts @@ -1,13 +1,13 @@ import { until } from '@open-draft/until' +import { devUtils } from '~/core/utils/internal/devUtils' import { getWorkerInstance } from './utils/getWorkerInstance' import { enableMocking } from './utils/enableMocking' import { SetupWorkerInternalContext, StartHandler } from '../glossary' import { createRequestListener } from './createRequestListener' -import { requestIntegrityCheck } from '../../utils/internal/requestIntegrityCheck' +import { requestIntegrityCheck } from '../../utils/requestIntegrityCheck' import { deferNetworkRequestsUntil } from '../../utils/deferNetworkRequestsUntil' import { createResponseListener } from './createResponseListener' import { validateWorkerScope } from './utils/validateWorkerScope' -import { devUtils } from '../../utils/internal/devUtils' export const createStartHandler = ( context: SetupWorkerInternalContext, diff --git a/src/setupWorker/start/utils/createMessageChannel.ts b/src/browser/setupWorker/start/utils/createMessageChannel.ts similarity index 100% rename from src/setupWorker/start/utils/createMessageChannel.ts rename to src/browser/setupWorker/start/utils/createMessageChannel.ts diff --git a/src/setupWorker/start/utils/enableMocking.ts b/src/browser/setupWorker/start/utils/enableMocking.ts similarity index 94% rename from src/setupWorker/start/utils/enableMocking.ts rename to src/browser/setupWorker/start/utils/enableMocking.ts index 890211b3d..c0f19f314 100644 --- a/src/setupWorker/start/utils/enableMocking.ts +++ b/src/browser/setupWorker/start/utils/enableMocking.ts @@ -1,4 +1,4 @@ -import { devUtils } from '../../../utils/internal/devUtils' +import { devUtils } from '~/core/utils/internal/devUtils' import { StartOptions, SetupWorkerInternalContext } from '../../glossary' import { printStartMessage } from './printStartMessage' diff --git a/src/setupWorker/start/utils/getWorkerByRegistration.ts b/src/browser/setupWorker/start/utils/getWorkerByRegistration.ts similarity index 100% rename from src/setupWorker/start/utils/getWorkerByRegistration.ts rename to src/browser/setupWorker/start/utils/getWorkerByRegistration.ts diff --git a/src/setupWorker/start/utils/getWorkerInstance.ts b/src/browser/setupWorker/start/utils/getWorkerInstance.ts similarity index 96% rename from src/setupWorker/start/utils/getWorkerInstance.ts rename to src/browser/setupWorker/start/utils/getWorkerInstance.ts index 90fab7481..05594426b 100644 --- a/src/setupWorker/start/utils/getWorkerInstance.ts +++ b/src/browser/setupWorker/start/utils/getWorkerInstance.ts @@ -1,8 +1,8 @@ import { until } from '@open-draft/until' +import { devUtils } from '~/core/utils/internal/devUtils' +import { getAbsoluteWorkerUrl } from '../../../utils/getAbsoluteWorkerUrl' import { getWorkerByRegistration } from './getWorkerByRegistration' import { ServiceWorkerInstanceTuple, FindWorker } from '../../glossary' -import { getAbsoluteWorkerUrl } from '../../../utils/url/getAbsoluteWorkerUrl' -import { devUtils } from '../../../utils/internal/devUtils' /** * Returns an active Service Worker instance. diff --git a/src/setupWorker/start/utils/prepareStartHandler.test.ts b/src/browser/setupWorker/start/utils/prepareStartHandler.test.ts similarity index 100% rename from src/setupWorker/start/utils/prepareStartHandler.test.ts rename to src/browser/setupWorker/start/utils/prepareStartHandler.test.ts diff --git a/src/setupWorker/start/utils/prepareStartHandler.ts b/src/browser/setupWorker/start/utils/prepareStartHandler.ts similarity index 90% rename from src/setupWorker/start/utils/prepareStartHandler.ts rename to src/browser/setupWorker/start/utils/prepareStartHandler.ts index 3828a13c1..e98fe832c 100644 --- a/src/setupWorker/start/utils/prepareStartHandler.ts +++ b/src/browser/setupWorker/start/utils/prepareStartHandler.ts @@ -1,5 +1,5 @@ -import { RequiredDeep } from '../../../typeUtils' -import { mergeRight } from '../../../utils/internal/mergeRight' +import { RequiredDeep } from '~/core/typeUtils' +import { mergeRight } from '~/core/utils/internal/mergeRight' import { SetupWorker, SetupWorkerInternalContext, diff --git a/src/setupWorker/start/utils/printStartMessage.test.ts b/src/browser/setupWorker/start/utils/printStartMessage.test.ts similarity index 100% rename from src/setupWorker/start/utils/printStartMessage.test.ts rename to src/browser/setupWorker/start/utils/printStartMessage.test.ts diff --git a/src/setupWorker/start/utils/printStartMessage.ts b/src/browser/setupWorker/start/utils/printStartMessage.ts similarity index 93% rename from src/setupWorker/start/utils/printStartMessage.ts rename to src/browser/setupWorker/start/utils/printStartMessage.ts index 9e588afaa..44ffcd353 100644 --- a/src/setupWorker/start/utils/printStartMessage.ts +++ b/src/browser/setupWorker/start/utils/printStartMessage.ts @@ -1,4 +1,4 @@ -import { devUtils } from '../../../utils/internal/devUtils' +import { devUtils } from '~/core/utils/internal/devUtils' export interface PrintStartMessageArgs { quiet?: boolean diff --git a/src/setupWorker/start/utils/validateWorkerScope.ts b/src/browser/setupWorker/start/utils/validateWorkerScope.ts similarity index 91% rename from src/setupWorker/start/utils/validateWorkerScope.ts rename to src/browser/setupWorker/start/utils/validateWorkerScope.ts index b288e0d39..0e93412c2 100644 --- a/src/setupWorker/start/utils/validateWorkerScope.ts +++ b/src/browser/setupWorker/start/utils/validateWorkerScope.ts @@ -1,4 +1,4 @@ -import { devUtils } from '../../../utils/internal/devUtils' +import { devUtils } from '~/core/utils/internal/devUtils' import { StartOptions } from '../../glossary' export function validateWorkerScope( diff --git a/src/setupWorker/stop/createFallbackStop.ts b/src/browser/setupWorker/stop/createFallbackStop.ts similarity index 100% rename from src/setupWorker/stop/createFallbackStop.ts rename to src/browser/setupWorker/stop/createFallbackStop.ts diff --git a/src/setupWorker/stop/createStop.ts b/src/browser/setupWorker/stop/createStop.ts similarity index 94% rename from src/setupWorker/stop/createStop.ts rename to src/browser/setupWorker/stop/createStop.ts index df4a2e5d1..48c37996d 100644 --- a/src/setupWorker/stop/createStop.ts +++ b/src/browser/setupWorker/stop/createStop.ts @@ -1,4 +1,4 @@ -import { devUtils } from '../../utils/internal/devUtils' +import { devUtils } from '~/core/utils/internal/devUtils' import { SetupWorkerInternalContext, StopHandler } from '../glossary' import { printStopMessage } from './utils/printStopMessage' diff --git a/src/setupWorker/stop/utils/printStopMessage.test.ts b/src/browser/setupWorker/stop/utils/printStopMessage.test.ts similarity index 100% rename from src/setupWorker/stop/utils/printStopMessage.test.ts rename to src/browser/setupWorker/stop/utils/printStopMessage.test.ts diff --git a/src/setupWorker/stop/utils/printStopMessage.ts b/src/browser/setupWorker/stop/utils/printStopMessage.ts similarity index 79% rename from src/setupWorker/stop/utils/printStopMessage.ts rename to src/browser/setupWorker/stop/utils/printStopMessage.ts index d12246fea..43a08a7a3 100644 --- a/src/setupWorker/stop/utils/printStopMessage.ts +++ b/src/browser/setupWorker/stop/utils/printStopMessage.ts @@ -1,4 +1,4 @@ -import { devUtils } from '../../../utils/internal/devUtils' +import { devUtils } from '~/core/utils/internal/devUtils' export function printStopMessage(args: { quiet?: boolean } = {}): void { if (args.quiet) { diff --git a/src/utils/deferNetworkRequestsUntil.test.ts b/src/browser/utils/deferNetworkRequestsUntil.test.ts similarity index 100% rename from src/utils/deferNetworkRequestsUntil.test.ts rename to src/browser/utils/deferNetworkRequestsUntil.test.ts diff --git a/src/utils/deferNetworkRequestsUntil.ts b/src/browser/utils/deferNetworkRequestsUntil.ts similarity index 100% rename from src/utils/deferNetworkRequestsUntil.ts rename to src/browser/utils/deferNetworkRequestsUntil.ts diff --git a/src/utils/url/getAbsoluteWorkerUrl.test.ts b/src/browser/utils/getAbsoluteWorkerUrl.test.ts similarity index 100% rename from src/utils/url/getAbsoluteWorkerUrl.test.ts rename to src/browser/utils/getAbsoluteWorkerUrl.test.ts diff --git a/src/utils/url/getAbsoluteWorkerUrl.ts b/src/browser/utils/getAbsoluteWorkerUrl.ts similarity index 100% rename from src/utils/url/getAbsoluteWorkerUrl.ts rename to src/browser/utils/getAbsoluteWorkerUrl.ts diff --git a/src/utils/request/parseWorkerRequest.ts b/src/browser/utils/parseWorkerRequest.ts similarity index 83% rename from src/utils/request/parseWorkerRequest.ts rename to src/browser/utils/parseWorkerRequest.ts index 7d6459662..4160efcb8 100644 --- a/src/utils/request/parseWorkerRequest.ts +++ b/src/browser/utils/parseWorkerRequest.ts @@ -1,5 +1,5 @@ -import type { ServiceWorkerIncomingRequest } from '../../setupWorker/glossary' import { pruneGetRequestBody } from './pruneGetRequestBody' +import type { ServiceWorkerIncomingRequest } from '../setupWorker/glossary' /** * Converts a given request received from the Service Worker diff --git a/src/utils/request/pruneGetRequestBody.test.ts b/src/browser/utils/pruneGetRequestBody.test.ts similarity index 100% rename from src/utils/request/pruneGetRequestBody.test.ts rename to src/browser/utils/pruneGetRequestBody.test.ts diff --git a/src/utils/request/pruneGetRequestBody.ts b/src/browser/utils/pruneGetRequestBody.ts similarity index 89% rename from src/utils/request/pruneGetRequestBody.ts rename to src/browser/utils/pruneGetRequestBody.ts index ecc5f824a..b17602217 100644 --- a/src/utils/request/pruneGetRequestBody.ts +++ b/src/browser/utils/pruneGetRequestBody.ts @@ -1,4 +1,4 @@ -import { ServiceWorkerIncomingRequest } from '../../setupWorker/glossary' +import type { ServiceWorkerIncomingRequest } from '../setupWorker/glossary' type Input = Pick diff --git a/src/utils/internal/requestIntegrityCheck.ts b/src/browser/utils/requestIntegrityCheck.ts similarity index 90% rename from src/utils/internal/requestIntegrityCheck.ts rename to src/browser/utils/requestIntegrityCheck.ts index 10f1fb112..67e1b4144 100644 --- a/src/utils/internal/requestIntegrityCheck.ts +++ b/src/browser/utils/requestIntegrityCheck.ts @@ -1,4 +1,4 @@ -import { SetupWorkerInternalContext } from '../../setupWorker/glossary' +import type { SetupWorkerInternalContext } from '../setupWorker/glossary' export async function requestIntegrityCheck( context: SetupWorkerInternalContext, diff --git a/src/HttpResponse.test.ts b/src/core/HttpResponse.test.ts similarity index 100% rename from src/HttpResponse.test.ts rename to src/core/HttpResponse.test.ts diff --git a/src/HttpResponse.ts b/src/core/HttpResponse.ts similarity index 100% rename from src/HttpResponse.ts rename to src/core/HttpResponse.ts diff --git a/src/NetworkError.ts b/src/core/NetworkError.ts similarity index 100% rename from src/NetworkError.ts rename to src/core/NetworkError.ts diff --git a/src/SetupApi.ts b/src/core/SetupApi.ts similarity index 100% rename from src/SetupApi.ts rename to src/core/SetupApi.ts diff --git a/src/bypass.test.ts b/src/core/bypass.test.ts similarity index 100% rename from src/bypass.test.ts rename to src/core/bypass.test.ts diff --git a/src/bypass.ts b/src/core/bypass.ts similarity index 100% rename from src/bypass.ts rename to src/core/bypass.ts diff --git a/src/delay.ts b/src/core/delay.ts similarity index 100% rename from src/delay.ts rename to src/core/delay.ts diff --git a/src/graphql.test.ts b/src/core/graphql.test.ts similarity index 100% rename from src/graphql.test.ts rename to src/core/graphql.test.ts diff --git a/src/graphql.ts b/src/core/graphql.ts similarity index 100% rename from src/graphql.ts rename to src/core/graphql.ts diff --git a/src/handlers/GraphQLHandler.test.ts b/src/core/handlers/GraphQLHandler.test.ts similarity index 100% rename from src/handlers/GraphQLHandler.test.ts rename to src/core/handlers/GraphQLHandler.test.ts diff --git a/src/handlers/GraphQLHandler.ts b/src/core/handlers/GraphQLHandler.ts similarity index 100% rename from src/handlers/GraphQLHandler.ts rename to src/core/handlers/GraphQLHandler.ts diff --git a/src/handlers/RequestHandler.ts b/src/core/handlers/RequestHandler.ts similarity index 98% rename from src/handlers/RequestHandler.ts rename to src/core/handlers/RequestHandler.ts index d29275815..90621f30f 100644 --- a/src/handlers/RequestHandler.ts +++ b/src/core/handlers/RequestHandler.ts @@ -2,8 +2,8 @@ import { invariant } from 'outvariant' import { getCallFrame } from '../utils/internal/getCallFrame' import { isIterable } from '../utils/internal/isIterable' import type { ResponseResolutionContext } from '../utils/getResponse' -import type { MaybePromise } from '../typeUtils' -import { StrictRequest, StrictResponse } from '../HttpResponse' +import type { MaybePromise } from '..//typeUtils' +import { StrictRequest, StrictResponse } from '..//HttpResponse' export type DefaultRequestMultipartBody = Record< string, diff --git a/src/handlers/RestHandler.test.ts b/src/core/handlers/RestHandler.test.ts similarity index 100% rename from src/handlers/RestHandler.test.ts rename to src/core/handlers/RestHandler.test.ts diff --git a/src/handlers/RestHandler.ts b/src/core/handlers/RestHandler.ts similarity index 100% rename from src/handlers/RestHandler.ts rename to src/core/handlers/RestHandler.ts diff --git a/src/index.ts b/src/core/index.ts similarity index 94% rename from src/index.ts rename to src/core/index.ts index f1b37650d..e120805c2 100644 --- a/src/index.ts +++ b/src/core/index.ts @@ -18,7 +18,7 @@ export { cleanUrl } from './utils/url/cleanUrl' * Type definitions. */ -export type { SharedOptions } from './sharedOptions' +export type { SharedOptions, LifeCycleEventsMap } from './sharedOptions' export type { ResponseResolver, @@ -40,7 +40,6 @@ export type { } from './handlers/GraphQLHandler' export type { Path, PathParams, Match } from './utils/matching/matchRequestUrl' -export type { DelayMode } from './delay' export type { ParsedGraphQLRequest } from './utils/internal/parseGraphQLRequest' export * from './HttpResponse' diff --git a/src/passthrough.test.ts b/src/core/passthrough.test.ts similarity index 100% rename from src/passthrough.test.ts rename to src/core/passthrough.test.ts diff --git a/src/passthrough.ts b/src/core/passthrough.ts similarity index 100% rename from src/passthrough.ts rename to src/core/passthrough.ts diff --git a/src/rest.spec.ts b/src/core/rest.spec.ts similarity index 100% rename from src/rest.spec.ts rename to src/core/rest.spec.ts diff --git a/src/rest.ts b/src/core/rest.ts similarity index 100% rename from src/rest.ts rename to src/core/rest.ts diff --git a/src/sharedOptions.ts b/src/core/sharedOptions.ts similarity index 100% rename from src/sharedOptions.ts rename to src/core/sharedOptions.ts diff --git a/src/typeUtils.ts b/src/core/typeUtils.ts similarity index 100% rename from src/typeUtils.ts rename to src/core/typeUtils.ts diff --git a/src/utils/HttpResponse/createResponse.test.ts b/src/core/utils/HttpResponse/createResponse.test.ts similarity index 100% rename from src/utils/HttpResponse/createResponse.test.ts rename to src/core/utils/HttpResponse/createResponse.test.ts diff --git a/src/utils/HttpResponse/createResponse.ts b/src/core/utils/HttpResponse/createResponse.ts similarity index 100% rename from src/utils/HttpResponse/createResponse.ts rename to src/core/utils/HttpResponse/createResponse.ts diff --git a/src/utils/HttpResponse/decorators.ts b/src/core/utils/HttpResponse/decorators.ts similarity index 100% rename from src/utils/HttpResponse/decorators.ts rename to src/core/utils/HttpResponse/decorators.ts diff --git a/src/utils/getResponse.ts b/src/core/utils/getResponse.ts similarity index 100% rename from src/utils/getResponse.ts rename to src/core/utils/getResponse.ts diff --git a/src/utils/handleRequest.test.ts b/src/core/utils/handleRequest.test.ts similarity index 100% rename from src/utils/handleRequest.test.ts rename to src/core/utils/handleRequest.test.ts diff --git a/src/utils/handleRequest.ts b/src/core/utils/handleRequest.ts similarity index 100% rename from src/utils/handleRequest.ts rename to src/core/utils/handleRequest.ts diff --git a/src/utils/internal/checkGlobals.ts b/src/core/utils/internal/checkGlobals.ts similarity index 100% rename from src/utils/internal/checkGlobals.ts rename to src/core/utils/internal/checkGlobals.ts diff --git a/src/utils/internal/devUtils.ts b/src/core/utils/internal/devUtils.ts similarity index 100% rename from src/utils/internal/devUtils.ts rename to src/core/utils/internal/devUtils.ts diff --git a/src/utils/internal/getCallFrame.test.ts b/src/core/utils/internal/getCallFrame.test.ts similarity index 87% rename from src/utils/internal/getCallFrame.test.ts rename to src/core/utils/internal/getCallFrame.test.ts index e13c875ad..96c34f92b 100644 --- a/src/utils/internal/getCallFrame.test.ts +++ b/src/core/utils/internal/getCallFrame.test.ts @@ -13,8 +13,8 @@ class ErrorWithStack extends Error { test('supports Node.js (Linux, MacOS) error stack', () => { const linuxError = new ErrorWithStack([ 'Error: ', - ' at getCallFrame (/Users/mock/github/msw/lib/umd/index.js:3735:22)', - ' at Object.get (/Users/mock/github/msw/lib/umd/index.js:3776:29)', + ' at getCallFrame (/Users/mock/github/msw/lib/node/index.js:3735:22)', + ' at Object.get (/Users/mock/github/msw/lib/node/index.js:3776:29)', ' at Object. (/Users/mock/github/msw/test/msw-api/setup-server/printHandlers.test.ts:13:8)', // <-- this one ' at Runtime._execModule (/Users/mock/github/msw/node_modules/jest-runtime/build/index.js:1299:24)', ' at Runtime._loadModule (/Users/mock/github/msw/node_modules/jest-runtime/build/index.js:898:12)', @@ -29,9 +29,9 @@ test('supports Node.js (Linux, MacOS) error stack', () => { const macOsError = new ErrorWithStack([ 'Error: ', - ' at getCallFrame (/Users/mock/git/msw/lib/umd/index.js:3735:22)', - ' at graphQLRequestHandler (/Users/mock/git/msw/lib/umd/index.js:7071:25)', - ' at Object.query (/Users/mock/git/msw/lib/umd/index.js:7182:18)', + ' at getCallFrame (/Users/mock/git/msw/lib/node/index.js:3735:22)', + ' at graphQLRequestHandler (/Users/mock/git/msw/lib/node/index.js:7071:25)', + ' at Object.query (/Users/mock/git/msw/lib/node/index.js:7182:18)', ' at Object. (/Users/mock/git/msw/test/msw-api/setup-server/printHandlers.test.ts:14:11)', // <-- this one ' at Runtime._execModule (/Users/mock/git/msw/node_modules/jest-runtime/build/index.js:1299:24)', ' at Runtime._loadModule (/Users/mock/git/msw/node_modules/jest-runtime/build/index.js:898:12)', @@ -49,9 +49,9 @@ test('supports Node.js (Linux, MacOS) error stack', () => { test('supports Node.js (Windows) error stack', () => { const error = new ErrorWithStack([ 'Error: ', - ' at getCallFrame (C:\\Users\\mock\\git\\msw\\lib\\umd\\index.js:3735:22)', - ' at graphQLRequestHandler (C:\\Users\\mock\\git\\msw\\lib\\umd\\index.js:7071:25)', - ' at Object.query (C:\\Users\\mock\\git\\msw\\lib\\umd\\index.js:7182:18)', + ' at getCallFrame (C:\\Users\\mock\\git\\msw\\lib\\node\\index.js:3735:22)', + ' at graphQLRequestHandler (C:\\Users\\mock\\git\\msw\\lib\\node\\index.js:7071:25)', + ' at Object.query (C:\\Users\\mock\\git\\msw\\lib\\node\\index.js:7182:18)', ' at Object. (C:\\Users\\mock\\git\\msw\\test\\msw-api\\setup-server\\printHandlers.test.ts:75:13)', // <-- this one ' at Object.asyncJestTest (C:\\Users\\mock\\git\\msw\\node_modules\\jest-jasmine2\\build\\jasmineAsyncInstall.js:106:37)', ' at C:\\Users\\mock\\git\\msw\\node_modules\\jest-jasmine2\\build\\queueRunner.js:45:12', @@ -68,8 +68,8 @@ test('supports Node.js (Windows) error stack', () => { test('supports Chrome and Edge error stack', () => { const error = new ErrorWithStack([ 'Error', - ' at getCallFrame (webpack:///./lib/esm/getCallFrame-deps.js?:272:20)', - ' at Object.eval [as get] (webpack:///./lib/esm/rest-deps.js?:1402:90)', + ' at getCallFrame (webpack:///./lib/browser/getCallFrame-deps.js?:272:20)', + ' at Object.eval [as get] (webpack:///./lib/browser/rest-deps.js?:1402:90)', ' at eval (webpack:///./test/msw-api/setup-worker/printHandlers.mocks.ts?:6:113)', // <-- this one ' at Module../test/msw-api/setup-worker/printHandlers.mocks.ts (http://localhost:59464/main.js:1376:1)', ' at __webpack_require__ (http://localhost:59464/main.js:790:30)', @@ -87,8 +87,8 @@ test('supports Chrome and Edge error stack', () => { test('supports Firefox (MacOS, Windows) error stack', () => { const error = new ErrorWithStack([ - 'getCallFrame@webpack:///./lib/esm/getCallFrame-deps.js?:272:20', - 'createRestHandler/<@webpack:///./lib/esm/rest-deps.js?:1402:90', + 'getCallFrame@webpack:///./lib/browser/getCallFrame-deps.js?:272:20', + 'createRestHandler/<@webpack:///./lib/browser/rest-deps.js?:1402:90', '@webpack:///./test/msw-api/setup-worker/printHandlers.mocks.ts?:6:113', // <-- this one './test/msw-api/setup-worker/printHandlers.mocks.ts@http://localhost:59464/main.js:1376:1', '__webpack_require__@http://localhost:59464/main.js:790:30', diff --git a/src/utils/internal/getCallFrame.ts b/src/core/utils/internal/getCallFrame.ts similarity index 91% rename from src/utils/internal/getCallFrame.ts rename to src/core/utils/internal/getCallFrame.ts index 4e297d2ee..bee9e70f4 100644 --- a/src/utils/internal/getCallFrame.ts +++ b/src/core/utils/internal/getCallFrame.ts @@ -2,7 +2,7 @@ const SOURCE_FRAME = /[\/\\]msw[\/\\]src[\/\\](.+)/ const BUILD_FRAME = - /(node_modules)?[\/\\]lib[\/\\](umd|esm|iief|cjs)[\/\\]|^[^\/\\]*$/ + /(node_modules)?[\/\\]lib[\/\\](core|browser|node|native|iife)[\/\\]|^[^\/\\]*$/ /** * Return the stack trace frame of a function's invocation. diff --git a/src/utils/internal/isIterable.test.ts b/src/core/utils/internal/isIterable.test.ts similarity index 100% rename from src/utils/internal/isIterable.test.ts rename to src/core/utils/internal/isIterable.test.ts diff --git a/src/utils/internal/isIterable.ts b/src/core/utils/internal/isIterable.ts similarity index 100% rename from src/utils/internal/isIterable.ts rename to src/core/utils/internal/isIterable.ts diff --git a/src/utils/internal/isObject.test.ts b/src/core/utils/internal/isObject.test.ts similarity index 100% rename from src/utils/internal/isObject.test.ts rename to src/core/utils/internal/isObject.test.ts diff --git a/src/utils/internal/isObject.ts b/src/core/utils/internal/isObject.ts similarity index 100% rename from src/utils/internal/isObject.ts rename to src/core/utils/internal/isObject.ts diff --git a/src/utils/internal/isStringEqual.test.ts b/src/core/utils/internal/isStringEqual.test.ts similarity index 100% rename from src/utils/internal/isStringEqual.test.ts rename to src/core/utils/internal/isStringEqual.test.ts diff --git a/src/utils/internal/isStringEqual.ts b/src/core/utils/internal/isStringEqual.ts similarity index 100% rename from src/utils/internal/isStringEqual.ts rename to src/core/utils/internal/isStringEqual.ts diff --git a/src/utils/internal/jsonParse.test.ts b/src/core/utils/internal/jsonParse.test.ts similarity index 100% rename from src/utils/internal/jsonParse.test.ts rename to src/core/utils/internal/jsonParse.test.ts diff --git a/src/utils/internal/jsonParse.ts b/src/core/utils/internal/jsonParse.ts similarity index 100% rename from src/utils/internal/jsonParse.ts rename to src/core/utils/internal/jsonParse.ts diff --git a/src/utils/internal/mergeRight.test.ts b/src/core/utils/internal/mergeRight.test.ts similarity index 100% rename from src/utils/internal/mergeRight.test.ts rename to src/core/utils/internal/mergeRight.test.ts diff --git a/src/utils/internal/mergeRight.ts b/src/core/utils/internal/mergeRight.ts similarity index 100% rename from src/utils/internal/mergeRight.ts rename to src/core/utils/internal/mergeRight.ts diff --git a/src/utils/internal/parseGraphQLRequest.test.ts b/src/core/utils/internal/parseGraphQLRequest.test.ts similarity index 100% rename from src/utils/internal/parseGraphQLRequest.test.ts rename to src/core/utils/internal/parseGraphQLRequest.test.ts diff --git a/src/utils/internal/parseGraphQLRequest.ts b/src/core/utils/internal/parseGraphQLRequest.ts similarity index 100% rename from src/utils/internal/parseGraphQLRequest.ts rename to src/core/utils/internal/parseGraphQLRequest.ts diff --git a/src/utils/internal/parseMultipartData.test.ts b/src/core/utils/internal/parseMultipartData.test.ts similarity index 100% rename from src/utils/internal/parseMultipartData.test.ts rename to src/core/utils/internal/parseMultipartData.test.ts diff --git a/src/utils/internal/parseMultipartData.ts b/src/core/utils/internal/parseMultipartData.ts similarity index 100% rename from src/utils/internal/parseMultipartData.ts rename to src/core/utils/internal/parseMultipartData.ts diff --git a/src/utils/internal/pipeEvents.test.ts b/src/core/utils/internal/pipeEvents.test.ts similarity index 74% rename from src/utils/internal/pipeEvents.test.ts rename to src/core/utils/internal/pipeEvents.test.ts index 727a0cdc8..d5e9e51b3 100644 --- a/src/utils/internal/pipeEvents.test.ts +++ b/src/core/utils/internal/pipeEvents.test.ts @@ -1,9 +1,9 @@ -import { EventEmitter } from 'stream' +import { Emitter } from 'strict-event-emitter' import { pipeEvents } from './pipeEvents' it('pipes events from the source emitter to the destination emitter', () => { - const source = new EventEmitter() - const destination = new EventEmitter() + const source = new Emitter() + const destination = new Emitter() pipeEvents(source, destination) const callback = jest.fn() diff --git a/src/utils/internal/pipeEvents.ts b/src/core/utils/internal/pipeEvents.ts similarity index 100% rename from src/utils/internal/pipeEvents.ts rename to src/core/utils/internal/pipeEvents.ts diff --git a/src/utils/internal/requestHandlerUtils.ts b/src/core/utils/internal/requestHandlerUtils.ts similarity index 100% rename from src/utils/internal/requestHandlerUtils.ts rename to src/core/utils/internal/requestHandlerUtils.ts diff --git a/src/utils/internal/toReadonlyArray.test.ts b/src/core/utils/internal/toReadonlyArray.test.ts similarity index 100% rename from src/utils/internal/toReadonlyArray.test.ts rename to src/core/utils/internal/toReadonlyArray.test.ts diff --git a/src/utils/internal/toReadonlyArray.ts b/src/core/utils/internal/toReadonlyArray.ts similarity index 100% rename from src/utils/internal/toReadonlyArray.ts rename to src/core/utils/internal/toReadonlyArray.ts diff --git a/src/utils/internal/tryCatch.test.ts b/src/core/utils/internal/tryCatch.test.ts similarity index 100% rename from src/utils/internal/tryCatch.test.ts rename to src/core/utils/internal/tryCatch.test.ts diff --git a/src/utils/internal/tryCatch.ts b/src/core/utils/internal/tryCatch.ts similarity index 100% rename from src/utils/internal/tryCatch.ts rename to src/core/utils/internal/tryCatch.ts diff --git a/src/utils/internal/uuidv4.ts b/src/core/utils/internal/uuidv4.ts similarity index 100% rename from src/utils/internal/uuidv4.ts rename to src/core/utils/internal/uuidv4.ts diff --git a/src/utils/logging/getStatusCodeColor.test.ts b/src/core/utils/logging/getStatusCodeColor.test.ts similarity index 100% rename from src/utils/logging/getStatusCodeColor.test.ts rename to src/core/utils/logging/getStatusCodeColor.test.ts diff --git a/src/utils/logging/getStatusCodeColor.ts b/src/core/utils/logging/getStatusCodeColor.ts similarity index 100% rename from src/utils/logging/getStatusCodeColor.ts rename to src/core/utils/logging/getStatusCodeColor.ts diff --git a/src/utils/logging/getTimestamp.test.ts b/src/core/utils/logging/getTimestamp.test.ts similarity index 100% rename from src/utils/logging/getTimestamp.test.ts rename to src/core/utils/logging/getTimestamp.test.ts diff --git a/src/utils/logging/getTimestamp.ts b/src/core/utils/logging/getTimestamp.ts similarity index 100% rename from src/utils/logging/getTimestamp.ts rename to src/core/utils/logging/getTimestamp.ts diff --git a/src/utils/logging/serializeRequest.test.ts b/src/core/utils/logging/serializeRequest.test.ts similarity index 100% rename from src/utils/logging/serializeRequest.test.ts rename to src/core/utils/logging/serializeRequest.test.ts diff --git a/src/utils/logging/serializeRequest.ts b/src/core/utils/logging/serializeRequest.ts similarity index 100% rename from src/utils/logging/serializeRequest.ts rename to src/core/utils/logging/serializeRequest.ts diff --git a/src/utils/logging/serializeResponse.test.ts b/src/core/utils/logging/serializeResponse.test.ts similarity index 100% rename from src/utils/logging/serializeResponse.test.ts rename to src/core/utils/logging/serializeResponse.test.ts diff --git a/src/utils/logging/serializeResponse.ts b/src/core/utils/logging/serializeResponse.ts similarity index 100% rename from src/utils/logging/serializeResponse.ts rename to src/core/utils/logging/serializeResponse.ts diff --git a/src/utils/matching/matchRequestUrl.test.ts b/src/core/utils/matching/matchRequestUrl.test.ts similarity index 100% rename from src/utils/matching/matchRequestUrl.test.ts rename to src/core/utils/matching/matchRequestUrl.test.ts diff --git a/src/utils/matching/matchRequestUrl.ts b/src/core/utils/matching/matchRequestUrl.ts similarity index 100% rename from src/utils/matching/matchRequestUrl.ts rename to src/core/utils/matching/matchRequestUrl.ts diff --git a/src/utils/matching/normalizePath.node.test.ts b/src/core/utils/matching/normalizePath.node.test.ts similarity index 100% rename from src/utils/matching/normalizePath.node.test.ts rename to src/core/utils/matching/normalizePath.node.test.ts diff --git a/src/utils/matching/normalizePath.test.ts b/src/core/utils/matching/normalizePath.test.ts similarity index 100% rename from src/utils/matching/normalizePath.test.ts rename to src/core/utils/matching/normalizePath.test.ts diff --git a/src/utils/matching/normalizePath.ts b/src/core/utils/matching/normalizePath.ts similarity index 100% rename from src/utils/matching/normalizePath.ts rename to src/core/utils/matching/normalizePath.ts diff --git a/src/utils/request/getPublicUrlFromRequest.test.ts b/src/core/utils/request/getPublicUrlFromRequest.test.ts similarity index 100% rename from src/utils/request/getPublicUrlFromRequest.test.ts rename to src/core/utils/request/getPublicUrlFromRequest.test.ts diff --git a/src/utils/request/getPublicUrlFromRequest.ts b/src/core/utils/request/getPublicUrlFromRequest.ts similarity index 100% rename from src/utils/request/getPublicUrlFromRequest.ts rename to src/core/utils/request/getPublicUrlFromRequest.ts diff --git a/src/utils/request/getRequestCookies.node.test.ts b/src/core/utils/request/getRequestCookies.node.test.ts similarity index 100% rename from src/utils/request/getRequestCookies.node.test.ts rename to src/core/utils/request/getRequestCookies.node.test.ts diff --git a/src/utils/request/getRequestCookies.test.ts b/src/core/utils/request/getRequestCookies.test.ts similarity index 95% rename from src/utils/request/getRequestCookies.test.ts rename to src/core/utils/request/getRequestCookies.test.ts index d7983cfce..59a5c5b7b 100644 --- a/src/utils/request/getRequestCookies.test.ts +++ b/src/core/utils/request/getRequestCookies.test.ts @@ -2,7 +2,7 @@ * @jest-environment jsdom */ import { getRequestCookies } from './getRequestCookies' -import { clearCookies } from '../../../test/support/utils' +import { clearCookies } from '../../../../test/support/utils' beforeAll(() => { // Emulate some `document.cookie` value. diff --git a/src/utils/request/getRequestCookies.ts b/src/core/utils/request/getRequestCookies.ts similarity index 100% rename from src/utils/request/getRequestCookies.ts rename to src/core/utils/request/getRequestCookies.ts diff --git a/src/utils/request/onUnhandledRequest.test.ts b/src/core/utils/request/onUnhandledRequest.test.ts similarity index 100% rename from src/utils/request/onUnhandledRequest.test.ts rename to src/core/utils/request/onUnhandledRequest.test.ts diff --git a/src/utils/request/onUnhandledRequest.ts b/src/core/utils/request/onUnhandledRequest.ts similarity index 97% rename from src/utils/request/onUnhandledRequest.ts rename to src/core/utils/request/onUnhandledRequest.ts index 3c255b08b..d6a818852 100644 --- a/src/utils/request/onUnhandledRequest.ts +++ b/src/core/utils/request/onUnhandledRequest.ts @@ -1,13 +1,11 @@ import getStringMatchScore from 'js-levenshtein' +import { RequestHandler, RestHandler, GraphQLHandler } from '../..' import { ParsedGraphQLQuery, parseGraphQLRequest, } from '../internal/parseGraphQLRequest' import { getPublicUrlFromRequest } from './getPublicUrlFromRequest' import { isStringEqual } from '../internal/isStringEqual' -import { RestHandler } from '../../handlers/RestHandler' -import { GraphQLHandler } from '../../handlers/GraphQLHandler' -import type { RequestHandler } from '../../handlers/RequestHandler' import { devUtils } from '../internal/devUtils' const MAX_MATCH_SCORE = 3 diff --git a/src/utils/request/readResponseCookies.ts b/src/core/utils/request/readResponseCookies.ts similarity index 100% rename from src/utils/request/readResponseCookies.ts rename to src/core/utils/request/readResponseCookies.ts diff --git a/src/utils/toResponseInit.ts b/src/core/utils/toResponseInit.ts similarity index 100% rename from src/utils/toResponseInit.ts rename to src/core/utils/toResponseInit.ts diff --git a/src/utils/url/cleanUrl.test.ts b/src/core/utils/url/cleanUrl.test.ts similarity index 100% rename from src/utils/url/cleanUrl.test.ts rename to src/core/utils/url/cleanUrl.test.ts diff --git a/src/utils/url/cleanUrl.ts b/src/core/utils/url/cleanUrl.ts similarity index 100% rename from src/utils/url/cleanUrl.ts rename to src/core/utils/url/cleanUrl.ts diff --git a/src/utils/url/getAbsoluteUrl.node.test.ts b/src/core/utils/url/getAbsoluteUrl.node.test.ts similarity index 100% rename from src/utils/url/getAbsoluteUrl.node.test.ts rename to src/core/utils/url/getAbsoluteUrl.node.test.ts diff --git a/src/utils/url/getAbsoluteUrl.test.ts b/src/core/utils/url/getAbsoluteUrl.test.ts similarity index 100% rename from src/utils/url/getAbsoluteUrl.test.ts rename to src/core/utils/url/getAbsoluteUrl.test.ts diff --git a/src/utils/url/getAbsoluteUrl.ts b/src/core/utils/url/getAbsoluteUrl.ts similarity index 100% rename from src/utils/url/getAbsoluteUrl.ts rename to src/core/utils/url/getAbsoluteUrl.ts diff --git a/src/utils/url/isAbsoluteUrl.test.ts b/src/core/utils/url/isAbsoluteUrl.test.ts similarity index 100% rename from src/utils/url/isAbsoluteUrl.test.ts rename to src/core/utils/url/isAbsoluteUrl.test.ts diff --git a/src/utils/url/isAbsoluteUrl.ts b/src/core/utils/url/isAbsoluteUrl.ts similarity index 100% rename from src/utils/url/isAbsoluteUrl.ts rename to src/core/utils/url/isAbsoluteUrl.ts diff --git a/src/native/index.ts b/src/native/index.ts index 5db802971..e2448e9c7 100644 --- a/src/native/index.ts +++ b/src/native/index.ts @@ -1,5 +1,5 @@ import { XMLHttpRequestInterceptor } from '@mswjs/interceptors/XMLHttpRequest' -import { RequestHandler } from '../handlers/RequestHandler' +import { RequestHandler } from '~/core/handlers/RequestHandler' import { SetupServerApi } from '../node/SetupServerApi' /** diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 5e44fe5f4..906538158 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -6,13 +6,13 @@ import { Interceptor, InterceptorReadyState, } from '@mswjs/interceptors' -import { SetupApi } from '../SetupApi' -import { RequestHandler } from '../handlers/RequestHandler' -import { LifeCycleEventsMap, SharedOptions } from '../sharedOptions' -import { RequiredDeep } from '../typeUtils' -import { mergeRight } from '../utils/internal/mergeRight' -import { handleRequest } from '../utils/handleRequest' -import { devUtils } from '../utils/internal/devUtils' +import { SetupApi } from '~/core/SetupApi' +import { RequestHandler } from '~/core/handlers/RequestHandler' +import { LifeCycleEventsMap, SharedOptions } from '~/core/sharedOptions' +import { RequiredDeep } from '~/core/typeUtils' +import { mergeRight } from '~/core/utils/internal/mergeRight' +import { handleRequest } from '~/core/utils/handleRequest' +import { devUtils } from '~/core/utils/internal/devUtils' import { SetupServer } from './glossary' /** diff --git a/src/node/glossary.ts b/src/node/glossary.ts index 114ce5713..42951a8ff 100644 --- a/src/node/glossary.ts +++ b/src/node/glossary.ts @@ -2,12 +2,12 @@ import type { PartialDeep } from 'type-fest' import { RequestHandler, RequestHandlerDefaultInfo, -} from '../handlers/RequestHandler' +} from '~/core/handlers/RequestHandler' import { LifeCycleEventEmitter, LifeCycleEventsMap, SharedOptions, -} from '../sharedOptions' +} from '~/core/sharedOptions' export interface SetupServer { /** diff --git a/src/node/index.ts b/src/node/index.ts index d9b2ea46c..3ea073c4e 100644 --- a/src/node/index.ts +++ b/src/node/index.ts @@ -1,3 +1,5 @@ +export * from '~/core' + export type { SetupServer } from './glossary' export { SetupServerApi } from './SetupServerApi' export { setupServer } from './setupServer' diff --git a/src/node/setupServer.ts b/src/node/setupServer.ts index 928b0b374..6e88f9cb3 100644 --- a/src/node/setupServer.ts +++ b/src/node/setupServer.ts @@ -1,7 +1,7 @@ import { ClientRequestInterceptor } from '@mswjs/interceptors/ClientRequest' import { XMLHttpRequestInterceptor } from '@mswjs/interceptors/XMLHttpRequest' import { FetchInterceptor } from '@mswjs/interceptors/fetch' -import { RequestHandler } from '../handlers/RequestHandler' +import { RequestHandler } from '~/core/handlers/RequestHandler' import { SetupServer } from './glossary' import { SetupServerApi } from './SetupServerApi' diff --git a/src/utils/internal/StrictBroadcastChannel.ts b/src/utils/internal/StrictBroadcastChannel.ts deleted file mode 100644 index 15b7237e4..000000000 --- a/src/utils/internal/StrictBroadcastChannel.ts +++ /dev/null @@ -1,27 +0,0 @@ -const ParentClass = - typeof BroadcastChannel == 'undefined' - ? class UnsupportedEnvironment { - constructor() { - throw new Error( - 'Cannot construct BroadcastChannel in a non-browser environment', - ) - } - } - : BroadcastChannel - -export class StrictBroadcastChannel< - MessageMap extends Record, -> extends (ParentClass as unknown as { new (name: string): BroadcastChannel }) { - public postMessage( - message: Parameters[0] extends undefined - ? { - type: MessageType - } - : { - type: MessageType - payload: Parameters[0] - }, - ): void { - return super.postMessage(message) - } -} diff --git a/test/browser/graphql-api/logging.test.ts b/test/browser/graphql-api/logging.test.ts index 99690510f..ee7d57fdd 100644 --- a/test/browser/graphql-api/logging.test.ts +++ b/test/browser/graphql-api/logging.test.ts @@ -1,4 +1,4 @@ -import { StatusCodeColor } from '../../../src/utils/logging/getStatusCodeColor' +import { StatusCodeColor } from '../../../src/core/utils/logging/getStatusCodeColor' import { waitFor } from '../../support/waitFor' import { test, expect } from '../playwright.extend' import { gql } from '../../support/graphql' @@ -25,7 +25,7 @@ test('prints a log for a GraphQL query', async ({ }) await waitFor(() => { - expect(consoleSpy.get('raw').get('startGroupCollapsed')).toEqual( + expect(consoleSpy.get('raw')?.get('startGroupCollapsed')).toEqual( expect.arrayContaining([ expect.stringMatching( new RegExp( @@ -56,7 +56,7 @@ test('prints a log for a GraphQL mutation', async ({ }) await waitFor(() => { - expect(consoleSpy.get('raw').get('startGroupCollapsed')).toEqual( + expect(consoleSpy.get('raw')?.get('startGroupCollapsed')).toEqual( expect.arrayContaining([ expect.stringMatching( new RegExp( @@ -87,7 +87,7 @@ test('prints a log for a GraphQL query intercepted via "graphql.operation"', asy }) await waitFor(() => { - expect(consoleSpy.get('raw').get('startGroupCollapsed')).toEqual( + expect(consoleSpy.get('raw')?.get('startGroupCollapsed')).toEqual( expect.arrayContaining([ expect.stringMatching( new RegExp( @@ -118,7 +118,7 @@ test('prints a log for a GraphQL mutation intercepted via "graphql.operation"', }) await waitFor(() => { - expect(consoleSpy.get('raw').get('startGroupCollapsed')).toEqual( + expect(consoleSpy.get('raw')?.get('startGroupCollapsed')).toEqual( expect.arrayContaining([ expect.stringMatching( new RegExp( diff --git a/test/browser/msw-api/exception-handling.mocks.ts b/test/browser/msw-api/exception-handling.mocks.ts index 4db7c8d6e..0b4dba0ad 100644 --- a/test/browser/msw-api/exception-handling.mocks.ts +++ b/test/browser/msw-api/exception-handling.mocks.ts @@ -4,7 +4,7 @@ const worker = setupWorker( rest.get('https://api.github.com/users/:username', () => { // @ts-ignore nonExisting() - return null + return }), ) diff --git a/test/browser/msw-api/setup-worker/life-cycle-events/on.mocks.ts b/test/browser/msw-api/setup-worker/life-cycle-events/on.mocks.ts index 735169303..0375a02fa 100644 --- a/test/browser/msw-api/setup-worker/life-cycle-events/on.mocks.ts +++ b/test/browser/msw-api/setup-worker/life-cycle-events/on.mocks.ts @@ -1,5 +1,4 @@ -import { HttpResponse, rest, setupWorker } from 'msw' -import { ServerLifecycleEventsMap } from 'msw/src/node/glossary' +import { HttpResponse, rest, setupWorker, LifeCycleEventsMap } from 'msw' const worker = setupWorker( rest.get('*/user', () => { @@ -27,10 +26,9 @@ worker.events.on('request:unhandled', (request, requestId) => { ) }) -const requestEndListner: ServerLifecycleEventsMap['request:end'] = ( - request, - requestId, -) => { +const requestEndListner: ( + ...args: LifeCycleEventsMap['request:end'] +) => void = (request, requestId) => { console.warn(`[request:end] ${request.method} ${request.url} ${requestId}`) } diff --git a/test/browser/msw-api/setup-worker/life-cycle-events/on.test.ts b/test/browser/msw-api/setup-worker/life-cycle-events/on.test.ts index 9ea7da8fa..5ac2a5596 100644 --- a/test/browser/msw-api/setup-worker/life-cycle-events/on.test.ts +++ b/test/browser/msw-api/setup-worker/life-cycle-events/on.test.ts @@ -1,11 +1,11 @@ -import { SetupWorkerApi } from 'msw' +import type { SetupWorker } from 'msw/lib/browser' import { HttpServer } from '@open-draft/test-server/http' import type { ConsoleMessages } from 'page-with' import { test, expect } from '../../../playwright.extend' declare namespace window { export const msw: { - worker: SetupWorkerApi + worker: SetupWorker } } @@ -14,10 +14,10 @@ const ON_EXAMPLE = require.resolve('./on.mocks.ts') let server: HttpServer export function getRequestId(messages: ConsoleMessages) { - const requestStartMessage = messages.get('warning').find((message) => { + const requestStartMessage = messages.get('warning')?.find((message) => { return message.startsWith('[request:start]') }) - return requestStartMessage.split(' ')[3] + return requestStartMessage?.split(' ')?.[3] } test.beforeEach(async ({ createServer }) => { diff --git a/test/browser/rest-api/logging.test.ts b/test/browser/rest-api/logging.test.ts index 3718d4d8e..a0ef1b8bc 100644 --- a/test/browser/rest-api/logging.test.ts +++ b/test/browser/rest-api/logging.test.ts @@ -1,5 +1,5 @@ import { test, expect } from '../playwright.extend' -import { StatusCodeColor } from '../../../src/utils/logging/getStatusCodeColor' +import { StatusCodeColor } from '../../../src/core/utils/logging/getStatusCodeColor' import { waitFor } from '../../support/waitFor' test('prints a captured request info into browser console', async ({ @@ -13,7 +13,7 @@ test('prints a captured request info into browser console', async ({ await fetch('https://example.com/users/octocat') await waitFor(() => { - expect(consoleSpy.get('raw').get('startGroupCollapsed')).toEqual( + expect(consoleSpy.get('raw')?.get('startGroupCollapsed')).toEqual( expect.arrayContaining([ expect.stringMatching( new RegExp( diff --git a/test/browser/tsconfig.json b/test/browser/tsconfig.json new file mode 100644 index 000000000..07364f1ed --- /dev/null +++ b/test/browser/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "strict": true, + "noEmit": true, + "target": "esnext", + "module": "esnext", + "moduleResolution": "node16", + "customConditions": ["browser"] + }, + "include": ["**/*.mocks.ts"] +} diff --git a/test/node/rest-api/cookies-inheritance.node.test.ts b/test/node/rest-api/cookies-inheritance.node.test.ts index 5d44f17ea..4ec8903cf 100644 --- a/test/node/rest-api/cookies-inheritance.node.test.ts +++ b/test/node/rest-api/cookies-inheritance.node.test.ts @@ -2,12 +2,11 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { HttpResponse, rest } from 'msw' -import { setupServer, SetupServerApi } from 'msw/node' +import { HttpResponse, rest, setupServer, SetupServer } from 'msw' import { HttpServer } from '@open-draft/test-server/http' import { RequestHandler as ExpressRequestHandler } from 'express' -let server: SetupServerApi +let server: SetupServer const httpServer = new HttpServer((app) => { const handler: ExpressRequestHandler = (req, res) => { diff --git a/test/typings/rest.test-d.ts b/test/typings/rest.test-d.ts index 8190c3be6..0d9b3228c 100644 --- a/test/typings/rest.test-d.ts +++ b/test/typings/rest.test-d.ts @@ -1,4 +1,4 @@ -import { rest, HttpResponse } from '../../src' +import { rest, HttpResponse } from 'msw' /** * Request path parameters. diff --git a/tsconfig.json b/tsconfig.json index fcf4b37ed..ca667b891 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,12 @@ "declaration": true, "declarationDir": "lib/types", "noEmit": true, - "lib": ["es2017", "ESNext.AsyncIterable", "dom", "webworker"] + "lib": ["es2017", "ESNext.AsyncIterable", "dom", "webworker"], + "baseUrl": "./src", + "paths": { + "~/core": ["./core"], + "~/core/*": ["./core/*"] + } }, "include": ["global.d.ts", "src/**/*.ts"], "exclude": ["node_modules", "**/*.spec.ts", "**/*.test.ts"] diff --git a/tsup.config.ts b/tsup.config.ts index d46729c43..a92f6d7c2 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -1,59 +1,84 @@ import { defineConfig, Options } from 'tsup' +import * as glob from 'glob' import { getWorkerChecksum, copyWorkerPlugin, } from './config/plugins/esbuild/copyWorkerPlugin' +import { resolveCoreImportsPlugin } from './config/plugins/esbuild/resolveCoreImportsPlugin' +import { forceEsmExtensionsPlugin } from './config/plugins/esbuild/forceEsmExtensionsPlugin' -// Prevent from bunlding the "@mswjs/*" packages -// so that the users get the latest versions without -// having to bump them in "msw'." +// Externalize the in-house dependencies so that the user +// would get the latest published version automatically. const ecosystemDependencies = /^@mswjs\/(.+)$/ +// Externalize the core functionality (reused across environments) +// so that it can be shared between the environments. +const mswCore = /\/core(\/.+)?$/ + const SERVICE_WORKER_CHECKSUM = getWorkerChecksum() -const nodeConfig: Options = { - name: 'node', - platform: 'node', - entry: ['./src/index.ts', './src/node/index.ts'], - inject: ['./config/polyfills-node.ts'], +const coreConfig: Options = { + name: 'core', + platform: 'neutral', + entry: glob.sync('./src/core/**/*.ts', { + ignore: '**/*.test.ts', + }), external: [ecosystemDependencies], format: ['esm', 'cjs'], - outDir: './lib/node', - sourcemap: true, - clean: true, - bundle: true, + outDir: './lib/core', + bundle: false, splitting: false, dts: true, + esbuildPlugins: [forceEsmExtensionsPlugin()], } -const reactNativeConfig: Options = { - name: 'react-native', +const nodeConfig: Options = { + name: 'node', platform: 'node', - entry: ['./src/native/index.ts'], + entry: ['./src/node/index.ts'], + inject: ['./config/polyfills-node.ts'], + external: [mswCore, ecosystemDependencies], format: ['esm', 'cjs'], - outDir: './lib/native', - clean: true, + outDir: './lib/node', + sourcemap: false, bundle: true, splitting: false, - external: ['chalk', 'util', 'events', ecosystemDependencies], dts: true, + + esbuildPlugins: [resolveCoreImportsPlugin(), forceEsmExtensionsPlugin()], } const browserConfig: Options = { name: 'browser', platform: 'browser', entry: ['./src/browser/index.ts'], - external: [ecosystemDependencies], + external: [mswCore, ecosystemDependencies], format: ['esm', 'cjs'], outDir: './lib/browser', - clean: true, bundle: true, splitting: false, dts: true, define: { SERVICE_WORKER_CHECKSUM: JSON.stringify(SERVICE_WORKER_CHECKSUM), }, - esbuildPlugins: [copyWorkerPlugin(SERVICE_WORKER_CHECKSUM)], + esbuildPlugins: [ + resolveCoreImportsPlugin(), + forceEsmExtensionsPlugin(), + copyWorkerPlugin(SERVICE_WORKER_CHECKSUM), + ], +} + +const reactNativeConfig: Options = { + name: 'react-native', + platform: 'node', + entry: ['./src/native/index.ts'], + external: ['chalk', 'util', 'events', mswCore, ecosystemDependencies], + format: ['esm', 'cjs'], + outDir: './lib/native', + bundle: true, + splitting: false, + dts: true, + esbuildPlugins: [resolveCoreImportsPlugin(), forceEsmExtensionsPlugin()], } const iifeConfig: Options = { @@ -64,9 +89,7 @@ const iifeConfig: Options = { outDir: './lib', format: ['iife'], legacyOutput: true, - clean: true, bundle: true, - sourcemap: true, splitting: false, dts: false, define: { @@ -77,6 +100,7 @@ const iifeConfig: Options = { } export default defineConfig([ + coreConfig, nodeConfig, reactNativeConfig, browserConfig, From 651e1a8800facfc3bc4a22fdc0a6751e85053272 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 12 Apr 2023 00:05:13 +0200 Subject: [PATCH 094/210] feat: export browser integration from "msw/browser" (#1591) * feat: export browser integration from "msw/browser" * test(cookies-inheritance): import "setupServer" from "msw/node" * chore: adjust exports validation --- README.md | 3 +- browser/package.json | 5 ++ config/scripts/validate-esm.js | 65 ++++++------------- package.json | 41 ++++++------ src/browser/index.ts | 4 -- src/iife/index.ts | 2 + src/node/index.ts | 2 - test/browser/graphql-api/cookies.mocks.ts | 3 +- .../graphql-api/document-node.mocks.ts | 5 +- test/browser/graphql-api/errors.mocks.ts | 3 +- test/browser/graphql-api/extensions.mocks.ts | 3 +- test/browser/graphql-api/link.mocks.ts | 3 +- test/browser/graphql-api/logging.mocks.ts | 3 +- .../graphql-api/multipart-data.mocks.ts | 3 +- test/browser/graphql-api/mutation.mocks.ts | 3 +- .../graphql-api/operation-reference.mocks.ts | 3 +- test/browser/graphql-api/operation.mocks.ts | 3 +- test/browser/graphql-api/query.mocks.ts | 3 +- .../graphql-api/response-patching.mocks.ts | 3 +- .../graphql-api/response-patching.test.ts | 2 +- test/browser/graphql-api/variables.mocks.ts | 3 +- test/browser/msw-api/context/delay.mocks.ts | 3 +- .../msw-api/exception-handling.mocks.ts | 3 +- test/browser/msw-api/hard-reload.mocks.ts | 3 +- .../msw-api/integrity-check-invalid.mocks.ts | 3 +- .../msw-api/integrity-check-valid.mocks.ts | 3 +- .../msw-api/regression/handle-stream.mocks.ts | 2 +- .../msw-api/regression/null-body.mocks.ts | 3 +- test/browser/msw-api/req/passthrough.mocks.ts | 3 +- .../msw-api/res/network-error.mocks.ts | 3 +- .../fallback-mode/fallback-mode.mocks.ts | 3 +- .../fallback-mode/fallback-mode.test.ts | 2 +- .../setup-worker/input-validation.mocks.ts | 3 +- .../life-cycle-events/on.mocks.ts | 3 +- .../removeAllListeners.test.ts | 2 +- .../life-cycle-events/removeListener.test.ts | 2 +- .../setup-worker/listHandlers.mocks.ts | 5 +- .../msw-api/setup-worker/listHandlers.test.ts | 3 +- .../setup-worker/printHandlers.mocks.ts | 3 +- .../setup-worker/printHandlers.test.ts | 7 +- .../setup-worker/resetHandlers.test.ts | 3 +- .../setup-worker/restoreHandlers.test.ts | 3 +- .../scenarios/custom-transformers.mocks.ts | 3 +- .../scenarios/errors/internal-error.mocks.ts | 3 +- .../scenarios/errors/network-error.mocks.ts | 3 +- .../scenarios/fall-through.mocks.ts | 3 +- .../scenarios/iframe/iframe.mocks.ts | 3 +- .../scope/scope-nested-quiet.mocks.ts | 2 +- .../scenarios/scope/scope-nested.mocks.ts | 2 +- .../scenarios/scope/scope-root.mocks.ts | 2 +- .../shared-worker/shared-worker.mocks.ts | 2 +- .../scenarios/text-event-stream.mocks.ts | 3 +- .../msw-api/setup-worker/start/error.mocks.ts | 3 +- .../msw-api/setup-worker/start/error.test.ts | 2 +- .../start/find-worker.error.mocks.ts | 7 +- .../setup-worker/start/find-worker.mocks.ts | 9 +-- .../setup-worker/start/find-worker.test.ts | 2 +- .../on-unhandled-request/bypass.mocks.ts | 3 +- .../callback-print.mocks.ts | 3 +- .../callback-throws.mocks.ts | 3 +- .../on-unhandled-request/callback.mocks.ts | 3 +- .../on-unhandled-request/default.mocks.ts | 3 +- .../start/on-unhandled-request/error.mocks.ts | 3 +- .../suggestions.graphql.test.ts | 19 +++--- .../on-unhandled-request/suggestions.mocks.ts | 3 +- .../suggestions.rest.test.ts | 17 ++--- .../start/on-unhandled-request/warn.mocks.ts | 3 +- .../start/options-sw-scope.mocks.ts | 3 +- .../msw-api/setup-worker/start/quiet.mocks.ts | 3 +- .../msw-api/setup-worker/start/quiet.test.ts | 2 +- .../msw-api/setup-worker/start/start.mocks.ts | 3 +- .../msw-api/setup-worker/start/start.test.ts | 2 +- .../start/wait-until-ready.error.mocks.ts | 11 ++-- .../start/wait-until-ready.false.mocks.ts | 11 ++-- .../start/wait-until-ready.mocks.ts | 3 +- .../msw-api/setup-worker/stop.mocks.ts | 3 +- .../browser/msw-api/setup-worker/stop.test.ts | 2 +- .../msw-api/setup-worker/stop/quiet.mocks.ts | 2 +- .../msw-api/setup-worker/stop/quiet.test.ts | 2 +- .../stop/removes-all-listeners.mocks.ts | 3 +- .../stop/removes-all-listeners.test.ts | 2 +- .../browser/msw-api/setup-worker/use.mocks.ts | 3 +- test/browser/msw-api/setup-worker/use.test.ts | 3 +- test/browser/msw-api/unregister.mocks.ts | 3 +- test/browser/msw-api/unregister.test.ts | 2 +- test/browser/rest-api/basic.mocks.ts | 3 +- test/browser/rest-api/basic.test.ts | 8 ++- test/browser/rest-api/body.mocks.ts | 3 +- test/browser/rest-api/context.mocks.ts | 3 +- .../rest-api/cookies-inheritance.mocks.ts | 3 +- .../browser/rest-api/cookies-request.mocks.ts | 3 +- test/browser/rest-api/cookies.mocks.ts | 3 +- test/browser/rest-api/cors.mocks.ts | 2 +- test/browser/rest-api/generator.mocks.ts | 3 +- .../rest-api/headers-multiple.mocks.ts | 3 +- test/browser/rest-api/params.mocks.ts | 8 +-- .../rest-api/query-params-warning.mocks.ts | 3 +- test/browser/rest-api/query.mocks.ts | 3 +- test/browser/rest-api/redirect.mocks.ts | 3 +- .../rest-api/request/body/body.mocks.ts | 3 +- .../rest-api/request/matching/all.mocks.ts | 3 +- .../rest-api/request/matching/method.mocks.ts | 3 +- .../matching/path-params-decode.mocks.ts | 3 +- .../rest-api/request/matching/uri.mocks.ts | 3 +- .../rest-api/response-patching.mocks.ts | 3 +- .../response/body/body-binary.mocks.ts | 3 +- .../rest-api/response/body/body-json.mocks.ts | 3 +- .../rest-api/response/body/body-text.mocks.ts | 3 +- .../rest-api/response/body/body-xml.mocks.ts | 3 +- test/browser/rest-api/status.mocks.ts | 3 +- test/browser/rest-api/xhr.mocks.ts | 3 +- test/browser/setup/webpackHttpServer.ts | 2 +- test/browser/tsconfig.json | 11 ---- .../rest-api/cookies-inheritance.node.test.ts | 3 +- tsup.config.ts | 6 +- 115 files changed, 283 insertions(+), 228 deletions(-) create mode 100644 browser/package.json create mode 100644 src/iife/index.ts delete mode 100644 test/browser/tsconfig.json diff --git a/README.md b/README.md index 74ab01d4b..3a9aec2ce 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,8 @@ In-browser usage is what sets Mock Service Worker apart from other tools. Utiliz ```js // src/mocks.js // 1. Import the library. -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' // 2. Describe network behavior with request handlers. const worker = setupWorker( diff --git a/browser/package.json b/browser/package.json new file mode 100644 index 000000000..d29733135 --- /dev/null +++ b/browser/package.json @@ -0,0 +1,5 @@ +{ + "main": "../lib/browser/index.js", + "module": "../lib/browser/index.mjs", + "types": "../lib/browser/index.d.ts" +} diff --git a/config/scripts/validate-esm.js b/config/scripts/validate-esm.js index 045e3f7fa..c8c7a43b9 100644 --- a/config/scripts/validate-esm.js +++ b/config/scripts/validate-esm.js @@ -16,7 +16,7 @@ function validatePackageExports() { // Validate the "main", "browser", and "types" root fields. invariant('main' in PKG_JSON, 'Missing "main" field in package.json') - invariant('browser' in PKG_JSON, 'Missing "browser" field in package.json') + invariant('module' in PKG_JSON, 'Missing "module" field in package.json') invariant('types' in PKG_JSON, 'Missing "types" field in package.json') invariant( @@ -24,65 +24,40 @@ function validatePackageExports() { 'The "main" field points at a non-existing path at "%s"', PKG_JSON.main, ) - invariant( - fs.existsSync(fromRoot(PKG_JSON.browser)), - 'The "browser" field points at a non-existing path at "%s"', - PKG_JSON.browser, - ) - invariant( - fs.existsSync(fromRoot(PKG_JSON.types)), - 'The "types" field points at a non-existing path at "%s"', - PKG_JSON.types, - ) // The "exports" key must be present. invariant(exports, 'package.json must have an "exports" field') // The "exports" must list expected paths. - const expectedExportPaths = ['.', './node', './package.json', './native'] + const expectedExportPaths = [ + '.', + './browser', + './node', + './package.json', + './native', + ] expectedExportPaths.forEach((exportPath) => { invariant(exportPath in exports, 'Missing exports path "%s"', exportPath) }) // Must describe the root export properly. const rootExport = exports['.'] - const expectedRootExportPaths = ['browser', 'node'] - - expectedRootExportPaths.forEach((rootExportPath) => { - invariant( - rootExportPath in rootExport, - 'Missing root export path "%s"', - rootExportPath, - ) - }) - const rootExportKeys = Object.keys(rootExport) + validateExportConditions(`exports['.']`, rootExport) + validateBundle(rootExport.require, false) + validateBundle(rootExport.import, true) + validateTypeDefs(rootExport.types) + // Validate "./browser" exports. + const browserExports = exports['./browser'] + validateExportConditions(`exports['./browser']`, browserExports) invariant( - rootExportKeys.includes('browser'), - 'Missing "browser" root-level export', + browserExports.node === null, + 'The "browser" export must set the "node" field to null', ) - invariant( - rootExportKeys.includes('node'), - 'Missing "import" root-level export', - ) - - // Listing the "browser" field first is crucial when forcing TS - // to resolve the "browser" field first. - invariant( - rootExportKeys[0] === 'browser', - 'Must list the "browser" field first in the root-level exports', - ) - - validateExportConditions(`exports['.'].browser`, rootExport.browser) - validateBundle(rootExport.browser.require, false) - validateBundle(rootExport.browser.import, true) - validateTypeDefs(rootExport.browser.types) - - validateExportConditions(`exports['.'].node`, rootExport.node) - validateBundle(rootExport.node.require, false) - validateBundle(rootExport.node.import, true) - validateTypeDefs(rootExport.node.types) + validateBundle(browserExports.require, false) + validateBundle(browserExports.import, true) + validateTypeDefs(browserExports.types) // Validate "./node" exports. const nodeExports = exports['./node'] diff --git a/package.json b/package.json index 1b5847286..4c6e81fc1 100644 --- a/package.json +++ b/package.json @@ -2,30 +2,22 @@ "name": "msw", "version": "0.0.0-fetch.rc-8", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", - "main": "./lib/node/index.js", - "types": "./lib/node/index.d.ts", - "browser": "./lib/browser/index.js", + "main": "./lib/core/index.js", + "module": "./lib/core/index.mjs", + "types": "./lib/core/index.d.ts", "exports": { ".": { - "browser": { - "types": "./lib/browser/index.d.ts", - "import": "./lib/browser/index.mjs", - "require": "./lib/browser/index.js", - "default": "./lib/browser/index.js" - }, - "node": { - "types": "./lib/node/index.d.ts", - "import": "./lib/node/index.mjs", - "require": "./lib/node/index.js", - "default": "./lib/node/index.js" - } + "types": "./lib/core/index.d.ts", + "require": "./lib/core/index.js", + "import": "./lib/core/index.mjs", + "default": "./lib/core/index.js" }, - "./native": { - "browser": null, - "types": "./lib/native/index.d.ts", - "import": "./lib/native/index.mjs", - "require": "./lib/native/index.js", - "default": "./lib/native/index.js" + "./browser": { + "node": null, + "types": "./lib/browser/index.d.ts", + "require": "./lib/browser/index.js", + "import": "./lib/browser/index.mjs", + "default": "./lib/browser/index.js" }, "./node": { "browser": null, @@ -34,6 +26,13 @@ "import": "./lib/node/index.mjs", "default": "./lib/node/index.mjs" }, + "./native": { + "browser": null, + "types": "./lib/native/index.d.ts", + "require": "./lib/native/index.js", + "import": "./lib/native/index.mjs", + "default": "./lib/native/index.js" + }, "./package.json": "./package.json" }, "bin": { diff --git a/src/browser/index.ts b/src/browser/index.ts index 48b31d08d..0eafbe76f 100644 --- a/src/browser/index.ts +++ b/src/browser/index.ts @@ -1,7 +1,3 @@ -// Re-export the code MSW API (e.g. "rest", "RequestHandler") because -// they are available from the "msw" (browser) root-level export. -export * from '~/core' - export { setupWorker } from './setupWorker/setupWorker' export type { SetupWorker, StartOptions } from './setupWorker/glossary' export { SetupWorkerApi } from './setupWorker/setupWorker' diff --git a/src/iife/index.ts b/src/iife/index.ts new file mode 100644 index 000000000..189ebc2ec --- /dev/null +++ b/src/iife/index.ts @@ -0,0 +1,2 @@ +export * from '~/core' +export * from '../browser' diff --git a/src/node/index.ts b/src/node/index.ts index 3ea073c4e..d9b2ea46c 100644 --- a/src/node/index.ts +++ b/src/node/index.ts @@ -1,5 +1,3 @@ -export * from '~/core' - export type { SetupServer } from './glossary' export { SetupServerApi } from './SetupServerApi' export { setupServer } from './setupServer' diff --git a/test/browser/graphql-api/cookies.mocks.ts b/test/browser/graphql-api/cookies.mocks.ts index 197395a35..7cd387da2 100644 --- a/test/browser/graphql-api/cookies.mocks.ts +++ b/test/browser/graphql-api/cookies.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, graphql, HttpResponse } from 'msw' +import { graphql, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( graphql.query('GetUser', () => { diff --git a/test/browser/graphql-api/document-node.mocks.ts b/test/browser/graphql-api/document-node.mocks.ts index b126ede62..38d66056e 100644 --- a/test/browser/graphql-api/document-node.mocks.ts +++ b/test/browser/graphql-api/document-node.mocks.ts @@ -1,5 +1,6 @@ import { parse } from 'graphql' -import { setupWorker, graphql, HttpResponse } from 'msw' +import { graphql, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const GetUser = parse(` query GetUser { @@ -44,7 +45,7 @@ const worker = setupWorker( }, }) }), - graphql.mutation(Login, ({ variables }) => { + graphql.mutation(Login, ({ variables }) => { return HttpResponse.json({ data: { session: { diff --git a/test/browser/graphql-api/errors.mocks.ts b/test/browser/graphql-api/errors.mocks.ts index 35a69f1f5..18b98088a 100644 --- a/test/browser/graphql-api/errors.mocks.ts +++ b/test/browser/graphql-api/errors.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, graphql, HttpResponse } from 'msw' +import { graphql, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( graphql.query('Login', () => { diff --git a/test/browser/graphql-api/extensions.mocks.ts b/test/browser/graphql-api/extensions.mocks.ts index 99b648c27..8981bf8cb 100644 --- a/test/browser/graphql-api/extensions.mocks.ts +++ b/test/browser/graphql-api/extensions.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, graphql, HttpResponse } from 'msw' +import { graphql, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' interface LoginQuery { user: { diff --git a/test/browser/graphql-api/link.mocks.ts b/test/browser/graphql-api/link.mocks.ts index b2f03b2e6..9e25b356e 100644 --- a/test/browser/graphql-api/link.mocks.ts +++ b/test/browser/graphql-api/link.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, graphql, HttpResponse } from 'msw' +import { graphql, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const github = graphql.link('https://api.github.com/graphql') const stripe = graphql.link('https://api.stripe.com/graphql') diff --git a/test/browser/graphql-api/logging.mocks.ts b/test/browser/graphql-api/logging.mocks.ts index d5242b29e..b24f7a270 100644 --- a/test/browser/graphql-api/logging.mocks.ts +++ b/test/browser/graphql-api/logging.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, graphql, HttpResponse } from 'msw' +import { graphql, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' interface GetUserDetailQuery { user: { diff --git a/test/browser/graphql-api/multipart-data.mocks.ts b/test/browser/graphql-api/multipart-data.mocks.ts index b889744ea..4732768e5 100644 --- a/test/browser/graphql-api/multipart-data.mocks.ts +++ b/test/browser/graphql-api/multipart-data.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, graphql, HttpResponse } from 'msw' +import { graphql, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( graphql.mutation< diff --git a/test/browser/graphql-api/mutation.mocks.ts b/test/browser/graphql-api/mutation.mocks.ts index 897fda676..1a6253433 100644 --- a/test/browser/graphql-api/mutation.mocks.ts +++ b/test/browser/graphql-api/mutation.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, graphql, HttpResponse } from 'msw' +import { graphql, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' interface LogoutQuery { logout: { diff --git a/test/browser/graphql-api/operation-reference.mocks.ts b/test/browser/graphql-api/operation-reference.mocks.ts index 66ec325e7..a0137d52c 100644 --- a/test/browser/graphql-api/operation-reference.mocks.ts +++ b/test/browser/graphql-api/operation-reference.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, graphql, HttpResponse } from 'msw' +import { graphql, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( graphql.query('GetUser', async ({ query, variables }) => { diff --git a/test/browser/graphql-api/operation.mocks.ts b/test/browser/graphql-api/operation.mocks.ts index ce7dcf1c2..f5ecc0fc4 100644 --- a/test/browser/graphql-api/operation.mocks.ts +++ b/test/browser/graphql-api/operation.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, graphql, HttpResponse } from 'msw' +import { graphql, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( graphql.operation(async ({ query, variables }) => { diff --git a/test/browser/graphql-api/query.mocks.ts b/test/browser/graphql-api/query.mocks.ts index 249fb8f24..740a4d8f9 100644 --- a/test/browser/graphql-api/query.mocks.ts +++ b/test/browser/graphql-api/query.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, graphql, HttpResponse } from 'msw' +import { graphql, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' interface GetUserDetailQuery { user: { diff --git a/test/browser/graphql-api/response-patching.mocks.ts b/test/browser/graphql-api/response-patching.mocks.ts index 90effbdca..03473e939 100644 --- a/test/browser/graphql-api/response-patching.mocks.ts +++ b/test/browser/graphql-api/response-patching.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, graphql, bypass, HttpResponse } from 'msw' +import { graphql, bypass, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' import { createGraphQLClient, gql } from '../../support/graphql' interface GetUserQuery { diff --git a/test/browser/graphql-api/response-patching.test.ts b/test/browser/graphql-api/response-patching.test.ts index fc3e389ee..3a175d37d 100644 --- a/test/browser/graphql-api/response-patching.test.ts +++ b/test/browser/graphql-api/response-patching.test.ts @@ -1,6 +1,6 @@ import type { ExecutionResult } from 'graphql' import { buildSchema, graphql } from 'graphql' -import { SetupWorkerApi } from 'msw' +import { SetupWorkerApi } from 'msw/browser' import { HttpServer } from '@open-draft/test-server/http' import { test, expect } from '../playwright.extend' import { gql } from '../../support/graphql' diff --git a/test/browser/graphql-api/variables.mocks.ts b/test/browser/graphql-api/variables.mocks.ts index 48f1c9a6a..ad13674f6 100644 --- a/test/browser/graphql-api/variables.mocks.ts +++ b/test/browser/graphql-api/variables.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, graphql, HttpResponse } from 'msw' +import { graphql, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' interface GetGitHubUserQuery { user: { diff --git a/test/browser/msw-api/context/delay.mocks.ts b/test/browser/msw-api/context/delay.mocks.ts index 271533a5a..d6a9e3e4d 100644 --- a/test/browser/msw-api/context/delay.mocks.ts +++ b/test/browser/msw-api/context/delay.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, delay, DelayMode, HttpResponse } from 'msw' +import { rest, delay, DelayMode, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/delay', async ({ request }) => { diff --git a/test/browser/msw-api/exception-handling.mocks.ts b/test/browser/msw-api/exception-handling.mocks.ts index 0b4dba0ad..9a5a72dd3 100644 --- a/test/browser/msw-api/exception-handling.mocks.ts +++ b/test/browser/msw-api/exception-handling.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest } from 'msw' +import { rest } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('https://api.github.com/users/:username', () => { diff --git a/test/browser/msw-api/hard-reload.mocks.ts b/test/browser/msw-api/hard-reload.mocks.ts index ad329259a..d9bcccebe 100644 --- a/test/browser/msw-api/hard-reload.mocks.ts +++ b/test/browser/msw-api/hard-reload.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('https://example.com/resource', () => { diff --git a/test/browser/msw-api/integrity-check-invalid.mocks.ts b/test/browser/msw-api/integrity-check-invalid.mocks.ts index b886cbbf0..c8fe5ff89 100644 --- a/test/browser/msw-api/integrity-check-invalid.mocks.ts +++ b/test/browser/msw-api/integrity-check-invalid.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('https://example.com/users/:username', () => { diff --git a/test/browser/msw-api/integrity-check-valid.mocks.ts b/test/browser/msw-api/integrity-check-valid.mocks.ts index 5999e58ab..740ad1ae9 100644 --- a/test/browser/msw-api/integrity-check-valid.mocks.ts +++ b/test/browser/msw-api/integrity-check-valid.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('https://example.com/users/octocat', () => { diff --git a/test/browser/msw-api/regression/handle-stream.mocks.ts b/test/browser/msw-api/regression/handle-stream.mocks.ts index 6a8eac4e7..b0516a2ef 100644 --- a/test/browser/msw-api/regression/handle-stream.mocks.ts +++ b/test/browser/msw-api/regression/handle-stream.mocks.ts @@ -1,4 +1,4 @@ -import { setupWorker } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker() diff --git a/test/browser/msw-api/regression/null-body.mocks.ts b/test/browser/msw-api/regression/null-body.mocks.ts index 09256af23..0fd27d6c1 100644 --- a/test/browser/msw-api/regression/null-body.mocks.ts +++ b/test/browser/msw-api/regression/null-body.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/api/books', () => { diff --git a/test/browser/msw-api/req/passthrough.mocks.ts b/test/browser/msw-api/req/passthrough.mocks.ts index 09cef966a..1c3859987 100644 --- a/test/browser/msw-api/req/passthrough.mocks.ts +++ b/test/browser/msw-api/req/passthrough.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, passthrough, HttpResponse } from 'msw' +import { rest, passthrough, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.post('/', () => { diff --git a/test/browser/msw-api/res/network-error.mocks.ts b/test/browser/msw-api/res/network-error.mocks.ts index 5ac0bc65f..53e7ebb8e 100644 --- a/test/browser/msw-api/res/network-error.mocks.ts +++ b/test/browser/msw-api/res/network-error.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, NetworkError } from 'msw' +import { rest, NetworkError } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/user', () => { diff --git a/test/browser/msw-api/setup-worker/fallback-mode/fallback-mode.mocks.ts b/test/browser/msw-api/setup-worker/fallback-mode/fallback-mode.mocks.ts index 870cf8a87..7fd67c1b2 100644 --- a/test/browser/msw-api/setup-worker/fallback-mode/fallback-mode.mocks.ts +++ b/test/browser/msw-api/setup-worker/fallback-mode/fallback-mode.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('*/user', () => { diff --git a/test/browser/msw-api/setup-worker/fallback-mode/fallback-mode.test.ts b/test/browser/msw-api/setup-worker/fallback-mode/fallback-mode.test.ts index ea007ba02..7fc0243f9 100644 --- a/test/browser/msw-api/setup-worker/fallback-mode/fallback-mode.test.ts +++ b/test/browser/msw-api/setup-worker/fallback-mode/fallback-mode.test.ts @@ -1,4 +1,4 @@ -import { SetupWorkerApi } from 'msw' +import { SetupWorkerApi } from 'msw/browser' import { createTeardown } from 'fs-teardown' import { Page } from '@playwright/test' import { HttpServer } from '@open-draft/test-server/http' diff --git a/test/browser/msw-api/setup-worker/input-validation.mocks.ts b/test/browser/msw-api/setup-worker/input-validation.mocks.ts index aeb95cd67..6f0b1af37 100644 --- a/test/browser/msw-api/setup-worker/input-validation.mocks.ts +++ b/test/browser/msw-api/setup-worker/input-validation.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' // The next line will be ignored because we want to test that an Error // should be trown when `setupWorker` parameters are not valid diff --git a/test/browser/msw-api/setup-worker/life-cycle-events/on.mocks.ts b/test/browser/msw-api/setup-worker/life-cycle-events/on.mocks.ts index 0375a02fa..95e949189 100644 --- a/test/browser/msw-api/setup-worker/life-cycle-events/on.mocks.ts +++ b/test/browser/msw-api/setup-worker/life-cycle-events/on.mocks.ts @@ -1,4 +1,5 @@ -import { HttpResponse, rest, setupWorker, LifeCycleEventsMap } from 'msw' +import { HttpResponse, rest, LifeCycleEventsMap } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('*/user', () => { diff --git a/test/browser/msw-api/setup-worker/life-cycle-events/removeAllListeners.test.ts b/test/browser/msw-api/setup-worker/life-cycle-events/removeAllListeners.test.ts index a8995f93f..eb83c38f0 100644 --- a/test/browser/msw-api/setup-worker/life-cycle-events/removeAllListeners.test.ts +++ b/test/browser/msw-api/setup-worker/life-cycle-events/removeAllListeners.test.ts @@ -1,4 +1,4 @@ -import { SetupWorkerApi } from 'msw' +import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../../playwright.extend' declare namespace window { diff --git a/test/browser/msw-api/setup-worker/life-cycle-events/removeListener.test.ts b/test/browser/msw-api/setup-worker/life-cycle-events/removeListener.test.ts index 6752e2f35..eb9855fd1 100644 --- a/test/browser/msw-api/setup-worker/life-cycle-events/removeListener.test.ts +++ b/test/browser/msw-api/setup-worker/life-cycle-events/removeListener.test.ts @@ -1,4 +1,4 @@ -import { SetupWorkerApi } from 'msw' +import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../../playwright.extend' declare namespace window { diff --git a/test/browser/msw-api/setup-worker/listHandlers.mocks.ts b/test/browser/msw-api/setup-worker/listHandlers.mocks.ts index e35b6214e..65df4666e 100644 --- a/test/browser/msw-api/setup-worker/listHandlers.mocks.ts +++ b/test/browser/msw-api/setup-worker/listHandlers.mocks.ts @@ -1,6 +1,7 @@ -import { setupWorker, rest, graphql } from 'msw' +import { rest, graphql } from 'msw' +import { setupWorker } from 'msw/browser' -const resolver = () => null +const resolver = () => void 0 const github = graphql.link('https://api.github.com') diff --git a/test/browser/msw-api/setup-worker/listHandlers.test.ts b/test/browser/msw-api/setup-worker/listHandlers.test.ts index 64ddfa3e0..69fbdc113 100644 --- a/test/browser/msw-api/setup-worker/listHandlers.test.ts +++ b/test/browser/msw-api/setup-worker/listHandlers.test.ts @@ -1,4 +1,5 @@ -import { SetupWorkerApi, rest, graphql } from 'msw' +import { rest, graphql } from 'msw' +import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../playwright.extend' declare namespace window { diff --git a/test/browser/msw-api/setup-worker/printHandlers.mocks.ts b/test/browser/msw-api/setup-worker/printHandlers.mocks.ts index 492047022..97f13c3aa 100644 --- a/test/browser/msw-api/setup-worker/printHandlers.mocks.ts +++ b/test/browser/msw-api/setup-worker/printHandlers.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, graphql } from 'msw' +import { rest, graphql } from 'msw' +import { setupWorker } from 'msw/browser' const resolver = () => void 0 diff --git a/test/browser/msw-api/setup-worker/printHandlers.test.ts b/test/browser/msw-api/setup-worker/printHandlers.test.ts index 45447143a..ffbfae671 100644 --- a/test/browser/msw-api/setup-worker/printHandlers.test.ts +++ b/test/browser/msw-api/setup-worker/printHandlers.test.ts @@ -1,4 +1,5 @@ -import { SetupWorkerApi, rest, graphql } from 'msw' +import { rest, graphql } from 'msw' +import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../playwright.extend' declare namespace window { @@ -53,8 +54,8 @@ test('includes runtime request handlers', async ({ await page.evaluate(() => { const { worker, rest, graphql } = window.msw worker.use( - rest.post('/profile', () => null), - graphql.query('SubmitTransaction', () => null), + rest.post('/profile', () => void 0), + graphql.query('SubmitTransaction', () => void 0), ) worker.printHandlers() diff --git a/test/browser/msw-api/setup-worker/resetHandlers.test.ts b/test/browser/msw-api/setup-worker/resetHandlers.test.ts index e4659ccf8..0660147ad 100644 --- a/test/browser/msw-api/setup-worker/resetHandlers.test.ts +++ b/test/browser/msw-api/setup-worker/resetHandlers.test.ts @@ -1,4 +1,5 @@ -import { SetupWorkerApi, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../playwright.extend' declare namespace window { diff --git a/test/browser/msw-api/setup-worker/restoreHandlers.test.ts b/test/browser/msw-api/setup-worker/restoreHandlers.test.ts index 0fc23dac1..fe552695d 100644 --- a/test/browser/msw-api/setup-worker/restoreHandlers.test.ts +++ b/test/browser/msw-api/setup-worker/restoreHandlers.test.ts @@ -1,4 +1,5 @@ -import { SetupWorkerApi, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../playwright.extend' declare namespace window { diff --git a/test/browser/msw-api/setup-worker/scenarios/custom-transformers.mocks.ts b/test/browser/msw-api/setup-worker/scenarios/custom-transformers.mocks.ts index 75e9ec353..f7ec33a21 100644 --- a/test/browser/msw-api/setup-worker/scenarios/custom-transformers.mocks.ts +++ b/test/browser/msw-api/setup-worker/scenarios/custom-transformers.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' import * as JSONbig from 'json-bigint' const worker = setupWorker( diff --git a/test/browser/msw-api/setup-worker/scenarios/errors/internal-error.mocks.ts b/test/browser/msw-api/setup-worker/scenarios/errors/internal-error.mocks.ts index 95137ba51..ad56cbf2c 100644 --- a/test/browser/msw-api/setup-worker/scenarios/errors/internal-error.mocks.ts +++ b/test/browser/msw-api/setup-worker/scenarios/errors/internal-error.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest } from 'msw' +import { rest } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/user', () => { diff --git a/test/browser/msw-api/setup-worker/scenarios/errors/network-error.mocks.ts b/test/browser/msw-api/setup-worker/scenarios/errors/network-error.mocks.ts index 5ac0bc65f..53e7ebb8e 100644 --- a/test/browser/msw-api/setup-worker/scenarios/errors/network-error.mocks.ts +++ b/test/browser/msw-api/setup-worker/scenarios/errors/network-error.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, NetworkError } from 'msw' +import { rest, NetworkError } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/user', () => { diff --git a/test/browser/msw-api/setup-worker/scenarios/fall-through.mocks.ts b/test/browser/msw-api/setup-worker/scenarios/fall-through.mocks.ts index d7cf8f72e..5f2f1f4dd 100644 --- a/test/browser/msw-api/setup-worker/scenarios/fall-through.mocks.ts +++ b/test/browser/msw-api/setup-worker/scenarios/fall-through.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('*', () => console.log('[get] first')), diff --git a/test/browser/msw-api/setup-worker/scenarios/iframe/iframe.mocks.ts b/test/browser/msw-api/setup-worker/scenarios/iframe/iframe.mocks.ts index a9a01ad59..3121e239f 100644 --- a/test/browser/msw-api/setup-worker/scenarios/iframe/iframe.mocks.ts +++ b/test/browser/msw-api/setup-worker/scenarios/iframe/iframe.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('*/user', () => { diff --git a/test/browser/msw-api/setup-worker/scenarios/scope/scope-nested-quiet.mocks.ts b/test/browser/msw-api/setup-worker/scenarios/scope/scope-nested-quiet.mocks.ts index fe9dc63b5..6d2a23463 100644 --- a/test/browser/msw-api/setup-worker/scenarios/scope/scope-nested-quiet.mocks.ts +++ b/test/browser/msw-api/setup-worker/scenarios/scope/scope-nested-quiet.mocks.ts @@ -1,4 +1,4 @@ -import { setupWorker } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker() diff --git a/test/browser/msw-api/setup-worker/scenarios/scope/scope-nested.mocks.ts b/test/browser/msw-api/setup-worker/scenarios/scope/scope-nested.mocks.ts index 256304a26..c0b3cf4e2 100644 --- a/test/browser/msw-api/setup-worker/scenarios/scope/scope-nested.mocks.ts +++ b/test/browser/msw-api/setup-worker/scenarios/scope/scope-nested.mocks.ts @@ -1,4 +1,4 @@ -import { setupWorker } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker() diff --git a/test/browser/msw-api/setup-worker/scenarios/scope/scope-root.mocks.ts b/test/browser/msw-api/setup-worker/scenarios/scope/scope-root.mocks.ts index 847c4b523..caff22f90 100644 --- a/test/browser/msw-api/setup-worker/scenarios/scope/scope-root.mocks.ts +++ b/test/browser/msw-api/setup-worker/scenarios/scope/scope-root.mocks.ts @@ -1,4 +1,4 @@ -import { setupWorker } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker() diff --git a/test/browser/msw-api/setup-worker/scenarios/shared-worker/shared-worker.mocks.ts b/test/browser/msw-api/setup-worker/scenarios/shared-worker/shared-worker.mocks.ts index 3294691f7..fb1b84362 100644 --- a/test/browser/msw-api/setup-worker/scenarios/shared-worker/shared-worker.mocks.ts +++ b/test/browser/msw-api/setup-worker/scenarios/shared-worker/shared-worker.mocks.ts @@ -1,4 +1,4 @@ -import { setupWorker } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker() diff --git a/test/browser/msw-api/setup-worker/scenarios/text-event-stream.mocks.ts b/test/browser/msw-api/setup-worker/scenarios/text-event-stream.mocks.ts index 7dd44e90a..fa561ffbc 100644 --- a/test/browser/msw-api/setup-worker/scenarios/text-event-stream.mocks.ts +++ b/test/browser/msw-api/setup-worker/scenarios/text-event-stream.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/user', () => { diff --git a/test/browser/msw-api/setup-worker/start/error.mocks.ts b/test/browser/msw-api/setup-worker/start/error.mocks.ts index a43a5da2d..2453a58b1 100644 --- a/test/browser/msw-api/setup-worker/start/error.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/error.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest } from 'msw' +import { rest } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/user', () => { diff --git a/test/browser/msw-api/setup-worker/start/error.test.ts b/test/browser/msw-api/setup-worker/start/error.test.ts index b690219be..a5e947113 100644 --- a/test/browser/msw-api/setup-worker/start/error.test.ts +++ b/test/browser/msw-api/setup-worker/start/error.test.ts @@ -1,4 +1,4 @@ -import { SetupWorkerApi } from 'msw' +import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../../playwright.extend' declare namespace window { diff --git a/test/browser/msw-api/setup-worker/start/find-worker.error.mocks.ts b/test/browser/msw-api/setup-worker/start/find-worker.error.mocks.ts index dde3f8513..6568b74bd 100644 --- a/test/browser/msw-api/setup-worker/start/find-worker.error.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/find-worker.error.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest } from 'msw' +import { rest } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/user', () => { @@ -15,10 +16,10 @@ window.msw = { return scriptURL.includes('some-bad-filename-that-does-not-exist.js') }, }) - .then((reg) => { + .then((registration) => { console.log('Registration Promise resolved') // This will throw as as there is no instance returned with a non-matching worker name. - return reg.constructor.name + return registration?.constructor.name }) .catch((error) => { console.error('Error - no worker instance after starting', error) diff --git a/test/browser/msw-api/setup-worker/start/find-worker.mocks.ts b/test/browser/msw-api/setup-worker/start/find-worker.mocks.ts index 93e80c20f..faef4a6a3 100644 --- a/test/browser/msw-api/setup-worker/start/find-worker.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/find-worker.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest } from 'msw' +import { rest } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/user', () => { @@ -15,8 +16,8 @@ window.msw = { return scriptURL === mockServiceWorkerUrl }, }) - .then((reg) => { - console.log('Registration Promise resolved', reg) - return reg.constructor.name + .then((registration) => { + console.log('Registration Promise resolved', registration) + return registration?.constructor.name }), } diff --git a/test/browser/msw-api/setup-worker/start/find-worker.test.ts b/test/browser/msw-api/setup-worker/start/find-worker.test.ts index d09d34654..0c3c6ed7e 100644 --- a/test/browser/msw-api/setup-worker/start/find-worker.test.ts +++ b/test/browser/msw-api/setup-worker/start/find-worker.test.ts @@ -1,4 +1,4 @@ -import { SetupWorkerApi } from 'msw' +import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../../playwright.extend' declare namespace window { diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/bypass.mocks.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/bypass.mocks.ts index 1c4dc5602..7ad72cd39 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/bypass.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/bypass.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/user', () => { diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback-print.mocks.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback-print.mocks.ts index eaf3e8385..8d92e98ec 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback-print.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback-print.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/user', () => { diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback-throws.mocks.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback-throws.mocks.ts index 8fe930b55..e4ca3c42f 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback-throws.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback-throws.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/user', () => { diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback.mocks.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback.mocks.ts index 2e6675ce2..6d2a8a5cd 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/user', () => { diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/default.mocks.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/default.mocks.ts index 25174a8a0..7b26a7334 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/default.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/default.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/user', () => { diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/error.mocks.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/error.mocks.ts index f1060fd07..7a3a41d2b 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/error.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/error.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/user', () => { diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/suggestions.graphql.test.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/suggestions.graphql.test.ts index d242edf7a..1bbdfd001 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/suggestions.graphql.test.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/suggestions.graphql.test.ts @@ -1,4 +1,5 @@ -import { SetupWorkerApi, graphql } from 'msw' +import { graphql } from 'msw' +import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../../../playwright.extend' declare namespace window { @@ -21,8 +22,8 @@ test.describe('GraphQL API', () => { page.evaluate(() => { const { worker, graphql } = window.msw worker.use( - graphql.mutation('SubmitCheckout', () => null), - graphql.query('GetUserPaymentHistory', () => null), + graphql.mutation('SubmitCheckout', () => void 0), + graphql.query('GetUserPaymentHistory', () => void 0), ) }) @@ -67,8 +68,8 @@ Read more: https://mswjs.io/docs/getting-started/mocks`), page.evaluate(() => { const { worker, graphql } = window.msw worker.use( - graphql.mutation('GetLatestActiveUser', () => null), - graphql.query('GetUser', () => null), + graphql.mutation('GetLatestActiveUser', () => void 0), + graphql.query('GetUser', () => void 0), ) }) @@ -115,8 +116,8 @@ Read more: https://mswjs.io/docs/getting-started/mocks`), page.evaluate(() => { const { worker, graphql } = window.msw worker.use( - graphql.query('GetCheckoutSummary', () => null), - graphql.mutation('SubmitCheckout', () => null), + graphql.query('GetCheckoutSummary', () => void 0), + graphql.mutation('SubmitCheckout', () => void 0), ) }) @@ -163,8 +164,8 @@ Read more: https://mswjs.io/docs/getting-started/mocks`), page.evaluate(() => { const { worker, graphql } = window.msw worker.use( - graphql.mutation('ActivateUser', () => null), - graphql.query('ActiveUser', () => null), + graphql.mutation('ActivateUser', () => void 0), + graphql.query('ActiveUser', () => void 0), ) }) diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/suggestions.mocks.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/suggestions.mocks.ts index ec7d15698..c0e140864 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/suggestions.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/suggestions.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, graphql } from 'msw' +import { rest, graphql } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker() diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/suggestions.rest.test.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/suggestions.rest.test.ts index 7abe6f56a..867764f1e 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/suggestions.rest.test.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/suggestions.rest.test.ts @@ -1,4 +1,5 @@ -import { SetupWorkerApi, rest } from 'msw' +import { rest } from 'msw' +import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../../../playwright.extend' declare namespace window { @@ -21,8 +22,8 @@ test.describe('REST API', () => { page.evaluate(() => { const { worker, rest } = window.msw worker.use( - rest.get('/user', () => null), - rest.post('/user-contact-details', () => null), + rest.get('/user', () => void 0), + rest.post('/user-contact-details', () => void 0), ) }) @@ -52,7 +53,7 @@ Read more: https://mswjs.io/docs/getting-started/mocks`), page.evaluate(() => { const { worker, rest } = window.msw - worker.use(rest.get('/user', () => null)) + worker.use(rest.get('/user', () => void 0)) }) await fetch('/users') @@ -84,8 +85,8 @@ Read more: https://mswjs.io/docs/getting-started/mocks`), page.evaluate(() => { const { worker, rest } = window.msw worker.use( - rest.get('/user', () => null), - rest.post('/user-contact-details', () => null), + rest.get('/user', () => void 0), + rest.post('/user-contact-details', () => void 0), ) }) @@ -120,8 +121,8 @@ Read more: https://mswjs.io/docs/getting-started/mocks`), page.evaluate(() => { const { worker, rest } = window.msw worker.use( - rest.post('/payment', () => null), - rest.get('/payments', () => null), + rest.post('/payment', () => void 0), + rest.get('/payments', () => void 0), ) }) diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/warn.mocks.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/warn.mocks.ts index 395b82a57..b4f4df6a0 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/warn.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/warn.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/user', () => { diff --git a/test/browser/msw-api/setup-worker/start/options-sw-scope.mocks.ts b/test/browser/msw-api/setup-worker/start/options-sw-scope.mocks.ts index 569d91d6b..44f0af6f9 100644 --- a/test/browser/msw-api/setup-worker/start/options-sw-scope.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/options-sw-scope.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/user', () => { diff --git a/test/browser/msw-api/setup-worker/start/quiet.mocks.ts b/test/browser/msw-api/setup-worker/start/quiet.mocks.ts index ca0d23a78..5fc98c83e 100644 --- a/test/browser/msw-api/setup-worker/start/quiet.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/quiet.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/user', () => { diff --git a/test/browser/msw-api/setup-worker/start/quiet.test.ts b/test/browser/msw-api/setup-worker/start/quiet.test.ts index 1edf00966..024139c56 100644 --- a/test/browser/msw-api/setup-worker/start/quiet.test.ts +++ b/test/browser/msw-api/setup-worker/start/quiet.test.ts @@ -1,4 +1,4 @@ -import { SetupWorkerApi } from 'msw' +import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../../playwright.extend' declare namespace window { diff --git a/test/browser/msw-api/setup-worker/start/start.mocks.ts b/test/browser/msw-api/setup-worker/start/start.mocks.ts index 236ecfda6..dab0763bd 100644 --- a/test/browser/msw-api/setup-worker/start/start.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/start.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest } from 'msw' +import { rest } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/user', () => { diff --git a/test/browser/msw-api/setup-worker/start/start.test.ts b/test/browser/msw-api/setup-worker/start/start.test.ts index de624f9a2..1836f3547 100644 --- a/test/browser/msw-api/setup-worker/start/start.test.ts +++ b/test/browser/msw-api/setup-worker/start/start.test.ts @@ -1,5 +1,5 @@ import * as path from 'path' -import { SetupWorkerApi } from 'msw' +import { SetupWorkerApi } from 'msw/browser' import { TestFixtures, test, expect } from '../../../playwright.extend' declare namespace window { diff --git a/test/browser/msw-api/setup-worker/start/wait-until-ready.error.mocks.ts b/test/browser/msw-api/setup-worker/start/wait-until-ready.error.mocks.ts index 9e3c7446f..0ae4a7572 100644 --- a/test/browser/msw-api/setup-worker/start/wait-until-ready.error.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/wait-until-ready.error.mocks.ts @@ -1,11 +1,12 @@ -import { setupWorker, rest } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('*/numbers', (req, res, ctx) => { - return res(ctx.json([1, 2, 3])) + rest.get('*/numbers', () => { + return HttpResponse.json([1, 2, 3]) }), - rest.get('*/letters', (req, res, ctx) => { - return res(ctx.json(['a', 'b', 'c'])) + rest.get('*/letters', () => { + return HttpResponse.json(['a', 'b', 'c']) }), ) diff --git a/test/browser/msw-api/setup-worker/start/wait-until-ready.false.mocks.ts b/test/browser/msw-api/setup-worker/start/wait-until-ready.false.mocks.ts index 2608eba20..5c16465e5 100644 --- a/test/browser/msw-api/setup-worker/start/wait-until-ready.false.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/wait-until-ready.false.mocks.ts @@ -1,11 +1,12 @@ -import { setupWorker, rest } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('*/numbers', (req, res, ctx) => { - return res(ctx.json([1, 2, 3])) + rest.get('*/numbers', () => { + return HttpResponse.json([1, 2, 3]) }), - rest.get('*/letters', (req, res, ctx) => { - return res(ctx.json(['a', 'b', 'c'])) + rest.get('*/letters', () => { + return HttpResponse.json(['a', 'b', 'c']) }), ) diff --git a/test/browser/msw-api/setup-worker/start/wait-until-ready.mocks.ts b/test/browser/msw-api/setup-worker/start/wait-until-ready.mocks.ts index 728193844..b583afe54 100644 --- a/test/browser/msw-api/setup-worker/start/wait-until-ready.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/wait-until-ready.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('*/numbers', () => { diff --git a/test/browser/msw-api/setup-worker/stop.mocks.ts b/test/browser/msw-api/setup-worker/stop.mocks.ts index 024df13a8..e0dc58617 100644 --- a/test/browser/msw-api/setup-worker/stop.mocks.ts +++ b/test/browser/msw-api/setup-worker/stop.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('https://api.github.com', () => { diff --git a/test/browser/msw-api/setup-worker/stop.test.ts b/test/browser/msw-api/setup-worker/stop.test.ts index fafe5157c..f814eeb7e 100644 --- a/test/browser/msw-api/setup-worker/stop.test.ts +++ b/test/browser/msw-api/setup-worker/stop.test.ts @@ -1,4 +1,4 @@ -import { SetupWorkerApi } from 'msw' +import { SetupWorkerApi } from 'msw/browser' import { Page } from '@playwright/test' import { test, expect } from '../../playwright.extend' diff --git a/test/browser/msw-api/setup-worker/stop/quiet.mocks.ts b/test/browser/msw-api/setup-worker/stop/quiet.mocks.ts index d3890c5c3..fc93ebbca 100644 --- a/test/browser/msw-api/setup-worker/stop/quiet.mocks.ts +++ b/test/browser/msw-api/setup-worker/stop/quiet.mocks.ts @@ -1,4 +1,4 @@ -import { setupWorker } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker() diff --git a/test/browser/msw-api/setup-worker/stop/quiet.test.ts b/test/browser/msw-api/setup-worker/stop/quiet.test.ts index 8e7a04323..69997b68d 100644 --- a/test/browser/msw-api/setup-worker/stop/quiet.test.ts +++ b/test/browser/msw-api/setup-worker/stop/quiet.test.ts @@ -1,4 +1,4 @@ -import { SetupWorkerApi } from 'msw' +import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../../playwright.extend' declare namespace window { diff --git a/test/browser/msw-api/setup-worker/stop/removes-all-listeners.mocks.ts b/test/browser/msw-api/setup-worker/stop/removes-all-listeners.mocks.ts index 04c578ce2..4686a4890 100644 --- a/test/browser/msw-api/setup-worker/stop/removes-all-listeners.mocks.ts +++ b/test/browser/msw-api/setup-worker/stop/removes-all-listeners.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const createWorker = () => { return setupWorker( diff --git a/test/browser/msw-api/setup-worker/stop/removes-all-listeners.test.ts b/test/browser/msw-api/setup-worker/stop/removes-all-listeners.test.ts index 2c0974b8a..96d86c79b 100644 --- a/test/browser/msw-api/setup-worker/stop/removes-all-listeners.test.ts +++ b/test/browser/msw-api/setup-worker/stop/removes-all-listeners.test.ts @@ -1,4 +1,4 @@ -import { SetupWorkerApi } from 'msw' +import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../../playwright.extend' declare namespace window { diff --git a/test/browser/msw-api/setup-worker/use.mocks.ts b/test/browser/msw-api/setup-worker/use.mocks.ts index e44474732..ce6ea0abc 100644 --- a/test/browser/msw-api/setup-worker/use.mocks.ts +++ b/test/browser/msw-api/setup-worker/use.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/book/:bookId', function originalResolver() { diff --git a/test/browser/msw-api/setup-worker/use.test.ts b/test/browser/msw-api/setup-worker/use.test.ts index cd08aa7ff..0a5357eda 100644 --- a/test/browser/msw-api/setup-worker/use.test.ts +++ b/test/browser/msw-api/setup-worker/use.test.ts @@ -1,4 +1,5 @@ -import { SetupWorkerApi, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../playwright.extend' declare namespace window { diff --git a/test/browser/msw-api/unregister.mocks.ts b/test/browser/msw-api/unregister.mocks.ts index 4332d5d24..269782a24 100644 --- a/test/browser/msw-api/unregister.mocks.ts +++ b/test/browser/msw-api/unregister.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('*/resource', () => { diff --git a/test/browser/msw-api/unregister.test.ts b/test/browser/msw-api/unregister.test.ts index 55903f60e..e55cb67d9 100644 --- a/test/browser/msw-api/unregister.test.ts +++ b/test/browser/msw-api/unregister.test.ts @@ -1,4 +1,4 @@ -import { SetupWorkerApi } from 'msw' +import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../playwright.extend' declare namespace window { diff --git a/test/browser/rest-api/basic.mocks.ts b/test/browser/rest-api/basic.mocks.ts index e0d4b0c1e..2b5927432 100644 --- a/test/browser/rest-api/basic.mocks.ts +++ b/test/browser/rest-api/basic.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('https://example.com/users/:username', ({ params }) => { diff --git a/test/browser/rest-api/basic.test.ts b/test/browser/rest-api/basic.test.ts index 28e110ba4..6c0287a73 100644 --- a/test/browser/rest-api/basic.test.ts +++ b/test/browser/rest-api/basic.test.ts @@ -1,8 +1,14 @@ import { test, expect } from '../playwright.extend' -test('mocks response to a GET request', async ({ loadExample, fetch }) => { +test('mocks response to a GET request', async ({ + loadExample, + fetch, + page, +}) => { await loadExample(require.resolve('./basic.mocks.ts')) + await page.pause() + const response = await fetch('https://example.com/users/octocat') const status = response.status() const headers = response.headers() diff --git a/test/browser/rest-api/body.mocks.ts b/test/browser/rest-api/body.mocks.ts index 5e6456e88..a6d6381ae 100644 --- a/test/browser/rest-api/body.mocks.ts +++ b/test/browser/rest-api/body.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse, ResponseResolver } from 'msw' +import { rest, HttpResponse, ResponseResolver } from 'msw' +import { setupWorker } from 'msw/browser' const forwardRequestBody: ResponseResolver = async ({ request }) => { const requestText = diff --git a/test/browser/rest-api/context.mocks.ts b/test/browser/rest-api/context.mocks.ts index 51ed7858d..0961ad29a 100644 --- a/test/browser/rest-api/context.mocks.ts +++ b/test/browser/rest-api/context.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse, delay } from 'msw' +import { rest, HttpResponse, delay } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('https://test.mswjs.io/', async () => { diff --git a/test/browser/rest-api/cookies-inheritance.mocks.ts b/test/browser/rest-api/cookies-inheritance.mocks.ts index b4e5ed4dc..f78bc2862 100644 --- a/test/browser/rest-api/cookies-inheritance.mocks.ts +++ b/test/browser/rest-api/cookies-inheritance.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.post('/login', () => { diff --git a/test/browser/rest-api/cookies-request.mocks.ts b/test/browser/rest-api/cookies-request.mocks.ts index 5c8547d29..6b60e36f5 100644 --- a/test/browser/rest-api/cookies-request.mocks.ts +++ b/test/browser/rest-api/cookies-request.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( // Use wildcard so that we capture any "GET /user" requests diff --git a/test/browser/rest-api/cookies.mocks.ts b/test/browser/rest-api/cookies.mocks.ts index fba9b2e6a..e522051e1 100644 --- a/test/browser/rest-api/cookies.mocks.ts +++ b/test/browser/rest-api/cookies.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/user', () => { diff --git a/test/browser/rest-api/cors.mocks.ts b/test/browser/rest-api/cors.mocks.ts index 3294691f7..fb1b84362 100644 --- a/test/browser/rest-api/cors.mocks.ts +++ b/test/browser/rest-api/cors.mocks.ts @@ -1,4 +1,4 @@ -import { setupWorker } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker() diff --git a/test/browser/rest-api/generator.mocks.ts b/test/browser/rest-api/generator.mocks.ts index 13c11b783..30a7e468f 100644 --- a/test/browser/rest-api/generator.mocks.ts +++ b/test/browser/rest-api/generator.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get<{ maxCount: string }>('/polling/:maxCount', function* ({ params }) { diff --git a/test/browser/rest-api/headers-multiple.mocks.ts b/test/browser/rest-api/headers-multiple.mocks.ts index edfe56be3..601f7393b 100644 --- a/test/browser/rest-api/headers-multiple.mocks.ts +++ b/test/browser/rest-api/headers-multiple.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.post('https://test.mswjs.io', ({ request }) => { diff --git a/test/browser/rest-api/params.mocks.ts b/test/browser/rest-api/params.mocks.ts index e255d9a4b..8528b2764 100644 --- a/test/browser/rest-api/params.mocks.ts +++ b/test/browser/rest-api/params.mocks.ts @@ -1,9 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' - -// interface ResponseType { -// username: string -// messageId: string -// } +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' type RequestParams = { username: string diff --git a/test/browser/rest-api/query-params-warning.mocks.ts b/test/browser/rest-api/query-params-warning.mocks.ts index 637810be9..a74f145d6 100644 --- a/test/browser/rest-api/query-params-warning.mocks.ts +++ b/test/browser/rest-api/query-params-warning.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( // WARNING: Intentionally invalid example of including a query parameter diff --git a/test/browser/rest-api/query.mocks.ts b/test/browser/rest-api/query.mocks.ts index 2b4b5bf56..7a894e45c 100644 --- a/test/browser/rest-api/query.mocks.ts +++ b/test/browser/rest-api/query.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('https://test.mswjs.io/api/books', ({ request }) => { diff --git a/test/browser/rest-api/redirect.mocks.ts b/test/browser/rest-api/redirect.mocks.ts index 263c5883b..707e4d9e4 100644 --- a/test/browser/rest-api/redirect.mocks.ts +++ b/test/browser/rest-api/redirect.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/login', () => { diff --git a/test/browser/rest-api/request/body/body.mocks.ts b/test/browser/rest-api/request/body/body.mocks.ts index b854a633c..9a9f3a4ae 100644 --- a/test/browser/rest-api/request/body/body.mocks.ts +++ b/test/browser/rest-api/request/body/body.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.post('/text', async ({ request }) => { diff --git a/test/browser/rest-api/request/matching/all.mocks.ts b/test/browser/rest-api/request/matching/all.mocks.ts index 3ec6198d2..f8f427657 100644 --- a/test/browser/rest-api/request/matching/all.mocks.ts +++ b/test/browser/rest-api/request/matching/all.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.all('*/api/*', () => { diff --git a/test/browser/rest-api/request/matching/method.mocks.ts b/test/browser/rest-api/request/matching/method.mocks.ts index 3b148c92b..c77e40d23 100644 --- a/test/browser/rest-api/request/matching/method.mocks.ts +++ b/test/browser/rest-api/request/matching/method.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.post('*/user', () => { diff --git a/test/browser/rest-api/request/matching/path-params-decode.mocks.ts b/test/browser/rest-api/request/matching/path-params-decode.mocks.ts index 6c04f6cb6..691600114 100644 --- a/test/browser/rest-api/request/matching/path-params-decode.mocks.ts +++ b/test/browser/rest-api/request/matching/path-params-decode.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('https://test.mswjs.io/reflect-url/:url', ({ params }) => { diff --git a/test/browser/rest-api/request/matching/uri.mocks.ts b/test/browser/rest-api/request/matching/uri.mocks.ts index 929946851..e7a336d57 100644 --- a/test/browser/rest-api/request/matching/uri.mocks.ts +++ b/test/browser/rest-api/request/matching/uri.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('https://api.github.com/made-up', () => { diff --git a/test/browser/rest-api/response-patching.mocks.ts b/test/browser/rest-api/response-patching.mocks.ts index b85d021f4..cfbe73be3 100644 --- a/test/browser/rest-api/response-patching.mocks.ts +++ b/test/browser/rest-api/response-patching.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse, bypass } from 'msw' +import { rest, HttpResponse, bypass } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('*/user', async ({ request }) => { diff --git a/test/browser/rest-api/response/body/body-binary.mocks.ts b/test/browser/rest-api/response/body/body-binary.mocks.ts index 51cb93b40..d09691522 100644 --- a/test/browser/rest-api/response/body/body-binary.mocks.ts +++ b/test/browser/rest-api/response/body/body-binary.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' import base64Image from 'url-loader!../../../../fixtures/image.jpg' const worker = setupWorker( diff --git a/test/browser/rest-api/response/body/body-json.mocks.ts b/test/browser/rest-api/response/body/body-json.mocks.ts index 63ea03cfa..25f0568f6 100644 --- a/test/browser/rest-api/response/body/body-json.mocks.ts +++ b/test/browser/rest-api/response/body/body-json.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/json', () => { diff --git a/test/browser/rest-api/response/body/body-text.mocks.ts b/test/browser/rest-api/response/body/body-text.mocks.ts index 16523e7e6..23dcdbf36 100644 --- a/test/browser/rest-api/response/body/body-text.mocks.ts +++ b/test/browser/rest-api/response/body/body-text.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/text', () => { diff --git a/test/browser/rest-api/response/body/body-xml.mocks.ts b/test/browser/rest-api/response/body/body-xml.mocks.ts index 6ff367481..320dca109 100644 --- a/test/browser/rest-api/response/body/body-xml.mocks.ts +++ b/test/browser/rest-api/response/body/body-xml.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/user', () => { diff --git a/test/browser/rest-api/status.mocks.ts b/test/browser/rest-api/status.mocks.ts index 5d44d5265..4d43fb7f6 100644 --- a/test/browser/rest-api/status.mocks.ts +++ b/test/browser/rest-api/status.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/posts', () => { diff --git a/test/browser/rest-api/xhr.mocks.ts b/test/browser/rest-api/xhr.mocks.ts index a98bea75b..c34079830 100644 --- a/test/browser/rest-api/xhr.mocks.ts +++ b/test/browser/rest-api/xhr.mocks.ts @@ -1,4 +1,5 @@ -import { setupWorker, rest, HttpResponse } from 'msw' +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('https://api.github.com/users/octocat', () => { diff --git a/test/browser/setup/webpackHttpServer.ts b/test/browser/setup/webpackHttpServer.ts index bfed60ae0..68409bec0 100644 --- a/test/browser/setup/webpackHttpServer.ts +++ b/test/browser/setup/webpackHttpServer.ts @@ -1,7 +1,7 @@ import * as fs from 'fs' import * as path from 'path' import { WebpackHttpServer } from 'webpack-http-server' -import { getWorkerScriptPatch } from './WorkerConsole' +import { getWorkerScriptPatch } from './workerConsole' const { SERVICE_WORKER_BUILD_PATH } = require('../../../config/constants.js') diff --git a/test/browser/tsconfig.json b/test/browser/tsconfig.json deleted file mode 100644 index 07364f1ed..000000000 --- a/test/browser/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "strict": true, - "noEmit": true, - "target": "esnext", - "module": "esnext", - "moduleResolution": "node16", - "customConditions": ["browser"] - }, - "include": ["**/*.mocks.ts"] -} diff --git a/test/node/rest-api/cookies-inheritance.node.test.ts b/test/node/rest-api/cookies-inheritance.node.test.ts index 4ec8903cf..c89c954f0 100644 --- a/test/node/rest-api/cookies-inheritance.node.test.ts +++ b/test/node/rest-api/cookies-inheritance.node.test.ts @@ -2,7 +2,8 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { HttpResponse, rest, setupServer, SetupServer } from 'msw' +import { HttpResponse, rest } from 'msw' +import { setupServer, SetupServer } from 'msw/node' import { HttpServer } from '@open-draft/test-server/http' import { RequestHandler as ExpressRequestHandler } from 'express' diff --git a/tsup.config.ts b/tsup.config.ts index a92f6d7c2..609045a35 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -85,7 +85,11 @@ const iifeConfig: Options = { name: 'iife', platform: 'browser', globalName: 'MockServiceWorker', - entry: ['./src/browser/index.ts'], + entry: ['./src/iife/index.ts'], + /** + * @note Legacy output format will automatically create + * a "iife" directory under the "outDir". + */ outDir: './lib', format: ['iife'], legacyOutput: true, From 206682f3a62edbdb56f3b2bd3ad5ef1c22bb2f96 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 12 Apr 2023 00:07:05 +0200 Subject: [PATCH 095/210] docs: mention "msw/browser" change in migration guidelines --- MIGRATING.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/MIGRATING.md b/MIGRATING.md index 0de038bee..bca709b89 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -12,6 +12,7 @@ npm install msw@next --save-dev To help you navigate, we've structured this guide on the feature basis. You can read it top-to-bottom, or you can jump to a particular feature you have trouble migrating from. +- [**Imports**](#imports) - [**Response resolver**](#response-resolver) (call signature change) - [Request changes](#request-changes) - [req.params](#reqparams) @@ -37,6 +38,17 @@ To help you navigate, we've structured this guide on the feature basis. You can --- +## Imports + +The `setupWorker` API, alongside any related type definitions, are no longer exported from the root of `msw`. Instead, import them from `msw/browser`: + +```diff +-import { setupWorker } from 'msw' ++import { setupWorker } from 'msw/browser +``` + +> Note that the request handlers like `rest` and `graphql`, as well as the utility functions like `bypass` and `passthrough` must still be imported from the root-level `msw`. + ## Response resolver A response resolver now exposes a single object argument instead of `(req, res, ctx)`. That argument represents resolver information and consists of properties that are always present for all handler types and extra properties specific to handler types. @@ -503,7 +515,7 @@ It is still possible to create custom handlers and resolvers, just make sure to As this release removes the concept of response composition via `res()`, you can no longer compose context utilities or abstract their partial composed state to a helper function. -Instead, you can abstract a common response logic into a plain function that creates a new `Response` or modifies a provided instance. +Instead, you can abstract a common response logic into a plain function that creates a new `Response` or modifies a provided instance. ```js // utils.js @@ -511,7 +523,7 @@ import { HttpResponse } from 'msw' export function augmentResponse(json) { const response = HttpResponse.json(json, { - // Come up with some reusable defaults here. + // Come up with some reusable defaults here. }) return response } From f5637d19106f0080edc2d5ffbefa309f4c4b7d5d Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 12 Apr 2023 00:24:12 +0200 Subject: [PATCH 096/210] chore(release): v0.0.0-fetch.rc-9 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4c6e81fc1..5afc65142 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-8", + "version": "0.0.0-fetch.rc-9", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/core/index.js", "module": "./lib/core/index.mjs", From 34ae9da5691b0a952543139d411d1876575ec531 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 12 Apr 2023 12:43:56 +0200 Subject: [PATCH 097/210] fix: include "browser" in "files" --- config/scripts/validate-esm.js | 35 ++++++++++++++++++++++++++++++++++ package.json | 5 +++-- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/config/scripts/validate-esm.js b/config/scripts/validate-esm.js index c8c7a43b9..cc473820b 100644 --- a/config/scripts/validate-esm.js +++ b/config/scripts/validate-esm.js @@ -209,4 +209,39 @@ function validateTypeDefs(typeDefsPath) { console.log('✅ Validated type definitions at "%s"', typeDefsPath) } +function validatePackageFiles() { + const { files } = PKG_JSON + + const expectedFiles = [ + 'config/constants.js', + 'config/scripts/postinstall.js', + 'cli', + 'lib', + 'browser', + 'node', + 'native', + ] + + // Must list all the expcted files. + expectedFiles.forEach((expectedFile) => { + invariant( + files.includes(expectedFile), + '"%s" is not listed in "files" in package.json', + expectedFile, + ) + }) + + // All the listed files must exist. + expectedFiles.every((expectedFile) => { + invariant( + fs.existsSync(fromRoot(expectedFile)), + 'The file "%s" in "files" points at non-existing file', + expectedFile, + ) + }) + + console.log('✅ Validated package.json "files" field') +} + validatePackageExports() +validatePackageFiles() diff --git a/package.json b/package.json index 5afc65142..5ac5d082b 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "check:exports": "node \"./config/scripts/validate-esm.js\"", "test": "pnpm test:unit && pnpm test:node && pnpm test:browser", "test:unit": "cross-env BABEL_ENV=test jest --maxWorkers=3", - "test:node": "jest --config=./test/jest.config.js --forceExit", + "test:node": "jest --config=./test/jest.config.js", "test:browser": "playwright test -c ./test/browser/playwright.config.ts", "test:ts": "ts-node test/typings/run.ts", "prepare": "pnpm simple-git-hooks init", @@ -86,8 +86,9 @@ "config/scripts/postinstall.js", "cli", "lib", - "native", + "browser", "node", + "native", "LICENSE.md", "README.md" ], From e7153d9dc6e046598b1da451328158d870bd511f Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 12 Apr 2023 12:44:20 +0200 Subject: [PATCH 098/210] chore(release): 0.0.0-fetch.rc-10 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5ac5d082b..0f3aeba08 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-9", + "version": "0.0.0-fetch.rc-10", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/core/index.js", "module": "./lib/core/index.mjs", From 76bac29cb010b128ec323b75d3bd90e5296ce61f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristj=C3=A1n=20Oddsson?= Date: Wed, 12 Apr 2023 19:35:28 +0200 Subject: [PATCH 099/210] docs: add missing quote to migration guidelines (#1592) Missing quote --- MIGRATING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MIGRATING.md b/MIGRATING.md index bca709b89..bc9f8a81a 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -44,7 +44,7 @@ The `setupWorker` API, alongside any related type definitions, are no longer exp ```diff -import { setupWorker } from 'msw' -+import { setupWorker } from 'msw/browser ++import { setupWorker } from 'msw/browser' ``` > Note that the request handlers like `rest` and `graphql`, as well as the utility functions like `bypass` and `passthrough` must still be imported from the root-level `msw`. From 6af4b3c27d25000e781b7a314dd8a3efc3bb0d29 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 13 Apr 2023 13:44:52 +0200 Subject: [PATCH 100/210] fix: ditch "debug" in favor of "@open-draft/logger" --- package.json | 2 +- pnpm-lock.yaml | 24 ++++++++++++++++-------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 0f3aeba08..0589f7f33 100644 --- a/package.json +++ b/package.json @@ -108,7 +108,7 @@ "sideEffects": false, "dependencies": { "@mswjs/cookies": "^0.2.2", - "@mswjs/interceptors": "^0.22.10", + "@mswjs/interceptors": "^0.22.11", "@open-draft/until": "^2.0.0", "@types/cookie": "^0.4.1", "@types/js-levenshtein": "^1.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 26cb8a934..30bdb5cb9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,7 +9,7 @@ specifiers: '@commitlint/cli': ^16.1.0 '@commitlint/config-conventional': ^16.0.0 '@mswjs/cookies': ^0.2.2 - '@mswjs/interceptors': ^0.22.10 + '@mswjs/interceptors': ^0.22.11 '@open-draft/test-server': ^0.4.2 '@open-draft/until': ^2.0.0 '@ossjs/release': ^0.4.0 @@ -79,7 +79,7 @@ specifiers: dependencies: '@mswjs/cookies': 0.2.2 - '@mswjs/interceptors': 0.22.10 + '@mswjs/interceptors': 0.22.11 '@open-draft/until': 2.0.0 '@types/cookie': 0.4.1 '@types/js-levenshtein': 1.1.1 @@ -2318,19 +2318,16 @@ packages: set-cookie-parser: 2.5.1 dev: false - /@mswjs/interceptors/0.22.10: - resolution: {integrity: sha512-Dapt96ciy7Qg6e/QRgrzI58AD2+xhkPkhOuTmLVVRuoxFAttft8itRHdNaF4o2BSDfswOn8SI8isqECSe1yq7g==} + /@mswjs/interceptors/0.22.11: + resolution: {integrity: sha512-r/gLCFiFItPXRaJc2vRy3BljFTUiLkOWkgY/Vxdr+UOitDptYXetu3pWKDZLHVUrBawN7scP98W2t8On/pyt8g==} engines: {node: '>=18'} dependencies: '@open-draft/deferred-promise': 2.1.0 + '@open-draft/logger': 0.2.0 '@open-draft/until': 2.0.0 - '@types/debug': 4.1.7 - debug: 4.3.4 headers-polyfill: 3.1.2 outvariant: 1.4.0 strict-event-emitter: 0.5.0 - transitivePeerDependencies: - - supports-color dev: false /@nodelib/fs.scandir/2.1.5: @@ -2358,6 +2355,13 @@ packages: resolution: {integrity: sha512-Rzd5JrXZX8zErHzgcGyngh4fmEbSHqTETdGj9rXtejlqMIgXFlyKBA7Jn1Xp0Ls0M0Y22+xHcWiEzbmdWl0BOA==} dev: false + /@open-draft/logger/0.2.0: + resolution: {integrity: sha512-/s7NLIXIvLcRUlrs94GFj7hcxH87JZaJNr9SlDhdvDIS8ke9GcflqjNzs47kTOG7dH2AjMZ9rJgX3l7tREUVxA==} + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.0 + dev: false + /@open-draft/test-server/0.4.2: resolution: {integrity: sha512-J9wbdQkPx5WKcDNtgfnXsx5ew4UJd6BZyGr89YlHeaUkOShkO2iO5QIyCCsG4qpjIvr2ZTkEYJA9ujOXXyO6Pg==} dependencies: @@ -2635,6 +2639,7 @@ packages: resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} dependencies: '@types/ms': 0.7.31 + dev: true /@types/eslint-scope/3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} @@ -2758,6 +2763,7 @@ packages: /@types/ms/0.7.31: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + dev: true /@types/mustache/4.2.2: resolution: {integrity: sha512-MUSpfpW0yZbTgjekDbH0shMYBUD+X/uJJJMm9LXN1d5yjl5lCY1vN/eWKD6D1tOtjA6206K0zcIPnUaFMurdNA==} @@ -4555,6 +4561,7 @@ packages: optional: true dependencies: ms: 2.1.2 + dev: true /debug/4.3.4_supports-color@6.1.0: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -7735,6 +7742,7 @@ packages: /ms/2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true /ms/2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} From f4b4b4f2bc4f6aecbbe5d18845f32cd5feea2089 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 13 Apr 2023 13:45:09 +0200 Subject: [PATCH 101/210] fix: use "statuses" plain object, list as dependency --- package.json | 3 ++- pnpm-lock.yaml | 11 ++++++++--- src/core/utils/HttpResponse/decorators.ts | 7 ++----- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 0589f7f33..2af2497a3 100644 --- a/package.json +++ b/package.json @@ -112,6 +112,7 @@ "@open-draft/until": "^2.0.0", "@types/cookie": "^0.4.1", "@types/js-levenshtein": "^1.1.1", + "@types/statuses": "^2.0.1", "chalk": "4.1.1", "chokidar": "^3.4.2", "cookie": "^0.4.2", @@ -124,6 +125,7 @@ "node-fetch": "^2.6.7", "outvariant": "^1.4.0", "path-to-regexp": "^6.2.0", + "statuses": "^2.0.1", "strict-event-emitter": "^0.5.0", "type-fest": "^2.19.0", "yargs": "^17.3.1" @@ -172,7 +174,6 @@ "regenerator-runtime": "^0.13.9", "rimraf": "^3.0.2", "simple-git-hooks": "^2.8.0", - "statuses": "^2.0.0", "ts-node": "^10.9.1", "tsup": "^6.7.0", "typescript": "^5.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 30bdb5cb9..4b5650c57 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,6 +26,7 @@ specifiers: '@types/node': 18.x '@types/node-fetch': ^2.5.11 '@types/puppeteer': ^5.4.4 + '@types/statuses': ^2.0.1 '@typescript-eslint/eslint-plugin': ^5.11.0 '@typescript-eslint/parser': ^5.11.0 babel-loader: ^8.2.3 @@ -64,7 +65,7 @@ specifiers: regenerator-runtime: ^0.13.9 rimraf: ^3.0.2 simple-git-hooks: ^2.8.0 - statuses: ^2.0.0 + statuses: ^2.0.1 strict-event-emitter: ^0.5.0 ts-node: ^10.9.1 tsup: ^6.7.0 @@ -83,6 +84,7 @@ dependencies: '@open-draft/until': 2.0.0 '@types/cookie': 0.4.1 '@types/js-levenshtein': 1.1.1 + '@types/statuses': 2.0.1 chalk: 4.1.1 chokidar: 3.4.1 cookie: 0.4.2 @@ -95,6 +97,7 @@ dependencies: node-fetch: 2.6.9 outvariant: 1.4.0 path-to-regexp: 6.2.1 + statuses: 2.0.1 strict-event-emitter: 0.5.0 type-fest: 2.19.0 yargs: 17.7.0 @@ -143,7 +146,6 @@ devDependencies: regenerator-runtime: 0.13.11 rimraf: 3.0.2 simple-git-hooks: 2.8.1 - statuses: 2.0.1 ts-node: 10.9.1_rtqtuii6mqwmhbrzzpdx2vdzzq tsup: 6.7.0_4s7jzcjqpdttwnwh3e3glkuq6y typescript: 5.0.2 @@ -2840,6 +2842,10 @@ packages: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} dev: true + /@types/statuses/2.0.1: + resolution: {integrity: sha512-vVRgv7WXbhIZzILgr58b4Ki2uqpN/dlVCUBWCMkPbMDlV1CrQrgCl5hnIoUlMrgymGcTmdfVqbs1yWj/IRIRtQ==} + dev: false + /@types/tough-cookie/4.0.2: resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} dev: true @@ -9380,7 +9386,6 @@ packages: /statuses/2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - dev: true /stream-combiner2/1.1.1: resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} diff --git a/src/core/utils/HttpResponse/decorators.ts b/src/core/utils/HttpResponse/decorators.ts index 131ae6f15..204954b3d 100644 --- a/src/core/utils/HttpResponse/decorators.ts +++ b/src/core/utils/HttpResponse/decorators.ts @@ -1,4 +1,4 @@ -import httpStatusTexts from 'statuses/codes.json' +import { message } from 'statuses' import type { HttpResponseInit } from '../../HttpResponse' export interface HttpResponseDecoratedInit extends HttpResponseInit { @@ -11,10 +11,7 @@ export function decorateResponseInit( init: HttpResponseInit = {}, ): HttpResponseDecoratedInit { const status = init?.status || 200 - const statusText = - init?.statusText || - httpStatusTexts[status.toString() as keyof typeof httpStatusTexts] || - '' + const statusText = init?.statusText || message[status] || '' const headers = new Headers(init?.headers) return { From f656f0c3af97469a27c2eb37cec760ecb0da0875 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 14 Apr 2023 20:00:44 +0200 Subject: [PATCH 102/210] fix: bump to interceptors 0.22.12 --- package.json | 2 +- pnpm-lock.yaml | 2469 +++++++++++++++++++++++++----------------------- 2 files changed, 1265 insertions(+), 1206 deletions(-) diff --git a/package.json b/package.json index 2af2497a3..72f7c5952 100644 --- a/package.json +++ b/package.json @@ -108,7 +108,7 @@ "sideEffects": false, "dependencies": { "@mswjs/cookies": "^0.2.2", - "@mswjs/interceptors": "^0.22.11", + "@mswjs/interceptors": "^0.22.12", "@open-draft/until": "^2.0.0", "@types/cookie": "^0.4.1", "@types/js-levenshtein": "^1.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b5650c57..28c639b77 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,7 +9,7 @@ specifiers: '@commitlint/cli': ^16.1.0 '@commitlint/config-conventional': ^16.0.0 '@mswjs/cookies': ^0.2.2 - '@mswjs/interceptors': ^0.22.11 + '@mswjs/interceptors': ^0.22.12 '@open-draft/test-server': ^0.4.2 '@open-draft/until': ^2.0.0 '@ossjs/release': ^0.4.0 @@ -80,7 +80,7 @@ specifiers: dependencies: '@mswjs/cookies': 0.2.2 - '@mswjs/interceptors': 0.22.11 + '@mswjs/interceptors': 0.22.12 '@open-draft/until': 2.0.0 '@types/cookie': 0.4.1 '@types/js-levenshtein': 1.1.1 @@ -100,69 +100,69 @@ dependencies: statuses: 2.0.1 strict-event-emitter: 0.5.0 type-fest: 2.19.0 - yargs: 17.7.0 + yargs: 17.7.1 devDependencies: - '@babel/core': 7.20.12 - '@babel/preset-env': 7.20.2_@babel+core@7.20.12 - '@commitlint/cli': 16.3.0_@swc+core@1.3.35 + '@babel/core': 7.21.4 + '@babel/preset-env': 7.21.4_@babel+core@7.21.4 + '@commitlint/cli': 16.3.0_@swc+core@1.3.49 '@commitlint/config-conventional': 16.2.4 '@open-draft/test-server': 0.4.2 '@ossjs/release': 0.4.0 - '@playwright/test': 1.30.0 - '@swc/core': 1.3.35 - '@swc/jest': 0.2.24_@swc+core@1.3.35 + '@playwright/test': 1.32.3 + '@swc/core': 1.3.49 + '@swc/jest': 0.2.24_@swc+core@1.3.49 '@types/express': 4.17.17 '@types/fs-extra': 9.0.13 '@types/glob': 8.1.0 - '@types/jest': 29.4.0 + '@types/jest': 29.5.0 '@types/json-bigint': 1.0.1 - '@types/node': 18.15.5 - '@types/node-fetch': 2.6.2 + '@types/node': 18.15.11 + '@types/node-fetch': 2.6.3 '@types/puppeteer': 5.4.7 - '@typescript-eslint/eslint-plugin': 5.52.0_aaw67h7nkydj3qj4plp2jqjmxe - '@typescript-eslint/parser': 5.52.0_jeuwjvsopuo23ctsjsevxmvjsi - babel-loader: 8.3.0_la66t7xldg4uecmyawueag5wkm + '@typescript-eslint/eslint-plugin': 5.58.0_ug56riyzsilszklzuxgwlsssqe + '@typescript-eslint/parser': 5.58.0_cgdknpc562nnyruteofhkegnom + babel-loader: 8.3.0_c3tfwv7p35clwcmkb5fnkshzei babel-minify: 0.5.2 - commitizen: 4.3.0_@swc+core@1.3.35 + commitizen: 4.3.0_@swc+core@1.3.49 cross-env: 7.0.3 cross-fetch: 3.1.5 - cz-conventional-changelog: 3.3.0_@swc+core@1.3.35 - esbuild: 0.17.15 - esbuild-loader: 2.21.0_webpack@5.75.0 + cz-conventional-changelog: 3.3.0_@swc+core@1.3.49 + esbuild: 0.17.16 + esbuild-loader: 2.21.0_webpack@5.79.0 eslint: 7.32.0 - eslint-config-prettier: 8.6.0_eslint@7.32.0 - eslint-plugin-prettier: 3.4.1_2fbugv7hbzbahj5qm3ztcno6by + eslint-config-prettier: 8.8.0_eslint@7.32.0 + eslint-plugin-prettier: 3.4.1_mouiu7tdcm2dtderipseaggmee express: 4.18.2 fs-extra: 10.1.0 fs-teardown: 0.3.2 - glob: 9.3.4 - jest: 29.4.3_757mb262zsxkcnuknwfdsckmku - jest-environment-jsdom: 29.4.3 + glob: 9.3.5 + jest: 29.5.0_rrli7kzx2akox3oq6aahu3rvje + jest-environment-jsdom: 29.5.0 json-bigint: 1.0.0 - lint-staged: 13.1.2 - page-with: 0.6.1_44e4morsomth5ookbazmyefmhi - prettier: 2.8.4 + lint-staged: 13.2.1 + page-with: 0.6.1_57233mj27fjz7synoeubptyy7e + prettier: 2.8.7 regenerator-runtime: 0.13.11 rimraf: 3.0.2 simple-git-hooks: 2.8.1 - ts-node: 10.9.1_rtqtuii6mqwmhbrzzpdx2vdzzq - tsup: 6.7.0_4s7jzcjqpdttwnwh3e3glkuq6y - typescript: 5.0.2 - undici: 5.21.0 - url-loader: 4.1.1_webpack@5.75.0 - webpack: 5.75.0_44e4morsomth5ookbazmyefmhi - webpack-dev-server: 3.11.3_webpack@5.75.0 - webpack-http-server: 0.5.0_44e4morsomth5ookbazmyefmhi + ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e + tsup: 6.7.0_kpvxmbmtx6ydv4unklsjw2abeq + typescript: 5.0.4 + undici: 5.21.2 + url-loader: 4.1.1_webpack@5.79.0 + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e + webpack-dev-server: 3.11.3_webpack@5.79.0 + webpack-http-server: 0.5.0_57233mj27fjz7synoeubptyy7e packages: - /@ampproject/remapping/2.2.0: - resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + /@ampproject/remapping/2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.1.1 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 dev: true /@babel/code-frame/7.12.11: @@ -171,32 +171,32 @@ packages: '@babel/highlight': 7.18.6 dev: true - /@babel/code-frame/7.18.6: - resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} + /@babel/code-frame/7.21.4: + resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 dev: true - /@babel/compat-data/7.20.14: - resolution: {integrity: sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==} + /@babel/compat-data/7.21.4: + resolution: {integrity: sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==} engines: {node: '>=6.9.0'} dev: true - /@babel/core/7.20.12: - resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==} + /@babel/core/7.21.4: + resolution: {integrity: sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.0 - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.14 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 - '@babel/helper-module-transforms': 7.20.11 - '@babel/helpers': 7.20.13 - '@babel/parser': 7.20.15 + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.21.4 + '@babel/generator': 7.21.4 + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helpers': 7.21.0 + '@babel/parser': 7.21.4 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 - '@babel/types': 7.20.7 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -206,12 +206,13 @@ packages: - supports-color dev: true - /@babel/generator/7.20.14: - resolution: {integrity: sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==} + /@babel/generator/7.21.4: + resolution: {integrity: sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 - '@jridgewell/gen-mapping': 0.3.2 + '@babel/types': 7.21.4 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 jsesc: 2.5.2 dev: true @@ -219,7 +220,7 @@ packages: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.4 dev: true /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9: @@ -227,34 +228,34 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-explode-assignable-expression': 7.18.6 - '@babel/types': 7.20.7 + '@babel/types': 7.21.4 dev: true - /@babel/helper-compilation-targets/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} + /@babel/helper-compilation-targets/7.21.4_@babel+core@7.21.4: + resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.20.14 - '@babel/core': 7.20.12 - '@babel/helper-validator-option': 7.18.6 + '@babel/compat-data': 7.21.4 + '@babel/core': 7.21.4 + '@babel/helper-validator-option': 7.21.0 browserslist: 4.21.5 lru-cache: 5.1.1 semver: 6.3.0 dev: true - /@babel/helper-create-class-features-plugin/7.20.12_@babel+core@7.20.12: - resolution: {integrity: sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==} + /@babel/helper-create-class-features-plugin/7.21.4_@babel+core@7.21.4: + resolution: {integrity: sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-member-expression-to-functions': 7.20.7 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-member-expression-to-functions': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.20.7 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 @@ -263,28 +264,28 @@ packages: - supports-color dev: true - /@babel/helper-create-regexp-features-plugin/7.20.5_@babel+core@7.20.12: - resolution: {integrity: sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==} + /@babel/helper-create-regexp-features-plugin/7.21.4_@babel+core@7.21.4: + resolution: {integrity: sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-annotate-as-pure': 7.18.6 - regexpu-core: 5.3.1 + regexpu-core: 5.3.2 dev: true - /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.20.12: + /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.21.4: resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/core': 7.21.4 + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 debug: 4.3.4 lodash.debounce: 4.0.8 - resolve: 1.22.1 + resolve: 1.22.2 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -299,50 +300,50 @@ packages: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.4 dev: true - /@babel/helper-function-name/7.19.0: - resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} + /@babel/helper-function-name/7.21.0: + resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.20.7 - '@babel/types': 7.20.7 + '@babel/types': 7.21.4 dev: true /@babel/helper-hoist-variables/7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.4 dev: true - /@babel/helper-member-expression-to-functions/7.20.7: - resolution: {integrity: sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==} + /@babel/helper-member-expression-to-functions/7.21.0: + resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.4 dev: true - /@babel/helper-module-imports/7.18.6: - resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + /@babel/helper-module-imports/7.21.4: + resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.4 dev: true - /@babel/helper-module-transforms/7.20.11: - resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} + /@babel/helper-module-transforms/7.21.2: + resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.21.4 '@babel/helper-simple-access': 7.20.2 '@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-validator-identifier': 7.19.1 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 - '@babel/types': 7.20.7 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 transitivePeerDependencies: - supports-color dev: true @@ -351,7 +352,7 @@ packages: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.4 dev: true /@babel/helper-plugin-utils/7.20.2: @@ -359,17 +360,17 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.20.12: + /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-wrap-function': 7.20.5 - '@babel/types': 7.20.7 + '@babel/types': 7.21.4 transitivePeerDependencies: - supports-color dev: true @@ -379,11 +380,11 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-member-expression-to-functions': 7.20.7 + '@babel/helper-member-expression-to-functions': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 - '@babel/types': 7.20.7 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 transitivePeerDependencies: - supports-color dev: true @@ -392,21 +393,21 @@ packages: resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.4 dev: true /@babel/helper-skip-transparent-expression-wrappers/7.20.0: resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.4 dev: true /@babel/helper-split-export-declaration/7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.4 dev: true /@babel/helper-string-parser/7.19.4: @@ -419,8 +420,8 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option/7.18.6: - resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} + /@babel/helper-validator-option/7.21.0: + resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} engines: {node: '>=6.9.0'} dev: true @@ -428,21 +429,21 @@ packages: resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 - '@babel/types': 7.20.7 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 transitivePeerDependencies: - supports-color dev: true - /@babel/helpers/7.20.13: - resolution: {integrity: sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==} + /@babel/helpers/7.21.0: + resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 - '@babel/types': 7.20.7 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 transitivePeerDependencies: - supports-color dev: true @@ -456,452 +457,452 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser/7.20.15: - resolution: {integrity: sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==} + /@babel/parser/7.21.4: + resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.4 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.20.12: + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.20.12: + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-proposal-optional-chaining': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.20.12: + /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.4 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/core': 7.21.4 + '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-static-block/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==} + /@babel/plugin-proposal-class-static-block/7.21.0_@babel+core@7.21.4: + resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/core': 7.21.4 + '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.12 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.4 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.20.12: + /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.20.12: + /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.20.12: + /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.20.14 - '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/compat-data': 7.21.4 + '@babel/core': 7.21.4 + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-transform-parameters': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-optional-chaining/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==} + /@babel/plugin-proposal-optional-chaining/7.21.0_@babel+core@7.21.4: + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/core': 7.21.4 + '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object/7.20.5_@babel+core@7.20.12: - resolution: {integrity: sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==} + /@babel/plugin-proposal-private-property-in-object/7.21.0_@babel+core@7.21.4: + resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.12 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.4 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.12 + '@babel/core': 7.21.4 + '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.20.12: + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.4: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.20.12: + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.4: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.20.12: + /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.21.4: resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.20.12: + /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.21.4: resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.20.12: + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.21.4: resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} + /@babel/plugin-syntax-jsx/7.21.4_@babel+core@7.21.4: + resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.20.12: + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.4: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.20.12: + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.4: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.20.12: + /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.21.4: resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.20.12: + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.4: resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.12: - resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} + /@babel/plugin-syntax-typescript/7.21.4_@babel+core@7.21.4: + resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-module-imports': 7.18.6 + '@babel/core': 7.21.4 + '@babel/helper-module-imports': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.12 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.4 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-block-scoping/7.20.15_@babel+core@7.20.12: - resolution: {integrity: sha512-Vv4DMZ6MiNOhu/LdaZsT/bsLRxgL94d269Mv4R/9sp6+Mp++X/JqypZYypJXLlM4mlL352/Egzbzr98iABH1CA==} + /@babel/plugin-transform-block-scoping/7.21.0_@babel+core@7.21.4: + resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-classes/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==} + /@babel/plugin-transform-classes/7.21.0_@babel+core@7.21.4: + resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.20.7 @@ -911,399 +912,399 @@ packages: - supports-color dev: true - /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/template': 7.20.7 dev: true - /@babel/plugin-transform-destructuring/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==} + /@babel/plugin-transform-destructuring/7.21.3_@babel+core@7.21.4: + resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.12 + '@babel/core': 7.21.4 + '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.20.12: + /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.20.12: - resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} + /@babel/plugin-transform-for-of/7.21.0_@babel+core@7.21.4: + resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.20.12: + /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 - '@babel/helper-function-name': 7.19.0 + '@babel/core': 7.21.4 + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-function-name': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-literals/7.18.9_@babel+core@7.20.12: + /@babel/plugin-transform-literals/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.20.12: + /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.21.4: resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-module-transforms': 7.20.11 + '@babel/core': 7.21.4 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-commonjs/7.20.11_@babel+core@7.20.12: - resolution: {integrity: sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==} + /@babel/plugin-transform-modules-commonjs/7.21.2_@babel+core@7.21.4: + resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-module-transforms': 7.20.11 + '@babel/core': 7.21.4 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-simple-access': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.20.12: + /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.21.4: resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.20.11 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-identifier': 7.19.1 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-module-transforms': 7.20.11 + '@babel/core': 7.21.4 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.20.12: + /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.21.4: resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.12 + '@babel/core': 7.21.4 + '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.20.7 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-parameters/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==} + /@babel/plugin-transform-parameters/7.21.3_@babel+core@7.21.4: + resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.20.12: + /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.21.4: resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 regenerator-transform: 0.15.1 dev: true - /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-spread/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-spread/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 dev: true - /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.20.12: + /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.20.12: + /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.20.12: + /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.21.4: resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.12 + '@babel/core': 7.21.4 + '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/preset-env/7.20.2_@babel+core@7.20.12: - resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} + /@babel/preset-env/7.21.4_@babel+core@7.21.4: + resolution: {integrity: sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.20.14 - '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/compat-data': 7.21.4 + '@babel/core': 7.21.4 + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.18.6 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-class-static-block': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-optional-chaining': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-private-property-in-object': 7.20.5_@babel+core@7.20.12 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.12 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.12 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.20.12 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.12 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.12 - '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-block-scoping': 7.20.15_@babel+core@7.20.12 - '@babel/plugin-transform-classes': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-computed-properties': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-destructuring': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.20.12 - '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.20.12 - '@babel/plugin-transform-modules-commonjs': 7.20.11_@babel+core@7.20.12 - '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.20.12 - '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.20.12 - '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-parameters': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-regenerator': 7.20.5_@babel+core@7.20.12 - '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.20.12 - '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.20.12 - '@babel/preset-modules': 0.1.5_@babel+core@7.20.12 - '@babel/types': 7.20.7 - babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.12 - babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.12 - babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.12 - core-js-compat: 3.28.0 + '@babel/helper-validator-option': 7.21.0 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-class-static-block': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-private-property-in-object': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.4 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.4 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.4 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.21.4 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.4 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.4 + '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-block-scoping': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-transform-classes': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-transform-computed-properties': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-transform-destructuring': 7.21.3_@babel+core@7.21.4 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-for-of': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.21.4 + '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.21.4 + '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.21.4 + '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.21.4 + '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.4 + '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-regenerator': 7.20.5_@babel+core@7.21.4 + '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.21.4 + '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.21.4 + '@babel/preset-modules': 0.1.5_@babel+core@7.21.4 + '@babel/types': 7.21.4 + babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.21.4 + babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.21.4 + babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.21.4 + core-js-compat: 3.30.0 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules/0.1.5_@babel+core@7.20.12: + /@babel/preset-modules/0.1.5_@babel+core@7.21.4: resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.12 - '@babel/types': 7.20.7 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.4 + '@babel/types': 7.21.4 esutils: 2.0.3 dev: true @@ -1311,8 +1312,8 @@ packages: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: true - /@babel/runtime/7.20.13: - resolution: {integrity: sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==} + /@babel/runtime/7.21.0: + resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 @@ -1322,31 +1323,31 @@ packages: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/parser': 7.20.15 - '@babel/types': 7.20.7 + '@babel/code-frame': 7.21.4 + '@babel/parser': 7.21.4 + '@babel/types': 7.21.4 dev: true - /@babel/traverse/7.20.13: - resolution: {integrity: sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==} + /@babel/traverse/7.21.4: + resolution: {integrity: sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.14 + '@babel/code-frame': 7.21.4 + '@babel/generator': 7.21.4 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.20.15 - '@babel/types': 7.20.7 + '@babel/parser': 7.21.4 + '@babel/types': 7.21.4 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types/7.20.7: - resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} + /@babel/types/7.21.4: + resolution: {integrity: sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.19.4 @@ -1358,20 +1359,20 @@ packages: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /@commitlint/cli/16.3.0_@swc+core@1.3.35: + /@commitlint/cli/16.3.0_@swc+core@1.3.49: resolution: {integrity: sha512-P+kvONlfsuTMnxSwWE1H+ZcPMY3STFaHb2kAacsqoIkNx66O0T7sTpBxpxkMrFPyhkJiLJnJWMhk4bbvYD3BMA==} engines: {node: '>=v12'} hasBin: true dependencies: '@commitlint/format': 16.2.1 '@commitlint/lint': 16.2.4 - '@commitlint/load': 16.3.0_@swc+core@1.3.35 + '@commitlint/load': 16.3.0_@swc+core@1.3.49 '@commitlint/read': 16.2.1 '@commitlint/types': 16.2.1 lodash: 4.17.21 resolve-from: 5.0.0 resolve-global: 1.0.0 - yargs: 17.7.0 + yargs: 17.7.1 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -1446,7 +1447,7 @@ packages: '@commitlint/types': 16.2.1 dev: true - /@commitlint/load/16.3.0_@swc+core@1.3.35: + /@commitlint/load/16.3.0_@swc+core@1.3.49: resolution: {integrity: sha512-3tykjV/iwbkv2FU9DG+NZ/JqmP0Nm3b7aDwgCNQhhKV5P74JAuByULkafnhn+zsFGypG1qMtI5u+BZoa9APm0A==} engines: {node: '>=v12'} dependencies: @@ -1454,10 +1455,10 @@ packages: '@commitlint/execute-rule': 16.2.1 '@commitlint/resolve-extends': 16.2.1 '@commitlint/types': 16.2.1 - '@types/node': 18.15.5 + '@types/node': 18.15.11 chalk: 4.1.1 cosmiconfig: 7.1.0 - cosmiconfig-typescript-loader: 2.0.2_chdop2axsawvq2yu4npultaqpi + cosmiconfig-typescript-loader: 2.0.2_faublg25f7qpbcz6w4cw6yyzse lodash: 4.17.21 resolve-from: 5.0.0 typescript: 4.9.5 @@ -1466,8 +1467,8 @@ packages: - '@swc/wasm' dev: true - /@commitlint/load/17.4.4_@swc+core@1.3.35: - resolution: {integrity: sha512-z6uFIQ7wfKX5FGBe1AkOF4l/ShOQsaa1ml/nLMkbW7R/xF8galGS7Zh0yHvzVp/srtfS0brC+0bUfQfmpMPFVQ==} + /@commitlint/load/17.5.0_@swc+core@1.3.49: + resolution: {integrity: sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q==} engines: {node: '>=v14'} requiresBuild: true dependencies: @@ -1475,16 +1476,16 @@ packages: '@commitlint/execute-rule': 17.4.0 '@commitlint/resolve-extends': 17.4.4 '@commitlint/types': 17.4.4 - '@types/node': 18.15.5 + '@types/node': 18.15.11 chalk: 4.1.1 - cosmiconfig: 8.0.0 - cosmiconfig-typescript-loader: 4.3.0_ycmcvgie5c4ufymdvfl6ce7js4 + cosmiconfig: 8.1.3 + cosmiconfig-typescript-loader: 4.3.0_zulaepqzabcjiyzbkdbfeduf6u lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.1_chdop2axsawvq2yu4npultaqpi - typescript: 4.9.5 + ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e + typescript: 5.0.4 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -1594,8 +1595,8 @@ packages: dev: true optional: true - /@esbuild/android-arm/0.17.15: - resolution: {integrity: sha512-sRSOVlLawAktpMvDyJIkdLI/c/kdRTOqo8t6ImVxg8yT7LQDUYV5Rp2FKeEosLr6ZCja9UjYAzyRSxGteSJPYg==} + /@esbuild/android-arm/0.17.16: + resolution: {integrity: sha512-baLqRpLe4JnKrUXLJChoTN0iXZH7El/mu58GE3WIA6/H834k0XWvLRmGLG8y8arTRS9hJJibPnF0tiGhmWeZgw==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -1612,8 +1613,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64/0.17.15: - resolution: {integrity: sha512-0kOB6Y7Br3KDVgHeg8PRcvfLkq+AccreK///B4Z6fNZGr/tNHX0z2VywCc7PTeWp+bPvjA5WMvNXltHw5QjAIA==} + /@esbuild/android-arm64/0.17.16: + resolution: {integrity: sha512-QX48qmsEZW+gcHgTmAj+x21mwTz8MlYQBnzF6861cNdQGvj2jzzFjqH0EBabrIa/WVZ2CHolwMoqxVryqKt8+Q==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -1630,8 +1631,8 @@ packages: dev: true optional: true - /@esbuild/android-x64/0.17.15: - resolution: {integrity: sha512-MzDqnNajQZ63YkaUWVl9uuhcWyEyh69HGpMIrf+acR4otMkfLJ4sUCxqwbCyPGicE9dVlrysI3lMcDBjGiBBcQ==} + /@esbuild/android-x64/0.17.16: + resolution: {integrity: sha512-G4wfHhrrz99XJgHnzFvB4UwwPxAWZaZBOFXh+JH1Duf1I4vIVfuYY9uVLpx4eiV2D/Jix8LJY+TAdZ3i40tDow==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -1648,8 +1649,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64/0.17.15: - resolution: {integrity: sha512-7siLjBc88Z4+6qkMDxPT2juf2e8SJxmsbNVKFY2ifWCDT72v5YJz9arlvBw5oB4W/e61H1+HDB/jnu8nNg0rLA==} + /@esbuild/darwin-arm64/0.17.16: + resolution: {integrity: sha512-/Ofw8UXZxuzTLsNFmz1+lmarQI6ztMZ9XktvXedTbt3SNWDn0+ODTwxExLYQ/Hod91EZB4vZPQJLoqLF0jvEzA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -1666,8 +1667,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64/0.17.15: - resolution: {integrity: sha512-NbImBas2rXwYI52BOKTW342Tm3LTeVlaOQ4QPZ7XuWNKiO226DisFk/RyPk3T0CKZkKMuU69yOvlapJEmax7cg==} + /@esbuild/darwin-x64/0.17.16: + resolution: {integrity: sha512-SzBQtCV3Pdc9kyizh36Ol+dNVhkDyIrGb/JXZqFq8WL37LIyrXU0gUpADcNV311sCOhvY+f2ivMhb5Tuv8nMOQ==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -1684,8 +1685,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64/0.17.15: - resolution: {integrity: sha512-Xk9xMDjBVG6CfgoqlVczHAdJnCs0/oeFOspFap5NkYAmRCT2qTn1vJWA2f419iMtsHSLm+O8B6SLV/HlY5cYKg==} + /@esbuild/freebsd-arm64/0.17.16: + resolution: {integrity: sha512-ZqftdfS1UlLiH1DnS2u3It7l4Bc3AskKeu+paJSfk7RNOMrOxmeFDhLTMQqMxycP1C3oj8vgkAT6xfAuq7ZPRA==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -1702,8 +1703,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64/0.17.15: - resolution: {integrity: sha512-3TWAnnEOdclvb2pnfsTWtdwthPfOz7qAfcwDLcfZyGJwm1SRZIMOeB5FODVhnM93mFSPsHB9b/PmxNNbSnd0RQ==} + /@esbuild/freebsd-x64/0.17.16: + resolution: {integrity: sha512-rHV6zNWW1tjgsu0dKQTX9L0ByiJHHLvQKrWtnz8r0YYJI27FU3Xu48gpK2IBj1uCSYhJ+pEk6Y0Um7U3rIvV8g==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -1720,8 +1721,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm/0.17.15: - resolution: {integrity: sha512-MLTgiXWEMAMr8nmS9Gigx43zPRmEfeBfGCwxFQEMgJ5MC53QKajaclW6XDPjwJvhbebv+RzK05TQjvH3/aM4Xw==} + /@esbuild/linux-arm/0.17.16: + resolution: {integrity: sha512-n4O8oVxbn7nl4+m+ISb0a68/lcJClIbaGAoXwqeubj/D1/oMMuaAXmJVfFlRjJLu/ZvHkxoiFJnmbfp4n8cdSw==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -1738,8 +1739,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64/0.17.15: - resolution: {integrity: sha512-T0MVnYw9KT6b83/SqyznTs/3Jg2ODWrZfNccg11XjDehIved2oQfrX/wVuev9N936BpMRaTR9I1J0tdGgUgpJA==} + /@esbuild/linux-arm64/0.17.16: + resolution: {integrity: sha512-8yoZhGkU6aHu38WpaM4HrRLTFc7/VVD9Q2SvPcmIQIipQt2I/GMTZNdEHXoypbbGao5kggLcxg0iBKjo0SQYKA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -1756,8 +1757,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32/0.17.15: - resolution: {integrity: sha512-wp02sHs015T23zsQtU4Cj57WiteiuASHlD7rXjKUyAGYzlOKDAjqK6bk5dMi2QEl/KVOcsjwL36kD+WW7vJt8Q==} + /@esbuild/linux-ia32/0.17.16: + resolution: {integrity: sha512-9ZBjlkdaVYxPNO8a7OmzDbOH9FMQ1a58j7Xb21UfRU29KcEEU3VTHk+Cvrft/BNv0gpWJMiiZ/f4w0TqSP0gLA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -1774,8 +1775,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64/0.17.15: - resolution: {integrity: sha512-k7FsUJjGGSxwnBmMh8d7IbObWu+sF/qbwc+xKZkBe/lTAF16RqxRCnNHA7QTd3oS2AfGBAnHlXL67shV5bBThQ==} + /@esbuild/linux-loong64/0.17.16: + resolution: {integrity: sha512-TIZTRojVBBzdgChY3UOG7BlPhqJz08AL7jdgeeu+kiObWMFzGnQD7BgBBkWRwOtKR1i2TNlO7YK6m4zxVjjPRQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -1792,8 +1793,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el/0.17.15: - resolution: {integrity: sha512-ZLWk6czDdog+Q9kE/Jfbilu24vEe/iW/Sj2d8EVsmiixQ1rM2RKH2n36qfxK4e8tVcaXkvuV3mU5zTZviE+NVQ==} + /@esbuild/linux-mips64el/0.17.16: + resolution: {integrity: sha512-UPeRuFKCCJYpBbIdczKyHLAIU31GEm0dZl1eMrdYeXDH+SJZh/i+2cAmD3A1Wip9pIc5Sc6Kc5cFUrPXtR0XHA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -1810,8 +1811,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64/0.17.15: - resolution: {integrity: sha512-mY6dPkIRAiFHRsGfOYZC8Q9rmr8vOBZBme0/j15zFUKM99d4ILY4WpOC7i/LqoY+RE7KaMaSfvY8CqjJtuO4xg==} + /@esbuild/linux-ppc64/0.17.16: + resolution: {integrity: sha512-io6yShgIEgVUhExJejJ21xvO5QtrbiSeI7vYUnr7l+v/O9t6IowyhdiYnyivX2X5ysOVHAuyHW+Wyi7DNhdw6Q==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -1828,8 +1829,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64/0.17.15: - resolution: {integrity: sha512-EcyUtxffdDtWjjwIH8sKzpDRLcVtqANooMNASO59y+xmqqRYBBM7xVLQhqF7nksIbm2yHABptoioS9RAbVMWVA==} + /@esbuild/linux-riscv64/0.17.16: + resolution: {integrity: sha512-WhlGeAHNbSdG/I2gqX2RK2gfgSNwyJuCiFHMc8s3GNEMMHUI109+VMBfhVqRb0ZGzEeRiibi8dItR3ws3Lk+cA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -1846,8 +1847,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x/0.17.15: - resolution: {integrity: sha512-BuS6Jx/ezxFuHxgsfvz7T4g4YlVrmCmg7UAwboeyNNg0OzNzKsIZXpr3Sb/ZREDXWgt48RO4UQRDBxJN3B9Rbg==} + /@esbuild/linux-s390x/0.17.16: + resolution: {integrity: sha512-gHRReYsJtViir63bXKoFaQ4pgTyah4ruiMRQ6im9YZuv+gp3UFJkNTY4sFA73YDynmXZA6hi45en4BGhNOJUsw==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -1864,8 +1865,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64/0.17.15: - resolution: {integrity: sha512-JsdS0EgEViwuKsw5tiJQo9UdQdUJYuB+Mf6HxtJSPN35vez1hlrNb1KajvKWF5Sa35j17+rW1ECEO9iNrIXbNg==} + /@esbuild/linux-x64/0.17.16: + resolution: {integrity: sha512-mfiiBkxEbUHvi+v0P+TS7UnA9TeGXR48aK4XHkTj0ZwOijxexgMF01UDFaBX7Q6CQsB0d+MFNv9IiXbIHTNd4g==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -1882,8 +1883,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64/0.17.15: - resolution: {integrity: sha512-R6fKjtUysYGym6uXf6qyNephVUQAGtf3n2RCsOST/neIwPqRWcnc3ogcielOd6pT+J0RDR1RGcy0ZY7d3uHVLA==} + /@esbuild/netbsd-x64/0.17.16: + resolution: {integrity: sha512-n8zK1YRDGLRZfVcswcDMDM0j2xKYLNXqei217a4GyBxHIuPMGrrVuJ+Ijfpr0Kufcm7C1k/qaIrGy6eG7wvgmA==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -1900,8 +1901,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64/0.17.15: - resolution: {integrity: sha512-mVD4PGc26b8PI60QaPUltYKeSX0wxuy0AltC+WCTFwvKCq2+OgLP4+fFd+hZXzO2xW1HPKcytZBdjqL6FQFa7w==} + /@esbuild/openbsd-x64/0.17.16: + resolution: {integrity: sha512-lEEfkfsUbo0xC47eSTBqsItXDSzwzwhKUSsVaVjVji07t8+6KA5INp2rN890dHZeueXJAI8q0tEIfbwVRYf6Ew==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -1918,8 +1919,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64/0.17.15: - resolution: {integrity: sha512-U6tYPovOkw3459t2CBwGcFYfFRjivcJJc1WC8Q3funIwX8x4fP+R6xL/QuTPNGOblbq/EUDxj9GU+dWKX0oWlQ==} + /@esbuild/sunos-x64/0.17.16: + resolution: {integrity: sha512-jlRjsuvG1fgGwnE8Afs7xYDnGz0dBgTNZfgCK6TlvPH3Z13/P5pi6I57vyLE8qZYLrGVtwcm9UbUx1/mZ8Ukag==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -1936,8 +1937,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64/0.17.15: - resolution: {integrity: sha512-W+Z5F++wgKAleDABemiyXVnzXgvRFs+GVKThSI+mGgleLWluv0D7Diz4oQpgdpNzh4i2nNDzQtWbjJiqutRp6Q==} + /@esbuild/win32-arm64/0.17.16: + resolution: {integrity: sha512-TzoU2qwVe2boOHl/3KNBUv2PNUc38U0TNnzqOAcgPiD/EZxT2s736xfC2dYQbszAwo4MKzzwBV0iHjhfjxMimg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -1954,8 +1955,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32/0.17.15: - resolution: {integrity: sha512-Muz/+uGgheShKGqSVS1KsHtCyEzcdOn/W/Xbh6H91Etm+wiIfwZaBn1W58MeGtfI8WA961YMHFYTthBdQs4t+w==} + /@esbuild/win32-ia32/0.17.16: + resolution: {integrity: sha512-B8b7W+oo2yb/3xmwk9Vc99hC9bNolvqjaTZYEfMQhzdpBsjTvZBlXQ/teUE55Ww6sg//wlcDjOaqldOKyigWdA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -1972,8 +1973,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64/0.17.15: - resolution: {integrity: sha512-DjDa9ywLUUmjhV2Y9wUTIF+1XsmuFGvZoCmOWkli1XcNAh5t25cc7fgsCx4Zi/Uurep3TTLyDiKATgGEg61pkA==} + /@esbuild/win32-x64/0.17.16: + resolution: {integrity: sha512-xJ7OH/nanouJO9pf03YsL9NAFQBHd8AqfrQd7Pf5laGyyTt/gToul6QYOA/i5i/q8y9iaM5DQFNTgpi995VkOg==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -1981,6 +1982,21 @@ packages: dev: true optional: true + /@eslint-community/eslint-utils/4.4.0_eslint@7.32.0: + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 7.32.0 + eslint-visitor-keys: 3.4.0 + dev: true + + /@eslint-community/regexpp/4.5.0: + resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + /@eslint/eslintrc/0.4.3: resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -2029,20 +2045,20 @@ packages: engines: {node: '>=8'} dev: true - /@jest/console/29.4.3: - resolution: {integrity: sha512-W/o/34+wQuXlgqlPYTansOSiBnuxrTv61dEVkA6HNmpcgHLUjfaUbdqt6oVvOzaawwo9IdW9QOtMgQ1ScSZC4A==} + /@jest/console/29.5.0: + resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.4.3 - '@types/node': 18.15.5 + '@jest/types': 29.5.0 + '@types/node': 18.15.11 chalk: 4.1.1 - jest-message-util: 29.4.3 - jest-util: 29.4.3 + jest-message-util: 29.5.0 + jest-util: 29.5.0 slash: 3.0.0 dev: true - /@jest/core/29.4.3_ts-node@10.9.1: - resolution: {integrity: sha512-56QvBq60fS4SPZCuM7T+7scNrkGIe7Mr6PVIXUpu48ouvRaWOFqRPV91eifvFM0ay2HmfswXiGf97NGUN5KofQ==} + /@jest/core/29.5.0_ts-node@10.9.1: + resolution: {integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -2050,32 +2066,32 @@ packages: node-notifier: optional: true dependencies: - '@jest/console': 29.4.3 - '@jest/reporters': 29.4.3 - '@jest/test-result': 29.4.3 - '@jest/transform': 29.4.3 - '@jest/types': 29.4.3 - '@types/node': 18.15.5 + '@jest/console': 29.5.0 + '@jest/reporters': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.11 ansi-escapes: 4.3.2 chalk: 4.1.1 ci-info: 3.8.0 exit: 0.1.2 - graceful-fs: 4.2.10 - jest-changed-files: 29.4.3 - jest-config: 29.4.3_757mb262zsxkcnuknwfdsckmku - jest-haste-map: 29.4.3 - jest-message-util: 29.4.3 + graceful-fs: 4.2.11 + jest-changed-files: 29.5.0 + jest-config: 29.5.0_rrli7kzx2akox3oq6aahu3rvje + jest-haste-map: 29.5.0 + jest-message-util: 29.5.0 jest-regex-util: 29.4.3 - jest-resolve: 29.4.3 - jest-resolve-dependencies: 29.4.3 - jest-runner: 29.4.3 - jest-runtime: 29.4.3 - jest-snapshot: 29.4.3 - jest-util: 29.4.3 - jest-validate: 29.4.3 - jest-watcher: 29.4.3 + jest-resolve: 29.5.0 + jest-resolve-dependencies: 29.5.0 + jest-runner: 29.5.0 + jest-runtime: 29.5.0 + jest-snapshot: 29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 + jest-watcher: 29.5.0 micromatch: 4.0.5 - pretty-format: 29.4.3 + pretty-format: 29.5.0 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: @@ -2090,59 +2106,59 @@ packages: '@jest/types': 27.5.1 dev: true - /@jest/environment/29.4.3: - resolution: {integrity: sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==} + /@jest/environment/29.5.0: + resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/fake-timers': 29.4.3 - '@jest/types': 29.4.3 - '@types/node': 18.15.5 - jest-mock: 29.4.3 + '@jest/fake-timers': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.11 + jest-mock: 29.5.0 dev: true - /@jest/expect-utils/29.4.3: - resolution: {integrity: sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==} + /@jest/expect-utils/29.5.0: + resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.3 dev: true - /@jest/expect/29.4.3: - resolution: {integrity: sha512-iktRU/YsxEtumI9zsPctYUk7ptpC+AVLLk1Ax3AsA4g1C+8OOnKDkIQBDHtD5hA/+VtgMd5AWI5gNlcAlt2vxQ==} + /@jest/expect/29.5.0: + resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - expect: 29.4.3 - jest-snapshot: 29.4.3 + expect: 29.5.0 + jest-snapshot: 29.5.0 transitivePeerDependencies: - supports-color dev: true - /@jest/fake-timers/29.4.3: - resolution: {integrity: sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==} + /@jest/fake-timers/29.5.0: + resolution: {integrity: sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.4.3 + '@jest/types': 29.5.0 '@sinonjs/fake-timers': 10.0.2 - '@types/node': 18.15.5 - jest-message-util: 29.4.3 - jest-mock: 29.4.3 - jest-util: 29.4.3 + '@types/node': 18.15.11 + jest-message-util: 29.5.0 + jest-mock: 29.5.0 + jest-util: 29.5.0 dev: true - /@jest/globals/29.4.3: - resolution: {integrity: sha512-8BQ/5EzfOLG7AaMcDh7yFCbfRLtsc+09E1RQmRBI4D6QQk4m6NSK/MXo+3bJrBN0yU8A2/VIcqhvsOLFmziioA==} + /@jest/globals/29.5.0: + resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.4.3 - '@jest/expect': 29.4.3 - '@jest/types': 29.4.3 - jest-mock: 29.4.3 + '@jest/environment': 29.5.0 + '@jest/expect': 29.5.0 + '@jest/types': 29.5.0 + jest-mock: 29.5.0 transitivePeerDependencies: - supports-color dev: true - /@jest/reporters/29.4.3: - resolution: {integrity: sha512-sr2I7BmOjJhyqj9ANC6CTLsL4emMoka7HkQpcoMRlhCbQJjz2zsRzw0BDPiPyEFDXAbxKgGFYuQZiSJ1Y6YoTg==} + /@jest/reporters/29.5.0: + resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -2151,25 +2167,25 @@ packages: optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.4.3 - '@jest/test-result': 29.4.3 - '@jest/transform': 29.4.3 - '@jest/types': 29.4.3 - '@jridgewell/trace-mapping': 0.3.17 - '@types/node': 18.15.5 + '@jest/console': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 + '@jest/types': 29.5.0 + '@jridgewell/trace-mapping': 0.3.18 + '@types/node': 18.15.11 chalk: 4.1.1 collect-v8-coverage: 1.0.1 exit: 0.1.2 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.0 istanbul-lib-instrument: 5.2.1 istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.5 - jest-message-util: 29.4.3 - jest-util: 29.4.3 - jest-worker: 29.4.3 + jest-message-util: 29.5.0 + jest-util: 29.5.0 + jest-worker: 29.5.0 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 @@ -2182,53 +2198,53 @@ packages: resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@sinclair/typebox': 0.25.23 + '@sinclair/typebox': 0.25.24 dev: true /@jest/source-map/29.4.3: resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 callsites: 3.1.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: true - /@jest/test-result/29.4.3: - resolution: {integrity: sha512-Oi4u9NfBolMq9MASPwuWTlC5WvmNRwI4S8YrQg5R5Gi47DYlBe3sh7ILTqi/LGrK1XUE4XY9KZcQJTH1WJCLLA==} + /@jest/test-result/29.5.0: + resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.4.3 - '@jest/types': 29.4.3 + '@jest/console': 29.5.0 + '@jest/types': 29.5.0 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 dev: true - /@jest/test-sequencer/29.4.3: - resolution: {integrity: sha512-yi/t2nES4GB4G0mjLc0RInCq/cNr9dNwJxcGg8sslajua5Kb4kmozAc+qPLzplhBgfw1vLItbjyHzUN92UXicw==} + /@jest/test-sequencer/29.5.0: + resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.4.3 - graceful-fs: 4.2.10 - jest-haste-map: 29.4.3 + '@jest/test-result': 29.5.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.5.0 slash: 3.0.0 dev: true - /@jest/transform/29.4.3: - resolution: {integrity: sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg==} + /@jest/transform/29.5.0: + resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.20.12 - '@jest/types': 29.4.3 - '@jridgewell/trace-mapping': 0.3.17 + '@babel/core': 7.21.4 + '@jest/types': 29.5.0 + '@jridgewell/trace-mapping': 0.3.18 babel-plugin-istanbul: 6.1.1 chalk: 4.1.1 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.10 - jest-haste-map: 29.4.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.5.0 jest-regex-util: 29.4.3 - jest-util: 29.4.3 + jest-util: 29.5.0 micromatch: 4.0.5 pirates: 4.0.5 slash: 3.0.0 @@ -2243,42 +2259,39 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.5 + '@types/node': 18.15.11 '@types/yargs': 16.0.5 chalk: 4.1.1 dev: true - /@jest/types/29.4.3: - resolution: {integrity: sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==} + /@jest/types/29.5.0: + resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/schemas': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.5 - '@types/yargs': 17.0.22 + '@types/node': 18.15.11 + '@types/yargs': 17.0.24 chalk: 4.1.1 dev: true - /@jridgewell/gen-mapping/0.1.1: - resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} + /@jridgewell/gen-mapping/0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.18 dev: true - /@jridgewell/gen-mapping/0.3.2: - resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} + /@jridgewell/resolve-uri/3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/trace-mapping': 0.3.17 dev: true - /@jridgewell/resolve-uri/3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + /@jridgewell/resolve-uri/3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} dev: true @@ -2287,19 +2300,23 @@ packages: engines: {node: '>=6.0.0'} dev: true - /@jridgewell/source-map/0.3.2: - resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} + /@jridgewell/source-map/0.3.3: + resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} dependencies: - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 dev: true /@jridgewell/sourcemap-codec/1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true - /@jridgewell/trace-mapping/0.3.17: - resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} + /@jridgewell/sourcemap-codec/1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@jridgewell/trace-mapping/0.3.18: + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 @@ -2308,8 +2325,8 @@ packages: /@jridgewell/trace-mapping/0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 dev: true /@mswjs/cookies/0.2.2: @@ -2317,15 +2334,15 @@ packages: engines: {node: '>=14'} dependencies: '@types/set-cookie-parser': 2.4.2 - set-cookie-parser: 2.5.1 + set-cookie-parser: 2.6.0 dev: false - /@mswjs/interceptors/0.22.11: - resolution: {integrity: sha512-r/gLCFiFItPXRaJc2vRy3BljFTUiLkOWkgY/Vxdr+UOitDptYXetu3pWKDZLHVUrBawN7scP98W2t8On/pyt8g==} + /@mswjs/interceptors/0.22.12: + resolution: {integrity: sha512-SHzP8HCsgjpmFI+OXWIYSdDQBnNCmcb3TQOETRMWHaNjXFGt2EwniJWQXMfMRrmgdvyb8izGGhFArrBAx+2KSg==} engines: {node: '>=18'} dependencies: '@open-draft/deferred-promise': 2.1.0 - '@open-draft/logger': 0.2.0 + '@open-draft/logger': 0.3.0 '@open-draft/until': 2.0.0 headers-polyfill: 3.1.2 outvariant: 1.4.0 @@ -2357,8 +2374,8 @@ packages: resolution: {integrity: sha512-Rzd5JrXZX8zErHzgcGyngh4fmEbSHqTETdGj9rXtejlqMIgXFlyKBA7Jn1Xp0Ls0M0Y22+xHcWiEzbmdWl0BOA==} dev: false - /@open-draft/logger/0.2.0: - resolution: {integrity: sha512-/s7NLIXIvLcRUlrs94GFj7hcxH87JZaJNr9SlDhdvDIS8ke9GcflqjNzs47kTOG7dH2AjMZ9rJgX3l7tREUVxA==} + /@open-draft/logger/0.3.0: + resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} dependencies: is-node-process: 1.2.0 outvariant: 1.4.0 @@ -2373,7 +2390,7 @@ packages: cors: 2.8.5 express: 4.18.2 outvariant: 1.4.0 - socket.io: 4.6.0 + socket.io: 4.6.1 transitivePeerDependencies: - bufferutil - supports-color @@ -2390,12 +2407,12 @@ packages: '@open-draft/until': 2.0.0 '@types/conventional-commits-parser': 3.0.3 '@types/issue-parser': 3.0.1 - '@types/node': 16.18.12 - '@types/node-fetch': 2.6.2 + '@types/node': 16.18.23 + '@types/node-fetch': 2.6.3 '@types/rc': 1.2.1 '@types/registry-auth-token': 4.2.1 '@types/semver': 7.3.13 - '@types/yargs': 17.0.22 + '@types/yargs': 17.0.24 conventional-commits-parser: 3.2.4 get-stream: 6.0.1 git-log-parser: 1.2.0 @@ -2406,23 +2423,25 @@ packages: pino-pretty: 7.6.1 rc: 1.2.8 registry-auth-token: 4.2.2 - semver: 7.3.8 - yargs: 17.7.0 + semver: 7.4.0 + yargs: 17.7.1 transitivePeerDependencies: - encoding dev: true - /@playwright/test/1.30.0: - resolution: {integrity: sha512-SVxkQw1xvn/Wk/EvBnqWIq6NLo1AppwbYOjNLmyU0R1RoQ3rLEBtmjTnElcnz8VEtn11fptj1ECxK0tgURhajw==} + /@playwright/test/1.32.3: + resolution: {integrity: sha512-BvWNvK0RfBriindxhLVabi8BRe3X0J9EVjKlcmhxjg4giWBD/xleLcg2dz7Tx0agu28rczjNIPQWznwzDwVsZQ==} engines: {node: '>=14'} hasBin: true dependencies: - '@types/node': 18.15.5 - playwright-core: 1.30.0 + '@types/node': 18.15.11 + playwright-core: 1.32.3 + optionalDependencies: + fsevents: 2.3.2 dev: true - /@sinclair/typebox/0.25.23: - resolution: {integrity: sha512-VEB8ygeP42CFLWyAJhN5OklpxUliqdNEUcXb4xZ/CINqtYGTjL5ukluKdKzQ0iWdUxyQ7B0539PAUhHKrCNWSQ==} + /@sinclair/typebox/0.25.24: + resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} dev: true /@sinonjs/commons/2.0.0: @@ -2441,8 +2460,8 @@ packages: resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} dev: true - /@swc/core-darwin-arm64/1.3.35: - resolution: {integrity: sha512-zQUFkHx4gZpu0uo2IspvPnKsz8bsdXd5bC33xwjtoAI1cpLerDyqo4v2zIahEp+FdKZjyVsLHtfJiQiA1Qka3A==} + /@swc/core-darwin-arm64/1.3.49: + resolution: {integrity: sha512-g7aIfXh6uPHmhLXdjXQq5t3HAyS/EdvujasW1DIS5k8UqOBaSoCcSGtLIjzcLv3KujqNfYcm118E+12H0nY6fQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -2450,8 +2469,8 @@ packages: dev: true optional: true - /@swc/core-darwin-x64/1.3.35: - resolution: {integrity: sha512-oOSkSGWtALovaw22lNevKD434OQTPf8X+dVPvPMrJXJpJ34dWDlFWpLntoc+arvKLNZ7LQmTuk8rR1hkrAY7cw==} + /@swc/core-darwin-x64/1.3.49: + resolution: {integrity: sha512-eSIxVX0YDw40Bre5sAx2BV3DzdIGzmQvCf2yiBvLqiiL6GC0mmuDeWbUCAzdUX6fJ6FUVEBMUVqNOc9oJ2/d5w==} engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -2459,8 +2478,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm-gnueabihf/1.3.35: - resolution: {integrity: sha512-Yie8k00O6O8BCATS/xeKStquV4OYSskUGRDXBQVDw1FrE23PHaSeHCgg4q6iNZjJzXCOJbaTCKnYoIDn9DMf7A==} + /@swc/core-linux-arm-gnueabihf/1.3.49: + resolution: {integrity: sha512-8mj3IcRVr/OJY0mVITz6Z5osNAMJK5GiKDaZ+3QejPLbl6aiu4sH4GmTHDRN14RnaVXOpecsGcUoQmNoNa3u3w==} engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -2468,8 +2487,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-gnu/1.3.35: - resolution: {integrity: sha512-Zlv3WHa/4x2p51HSvjUWXHfSe1Gl2prqImUZJc8NZOlj75BFzVuR0auhQ+LbwvIQ3gaA1LODX9lyS9wXL3yjxA==} + /@swc/core-linux-arm64-gnu/1.3.49: + resolution: {integrity: sha512-Rmg9xw6tmpOpf6GKKjpHQGmjfHzqSths5ebI2ahrHlhekzZF2HYmPkVw4bHda8Bja6mbaw8FVBgBHjPU8mMeDA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -2477,8 +2496,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-musl/1.3.35: - resolution: {integrity: sha512-u6tCYsrSyZ8U+4jLMA/O82veBfLy2aUpn51WxQaeH7wqZGy9TGSJXoO8vWxARQ6b72vjsnKDJHP4MD8hFwcctg==} + /@swc/core-linux-arm64-musl/1.3.49: + resolution: {integrity: sha512-nlKPYMogAI3Aak6Mlkag8/2AlHAZ/DpH7RjhfMazsaGhD/sQOmYdyY9Al69ejpa419YJuREeeeLoojFlSsd30g==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -2486,8 +2505,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-gnu/1.3.35: - resolution: {integrity: sha512-Dtxf2IbeH7XlNhP1Qt2/MvUPkpEbn7hhGfpSRs4ot8D3Vf5QEX4S/QtC1OsFWuciiYgHAT1Ybjt4xZic9DSkmA==} + /@swc/core-linux-x64-gnu/1.3.49: + resolution: {integrity: sha512-QOyeJQ6NVi73SJcizbwvIZTiGA/N+BxX9liRrvibumaQmRh8fWjJiLNsv3ODSHeuonak7E8Bf7a7NnSTyu48Mw==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -2495,8 +2514,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-musl/1.3.35: - resolution: {integrity: sha512-4XavNJ60GprjpTiESCu5daJUnmErixPAqDitJSMu4TV32LNIE8G00S9pDLXinDTW1rgcGtQdq1NLkNRmwwovtg==} + /@swc/core-linux-x64-musl/1.3.49: + resolution: {integrity: sha512-WlDMz+SOpYC9O/ZBUw1oiyWI7HyUCMlf/HS8Fy/kRI3eGoGCUxVTCJ1mP57GdQr4Wg32Y/ZpO2KSNQFWnT8mAw==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -2504,8 +2523,8 @@ packages: dev: true optional: true - /@swc/core-win32-arm64-msvc/1.3.35: - resolution: {integrity: sha512-dNGfKCUSX2M4qVyaS80Lyos0FkXyHRCvrdQ2Y4Hrg3FVokiuw3yY6fLohpUfQ5ws3n2A39dh7jGDeh34+l0sGA==} + /@swc/core-win32-arm64-msvc/1.3.49: + resolution: {integrity: sha512-41LZOeI94Za3twib8KOIjnHYAZ+nkBFmboaREsFR1760S7jiMVywqWX8nFZvn/CXj15Fjjgdgyuig+zMREwXwQ==} engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -2513,8 +2532,8 @@ packages: dev: true optional: true - /@swc/core-win32-ia32-msvc/1.3.35: - resolution: {integrity: sha512-ChuPSrDR+JBf7S7dEKPicnG8A3bM0uWPsW2vG+V2wH4iNfNxKVemESHosmYVeEZXqMpomNMvLyeHep1rjRsc0Q==} + /@swc/core-win32-ia32-msvc/1.3.49: + resolution: {integrity: sha512-IdqLPoMKssyAoOCZdNXmnAd6/uyx+Hb9KSfZUHepZaNfwMy6J5XXrOsbYs3v53FH8MtekUUdV+mMX4me9bcv9w==} engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -2522,8 +2541,8 @@ packages: dev: true optional: true - /@swc/core-win32-x64-msvc/1.3.35: - resolution: {integrity: sha512-/RvphT4WfuGfIK84Ha0dovdPrKB1bW/mc+dtdmhv2E3EGkNc5FoueNwYmXWRimxnU7X0X7IkcRhyKB4G5DeAmg==} + /@swc/core-win32-x64-msvc/1.3.49: + resolution: {integrity: sha512-7Fqjo5pS3uIohhSbYSaR0+e/bJdxmQb4oG97FIh5qvlCCGQaQ9UiaEeYy4uK0Ad+Menum1IXCAEiG7RHcl6Eyw==} engines: {node: '>=10'} cpu: [x64] os: [win32] @@ -2531,31 +2550,36 @@ packages: dev: true optional: true - /@swc/core/1.3.35: - resolution: {integrity: sha512-KmiBin0XSVzJhzX19zTiCqmLslZ40Cl7zqskJcTDeIrRhfgKdiAsxzYUanJgMJIRjYtl9Kcg1V/Ip2o2wL8v3w==} + /@swc/core/1.3.49: + resolution: {integrity: sha512-br44ZHOfE9YyRGcORSLkHFQHTvhwRcaithBJ1Q5y5iMGpLbH0Wai3GN49L60RvmGwxNJfWzT+E7+rNNR7ewKgA==} engines: {node: '>=10'} requiresBuild: true + peerDependencies: + '@swc/helpers': ^0.5.0 + peerDependenciesMeta: + '@swc/helpers': + optional: true optionalDependencies: - '@swc/core-darwin-arm64': 1.3.35 - '@swc/core-darwin-x64': 1.3.35 - '@swc/core-linux-arm-gnueabihf': 1.3.35 - '@swc/core-linux-arm64-gnu': 1.3.35 - '@swc/core-linux-arm64-musl': 1.3.35 - '@swc/core-linux-x64-gnu': 1.3.35 - '@swc/core-linux-x64-musl': 1.3.35 - '@swc/core-win32-arm64-msvc': 1.3.35 - '@swc/core-win32-ia32-msvc': 1.3.35 - '@swc/core-win32-x64-msvc': 1.3.35 - dev: true - - /@swc/jest/0.2.24_@swc+core@1.3.35: + '@swc/core-darwin-arm64': 1.3.49 + '@swc/core-darwin-x64': 1.3.49 + '@swc/core-linux-arm-gnueabihf': 1.3.49 + '@swc/core-linux-arm64-gnu': 1.3.49 + '@swc/core-linux-arm64-musl': 1.3.49 + '@swc/core-linux-x64-gnu': 1.3.49 + '@swc/core-linux-x64-musl': 1.3.49 + '@swc/core-win32-arm64-msvc': 1.3.49 + '@swc/core-win32-ia32-msvc': 1.3.49 + '@swc/core-win32-x64-msvc': 1.3.49 + dev: true + + /@swc/jest/0.2.24_@swc+core@1.3.49: resolution: {integrity: sha512-fwgxQbM1wXzyKzl1+IW0aGrRvAA8k0Y3NxFhKigbPjOJ4mCKnWEcNX9HQS3gshflcxq8YKhadabGUVfdwjCr6Q==} engines: {npm: '>= 7.0.0'} peerDependencies: '@swc/core': '*' dependencies: '@jest/create-cache-key-function': 27.5.1 - '@swc/core': 1.3.35 + '@swc/core': 1.3.49 jsonc-parser: 3.2.0 dev: true @@ -2583,8 +2607,8 @@ packages: /@types/babel__core/7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: - '@babel/parser': 7.20.15 - '@babel/types': 7.20.7 + '@babel/parser': 7.21.4 + '@babel/types': 7.21.4 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.18.3 @@ -2593,39 +2617,39 @@ packages: /@types/babel__generator/7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.4 dev: true /@types/babel__template/7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.20.15 - '@babel/types': 7.20.7 + '@babel/parser': 7.21.4 + '@babel/types': 7.21.4 dev: true /@types/babel__traverse/7.18.3: resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.4 dev: true /@types/body-parser/1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 18.15.5 + '@types/node': 18.15.11 dev: true /@types/connect/3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 18.15.5 + '@types/node': 18.15.11 dev: true /@types/conventional-commits-parser/3.0.3: resolution: {integrity: sha512-aoUKfRQYvGMH+spFpOTX9jO4nZoz9/BKp4hlHPxL3Cj2r2Xj+jEcwlXtFIyZr5uL8bh1nbWynDEYaAota+XqPg==} dependencies: - '@types/node': 18.15.5 + '@types/node': 18.15.11 dev: true /@types/cookie/0.4.1: @@ -2634,7 +2658,7 @@ packages: /@types/cors/2.8.13: resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==} dependencies: - '@types/node': 18.15.5 + '@types/node': 18.15.11 dev: true /@types/debug/4.1.7: @@ -2646,25 +2670,25 @@ packages: /@types/eslint-scope/3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: - '@types/eslint': 8.21.1 - '@types/estree': 0.0.51 + '@types/eslint': 8.37.0 + '@types/estree': 1.0.0 dev: true - /@types/eslint/8.21.1: - resolution: {integrity: sha512-rc9K8ZpVjNcLs8Fp0dkozd5Pt2Apk1glO4Vgz8ix1u6yFByxfqo5Yavpy65o+93TAe24jr7v+eSBtFLvOQtCRQ==} + /@types/eslint/8.37.0: + resolution: {integrity: sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==} dependencies: - '@types/estree': 0.0.51 + '@types/estree': 1.0.0 '@types/json-schema': 7.0.11 dev: true - /@types/estree/0.0.51: - resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} + /@types/estree/1.0.0: + resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} dev: true /@types/express-serve-static-core/4.17.33: resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} dependencies: - '@types/node': 18.15.5 + '@types/node': 18.15.11 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 dev: true @@ -2675,33 +2699,33 @@ packages: '@types/body-parser': 1.19.2 '@types/express-serve-static-core': 4.17.33 '@types/qs': 6.9.7 - '@types/serve-static': 1.15.0 + '@types/serve-static': 1.15.1 dev: true /@types/fs-extra/9.0.13: resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} dependencies: - '@types/node': 18.15.5 + '@types/node': 18.15.11 dev: true /@types/glob/7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.15.5 + '@types/node': 18.15.11 dev: true /@types/glob/8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.15.5 + '@types/node': 18.15.11 dev: true /@types/graceful-fs/4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 18.15.5 + '@types/node': 18.15.11 dev: true /@types/issue-parser/3.0.1: @@ -2724,11 +2748,11 @@ packages: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest/29.4.0: - resolution: {integrity: sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==} + /@types/jest/29.5.0: + resolution: {integrity: sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg==} dependencies: - expect: 29.4.3 - pretty-format: 29.4.3 + expect: 29.5.0 + pretty-format: 29.5.0 dev: true /@types/js-levenshtein/1.1.1: @@ -2738,7 +2762,7 @@ packages: /@types/jsdom/20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: - '@types/node': 18.15.5 + '@types/node': 18.15.11 '@types/tough-cookie': 4.0.2 parse5: 7.1.2 dev: true @@ -2771,19 +2795,19 @@ packages: resolution: {integrity: sha512-MUSpfpW0yZbTgjekDbH0shMYBUD+X/uJJJMm9LXN1d5yjl5lCY1vN/eWKD6D1tOtjA6206K0zcIPnUaFMurdNA==} dev: true - /@types/node-fetch/2.6.2: - resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==} + /@types/node-fetch/2.6.3: + resolution: {integrity: sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==} dependencies: - '@types/node': 18.15.5 + '@types/node': 18.15.11 form-data: 3.0.1 dev: true - /@types/node/16.18.12: - resolution: {integrity: sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==} + /@types/node/16.18.23: + resolution: {integrity: sha512-XAMpaw1s1+6zM+jn2tmw8MyaRDIJfXxqmIQIS0HfoGYPuf7dUWeiUKopwq13KFX9lEp1+THGtlaaYx39Nxr58g==} dev: true - /@types/node/18.15.5: - resolution: {integrity: sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew==} + /@types/node/18.15.11: + resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -2800,7 +2824,7 @@ packages: /@types/puppeteer/5.4.7: resolution: {integrity: sha512-JdGWZZYL0vKapXF4oQTC5hLVNfOgdPrqeZ1BiQnGk5cB7HeE91EWUiTdVSdQPobRN8rIcdffjiOgCYJ/S8QrnQ==} dependencies: - '@types/node': 18.15.5 + '@types/node': 18.15.11 dev: true /@types/qs/6.9.7: @@ -2825,17 +2849,17 @@ packages: resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} dev: true - /@types/serve-static/1.15.0: - resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} + /@types/serve-static/1.15.1: + resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} dependencies: '@types/mime': 3.0.1 - '@types/node': 18.15.5 + '@types/node': 18.15.11 dev: true /@types/set-cookie-parser/2.4.2: resolution: {integrity: sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==} dependencies: - '@types/node': 18.15.5 + '@types/node': 18.15.11 dev: false /@types/stack-utils/2.0.1: @@ -2864,14 +2888,14 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@types/yargs/17.0.22: - resolution: {integrity: sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==} + /@types/yargs/17.0.24: + resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} dependencies: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin/5.52.0_aaw67h7nkydj3qj4plp2jqjmxe: - resolution: {integrity: sha512-lHazYdvYVsBokwCdKOppvYJKaJ4S41CgKBcPvyd0xjZNbvQdhn/pnJlGtQksQ/NhInzdaeaSarlBjDXHuclEbg==} + /@typescript-eslint/eslint-plugin/5.58.0_ug56riyzsilszklzuxgwlsssqe: + resolution: {integrity: sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -2881,25 +2905,25 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.52.0_jeuwjvsopuo23ctsjsevxmvjsi - '@typescript-eslint/scope-manager': 5.52.0 - '@typescript-eslint/type-utils': 5.52.0_jeuwjvsopuo23ctsjsevxmvjsi - '@typescript-eslint/utils': 5.52.0_jeuwjvsopuo23ctsjsevxmvjsi + '@eslint-community/regexpp': 4.5.0 + '@typescript-eslint/parser': 5.58.0_cgdknpc562nnyruteofhkegnom + '@typescript-eslint/scope-manager': 5.58.0 + '@typescript-eslint/type-utils': 5.58.0_cgdknpc562nnyruteofhkegnom + '@typescript-eslint/utils': 5.58.0_cgdknpc562nnyruteofhkegnom debug: 4.3.4 eslint: 7.32.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - regexpp: 3.2.0 - semver: 7.3.8 - tsutils: 3.21.0_typescript@5.0.2 - typescript: 5.0.2 + semver: 7.4.0 + tsutils: 3.21.0_typescript@5.0.4 + typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser/5.52.0_jeuwjvsopuo23ctsjsevxmvjsi: - resolution: {integrity: sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==} + /@typescript-eslint/parser/5.58.0_cgdknpc562nnyruteofhkegnom: + resolution: {integrity: sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -2908,26 +2932,26 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.52.0 - '@typescript-eslint/types': 5.52.0 - '@typescript-eslint/typescript-estree': 5.52.0_typescript@5.0.2 + '@typescript-eslint/scope-manager': 5.58.0 + '@typescript-eslint/types': 5.58.0 + '@typescript-eslint/typescript-estree': 5.58.0_typescript@5.0.4 debug: 4.3.4 eslint: 7.32.0 - typescript: 5.0.2 + typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager/5.52.0: - resolution: {integrity: sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==} + /@typescript-eslint/scope-manager/5.58.0: + resolution: {integrity: sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.52.0 - '@typescript-eslint/visitor-keys': 5.52.0 + '@typescript-eslint/types': 5.58.0 + '@typescript-eslint/visitor-keys': 5.58.0 dev: true - /@typescript-eslint/type-utils/5.52.0_jeuwjvsopuo23ctsjsevxmvjsi: - resolution: {integrity: sha512-tEKuUHfDOv852QGlpPtB3lHOoig5pyFQN/cUiZtpw99D93nEBjexRLre5sQZlkMoHry/lZr8qDAt2oAHLKA6Jw==} + /@typescript-eslint/type-utils/5.58.0_cgdknpc562nnyruteofhkegnom: + resolution: {integrity: sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -2936,23 +2960,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.52.0_typescript@5.0.2 - '@typescript-eslint/utils': 5.52.0_jeuwjvsopuo23ctsjsevxmvjsi + '@typescript-eslint/typescript-estree': 5.58.0_typescript@5.0.4 + '@typescript-eslint/utils': 5.58.0_cgdknpc562nnyruteofhkegnom debug: 4.3.4 eslint: 7.32.0 - tsutils: 3.21.0_typescript@5.0.2 - typescript: 5.0.2 + tsutils: 3.21.0_typescript@5.0.4 + typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types/5.52.0: - resolution: {integrity: sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==} + /@typescript-eslint/types/5.58.0: + resolution: {integrity: sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.52.0_typescript@5.0.2: - resolution: {integrity: sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==} + /@typescript-eslint/typescript-estree/5.58.0_typescript@5.0.4: + resolution: {integrity: sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -2960,44 +2984,44 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.52.0 - '@typescript-eslint/visitor-keys': 5.52.0 + '@typescript-eslint/types': 5.58.0 + '@typescript-eslint/visitor-keys': 5.58.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.3.8 - tsutils: 3.21.0_typescript@5.0.2 - typescript: 5.0.2 + semver: 7.4.0 + tsutils: 3.21.0_typescript@5.0.4 + typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils/5.52.0_jeuwjvsopuo23ctsjsevxmvjsi: - resolution: {integrity: sha512-As3lChhrbwWQLNk2HC8Ree96hldKIqk98EYvypd3It8Q1f8d5zWyIoaZEp2va5667M4ZyE7X8UUR+azXrFl+NA==} + /@typescript-eslint/utils/5.58.0_cgdknpc562nnyruteofhkegnom: + resolution: {integrity: sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: + '@eslint-community/eslint-utils': 4.4.0_eslint@7.32.0 '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.52.0 - '@typescript-eslint/types': 5.52.0 - '@typescript-eslint/typescript-estree': 5.52.0_typescript@5.0.2 + '@typescript-eslint/scope-manager': 5.58.0 + '@typescript-eslint/types': 5.58.0 + '@typescript-eslint/typescript-estree': 5.58.0_typescript@5.0.4 eslint: 7.32.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@7.32.0 - semver: 7.3.8 + semver: 7.4.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys/5.52.0: - resolution: {integrity: sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==} + /@typescript-eslint/visitor-keys/5.58.0: + resolution: {integrity: sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.52.0 - eslint-visitor-keys: 3.3.0 + '@typescript-eslint/types': 5.58.0 + eslint-visitor-keys: 3.4.0 dev: true /@webassemblyjs/ast/1.11.1: @@ -3344,6 +3368,13 @@ packages: engines: {node: '>=0.10.0'} dev: true + /array-buffer-byte-length/1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.2 + is-array-buffer: 3.0.2 + dev: true + /array-flatten/1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: true @@ -3384,7 +3415,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.1 + es-abstract: 1.21.2 es-array-method-boxes-properly: 1.0.0 is-string: 1.0.7 dev: true @@ -3467,44 +3498,44 @@ packages: resolution: {integrity: sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==} dev: true - /babel-jest/29.4.3_@babel+core@7.20.12: - resolution: {integrity: sha512-o45Wyn32svZE+LnMVWv/Z4x0SwtLbh4FyGcYtR20kIWd+rdrDZ9Fzq8Ml3MYLD+mZvEdzCjZsCnYZ2jpJyQ+Nw==} + /babel-jest/29.5.0_@babel+core@7.21.4: + resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.20.12 - '@jest/transform': 29.4.3 + '@babel/core': 7.21.4 + '@jest/transform': 29.5.0 '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.4.3_@babel+core@7.20.12 + babel-preset-jest: 29.5.0_@babel+core@7.21.4 chalk: 4.1.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color dev: true - /babel-loader/8.3.0_la66t7xldg4uecmyawueag5wkm: + /babel-loader/8.3.0_c3tfwv7p35clwcmkb5fnkshzei: resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} engines: {node: '>= 8.9'} peerDependencies: '@babel/core': ^7.0.0 webpack: '>=2' dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.75.0_44e4morsomth5ookbazmyefmhi + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e dev: true /babel-minify/0.5.2: resolution: {integrity: sha512-H1ExfmvTxKWQZYcty1My6XRhoZm04/5MNb2DdZsC08r7y/rowipC0s9sszKA7jgW9mYYDdFnU68XohB+zP35qQ==} hasBin: true dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.4 babel-preset-minify: 0.5.2 fs-readdir-recursive: 1.1.0 lodash: 4.17.21 @@ -3528,12 +3559,12 @@ packages: - supports-color dev: true - /babel-plugin-jest-hoist/29.4.3: - resolution: {integrity: sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q==} + /babel-plugin-jest-hoist/29.5.0: + resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/template': 7.20.7 - '@babel/types': 7.20.7 + '@babel/types': 7.21.4 '@types/babel__core': 7.20.0 '@types/babel__traverse': 7.18.3 dev: true @@ -3603,38 +3634,38 @@ packages: babel-helper-is-void-0: 0.4.3 dev: true - /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.20.12: + /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.21.4: resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.20.14 - '@babel/core': 7.20.12 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12 + '@babel/compat-data': 7.21.4 + '@babel/core': 7.21.4 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.4 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.20.12: + /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.21.4: resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12 - core-js-compat: 3.28.0 + '@babel/core': 7.21.4 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.4 + core-js-compat: 3.30.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.20.12: + /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.21.4: resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12 + '@babel/core': 7.21.4 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.4 transitivePeerDependencies: - supports-color dev: true @@ -3687,35 +3718,35 @@ packages: resolution: {integrity: sha512-D2UbwxawEY1xVc9svYAUZQM2xarwSNXue2qDIx6CeV2EuMGaes/0su78zlIDIAgE7BvnMw4UpmSo9fDy+znghg==} dev: true - /babel-preset-current-node-syntax/1.0.1_@babel+core@7.20.12: + /babel-preset-current-node-syntax/1.0.1_@babel+core@7.21.4: resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12 - '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.12 - '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.12 - dev: true - - /babel-preset-jest/29.4.3_@babel+core@7.20.12: - resolution: {integrity: sha512-gWx6COtSuma6n9bw+8/F+2PCXrIgxV/D1TJFnp6OyBK2cxPWg0K9p/sriNYeifKjpUkMViWQ09DSWtzJQRETsw==} + '@babel/core': 7.21.4 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.4 + '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.4 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.4 + dev: true + + /babel-preset-jest/29.5.0_@babel+core@7.21.4: + resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 - babel-plugin-jest-hoist: 29.4.3 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 + '@babel/core': 7.21.4 + babel-plugin-jest-hoist: 29.5.0 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.4 dev: true /babel-preset-minify/0.5.2: @@ -3792,7 +3823,7 @@ packages: dependencies: buffer: 5.7.1 inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.2 /body-parser/1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} @@ -3887,8 +3918,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001456 - electron-to-chromium: 1.4.301 + caniuse-lite: 1.0.30001478 + electron-to-chromium: 1.4.361 node-releases: 2.0.10 update-browserslist-db: 1.0.10_browserslist@4.21.5 dev: true @@ -3913,14 +3944,14 @@ packages: base64-js: 1.5.1 ieee754: 1.2.1 - /bundle-require/4.0.1_esbuild@0.17.15: + /bundle-require/4.0.1_esbuild@0.17.16: resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: esbuild: '>=0.17' dependencies: - esbuild: 0.17.15 - load-tsconfig: 0.2.3 + esbuild: 0.17.16 + load-tsconfig: 0.2.5 dev: true /busboy/1.6.0: @@ -4006,8 +4037,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite/1.0.30001456: - resolution: {integrity: sha512-XFHJY5dUgmpMV25UqaD4kVq2LsiaU5rS8fb0f17pCoXQiQslzmFgnfOxfvo1bTpTqf7dwG/N/05CnLCnOEKmzA==} + /caniuse-lite/1.0.30001478: + resolution: {integrity: sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw==} dev: true /chalk/2.4.2: @@ -4026,6 +4057,11 @@ packages: ansi-styles: 4.3.0 supports-color: 7.2.0 + /chalk/5.2.0: + resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + /char-regex/1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -4083,8 +4119,8 @@ packages: dependencies: restore-cursor: 3.1.0 - /cli-spinners/2.7.0: - resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==} + /cli-spinners/2.8.0: + resolution: {integrity: sha512-/eG5sJcvEIwxcdYM86k5tPwn0MUzkX5YY3eImTGpJOZgVe4SdTMY14vQpcxgBzJ0wXwAYrS8E+c3uHeK4JNyzQ==} engines: {node: '>=6'} /cli-truncate/2.1.0: @@ -4183,6 +4219,11 @@ packages: delayed-stream: 1.0.0 dev: true + /commander/10.0.0: + resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==} + engines: {node: '>=14'} + dev: true + /commander/2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true @@ -4192,18 +4233,13 @@ packages: engines: {node: '>= 6'} dev: true - /commander/9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - dev: true - /commitizen/4.3.0: resolution: {integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==} engines: {node: '>= 12'} hasBin: true dependencies: cachedir: 2.3.0 - cz-conventional-changelog: 3.3.0_@swc+core@1.3.35 + cz-conventional-changelog: 3.3.0_@swc+core@1.3.49 dedent: 0.7.0 detect-indent: 6.1.0 find-node-modules: 2.1.3 @@ -4218,13 +4254,13 @@ packages: strip-json-comments: 3.1.1 dev: true - /commitizen/4.3.0_@swc+core@1.3.35: + /commitizen/4.3.0_@swc+core@1.3.49: resolution: {integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==} engines: {node: '>= 12'} hasBin: true dependencies: cachedir: 2.3.0 - cz-conventional-changelog: 3.3.0_@swc+core@1.3.35 + cz-conventional-changelog: 3.3.0_@swc+core@1.3.49 dedent: 0.7.0 detect-indent: 6.1.0 find-node-modules: 2.1.3 @@ -4360,8 +4396,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /core-js-compat/3.28.0: - resolution: {integrity: sha512-myzPgE7QodMg4nnd3K1TDoES/nADRStM8Gpz0D6nhkwbmwEnE0ZGJgoWsvQ722FR8D7xS0n0LV556RcEicjTyg==} + /core-js-compat/3.30.0: + resolution: {integrity: sha512-P5A2h/9mRYZFIAP+5Ab8ns6083IyVpSclU74UNvbGVQ8VM7n3n3/g2yF3AkKQ9NXz2O+ioxLbEWKnDtgsFamhg==} dependencies: browserslist: 4.21.5 dev: true @@ -4378,23 +4414,23 @@ packages: vary: 1.1.2 dev: true - /cosmiconfig-typescript-loader/2.0.2_chdop2axsawvq2yu4npultaqpi: + /cosmiconfig-typescript-loader/2.0.2_faublg25f7qpbcz6w4cw6yyzse: resolution: {integrity: sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@types/node': '*' typescript: '>=3' dependencies: - '@types/node': 18.15.5 + '@types/node': 18.15.11 cosmiconfig: 7.1.0 - ts-node: 10.9.1_chdop2axsawvq2yu4npultaqpi + ts-node: 10.9.1_faublg25f7qpbcz6w4cw6yyzse typescript: 4.9.5 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true - /cosmiconfig-typescript-loader/4.3.0_ycmcvgie5c4ufymdvfl6ce7js4: + /cosmiconfig-typescript-loader/4.3.0_zulaepqzabcjiyzbkdbfeduf6u: resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==} engines: {node: '>=12', npm: '>=6'} peerDependencies: @@ -4403,10 +4439,10 @@ packages: ts-node: '>=10' typescript: '>=3' dependencies: - '@types/node': 18.15.5 - cosmiconfig: 8.0.0 - ts-node: 10.9.1_chdop2axsawvq2yu4npultaqpi - typescript: 4.9.5 + '@types/node': 18.15.11 + cosmiconfig: 8.1.3 + ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e + typescript: 5.0.4 dev: true optional: true @@ -4421,8 +4457,8 @@ packages: yaml: 1.10.2 dev: true - /cosmiconfig/8.0.0: - resolution: {integrity: sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==} + /cosmiconfig/8.1.3: + resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==} engines: {node: '>=14'} dependencies: import-fresh: 3.3.0 @@ -4487,7 +4523,7 @@ packages: cssom: 0.3.8 dev: true - /cz-conventional-changelog/3.3.0_@swc+core@1.3.35: + /cz-conventional-changelog/3.3.0_@swc+core@1.3.49: resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==} engines: {node: '>= 10'} dependencies: @@ -4498,7 +4534,7 @@ packages: longest: 2.0.1 word-wrap: 1.2.3 optionalDependencies: - '@commitlint/load': 17.4.4_@swc+core@1.3.35 + '@commitlint/load': 17.5.0_@swc+core@1.3.49 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -4628,8 +4664,8 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /deepmerge/4.3.0: - resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==} + /deepmerge/4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} dev: true @@ -4786,7 +4822,7 @@ packages: /duplexer2/0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: - readable-stream: 2.3.7 + readable-stream: 2.3.8 dev: true /duplexify/4.1.2: @@ -4794,7 +4830,7 @@ packages: dependencies: end-of-stream: 1.4.4 inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.2 stream-shift: 1.0.1 dev: true @@ -4806,8 +4842,8 @@ packages: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true - /electron-to-chromium/1.4.301: - resolution: {integrity: sha512-bz00ASIIDjcgszZKuEA1JEFhbDjqUNbQ/PEhNEl1wbixzYpeTp2H2QWjsQvAL2T1wJBdOwCF5hE896BoMwYKrA==} + /electron-to-chromium/1.4.361: + resolution: {integrity: sha512-VocVwjPp05HUXzf3xmL0boRn5b0iyqC7amtDww84Jb1QJNPBc7F69gJyEeXRoriLBC4a5pSyckdllrXAg4mmRA==} dev: true /emittery/0.13.1: @@ -4847,13 +4883,13 @@ packages: engines: {node: '>=10.0.0'} dev: true - /engine.io/6.4.0: - resolution: {integrity: sha512-OgxY1c/RuCSeO/rTr8DIFXx76IzUUft86R7/P7MMbbkuzeqJoTNw2lmeD91IyGz41QYleIIjWeMJGgug043sfQ==} + /engine.io/6.4.1: + resolution: {integrity: sha512-JFYQurD/nbsA5BSPmbaOSLa3tSVj8L6o4srSwXXY3NqE+gGUNmmPTbhn8tjzcCtSqhFgIeqef81ngny8JM25hw==} engines: {node: '>=10.0.0'} dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.13 - '@types/node': 18.15.5 + '@types/node': 18.15.11 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.4.2 @@ -4871,7 +4907,7 @@ packages: resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} engines: {node: '>=10.13.0'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 tapable: 2.2.1 dev: true @@ -4900,15 +4936,15 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract/1.21.1: - resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==} + /es-abstract/1.21.2: + resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} engines: {node: '>= 0.4'} dependencies: + array-buffer-byte-length: 1.0.0 available-typed-arrays: 1.0.5 call-bind: 1.0.2 es-set-tostringtag: 2.0.1 es-to-primitive: 1.2.1 - function-bind: 1.1.1 function.prototype.name: 1.1.5 get-intrinsic: 1.2.0 get-symbol-description: 1.0.0 @@ -4919,7 +4955,7 @@ packages: has-proto: 1.0.1 has-symbols: 1.0.3 internal-slot: 1.0.5 - is-array-buffer: 3.0.1 + is-array-buffer: 3.0.2 is-callable: 1.2.7 is-negative-zero: 2.0.2 is-regex: 1.1.4 @@ -4932,6 +4968,7 @@ packages: object.assign: 4.1.4 regexp.prototype.flags: 1.4.3 safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.7 string.prototype.trimend: 1.0.6 string.prototype.trimstart: 1.0.6 typed-array-length: 1.0.4 @@ -4943,8 +4980,8 @@ packages: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} dev: true - /es-module-lexer/0.9.3: - resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} + /es-module-lexer/1.2.1: + resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==} dev: true /es-set-tostringtag/2.0.1: @@ -4965,7 +5002,7 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild-loader/2.21.0_webpack@5.75.0: + /esbuild-loader/2.21.0_webpack@5.79.0: resolution: {integrity: sha512-k7ijTkCT43YBSZ6+fBCW1Gin7s46RrJ0VQaM8qA7lq7W+OLsGgtLyFV8470FzYi/4TeDexniTBTPTwZUnXXR5g==} peerDependencies: webpack: ^4.40.0 || ^5.0.0 @@ -4975,7 +5012,7 @@ packages: json5: 2.2.3 loader-utils: 2.0.4 tapable: 2.2.1 - webpack: 5.75.0_44e4morsomth5ookbazmyefmhi + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e webpack-sources: 1.4.3 dev: true @@ -5009,34 +5046,34 @@ packages: '@esbuild/win32-x64': 0.16.17 dev: true - /esbuild/0.17.15: - resolution: {integrity: sha512-LBUV2VsUIc/iD9ME75qhT4aJj0r75abCVS0jakhFzOtR7TQsqQA5w0tZ+KTKnwl3kXE0MhskNdHDh/I5aCR1Zw==} + /esbuild/0.17.16: + resolution: {integrity: sha512-aeSuUKr9aFVY9Dc8ETVELGgkj4urg5isYx8pLf4wlGgB0vTFjxJQdHnNH6Shmx4vYYrOTLCHtRI5i1XZ9l2Zcg==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.17.15 - '@esbuild/android-arm64': 0.17.15 - '@esbuild/android-x64': 0.17.15 - '@esbuild/darwin-arm64': 0.17.15 - '@esbuild/darwin-x64': 0.17.15 - '@esbuild/freebsd-arm64': 0.17.15 - '@esbuild/freebsd-x64': 0.17.15 - '@esbuild/linux-arm': 0.17.15 - '@esbuild/linux-arm64': 0.17.15 - '@esbuild/linux-ia32': 0.17.15 - '@esbuild/linux-loong64': 0.17.15 - '@esbuild/linux-mips64el': 0.17.15 - '@esbuild/linux-ppc64': 0.17.15 - '@esbuild/linux-riscv64': 0.17.15 - '@esbuild/linux-s390x': 0.17.15 - '@esbuild/linux-x64': 0.17.15 - '@esbuild/netbsd-x64': 0.17.15 - '@esbuild/openbsd-x64': 0.17.15 - '@esbuild/sunos-x64': 0.17.15 - '@esbuild/win32-arm64': 0.17.15 - '@esbuild/win32-ia32': 0.17.15 - '@esbuild/win32-x64': 0.17.15 + '@esbuild/android-arm': 0.17.16 + '@esbuild/android-arm64': 0.17.16 + '@esbuild/android-x64': 0.17.16 + '@esbuild/darwin-arm64': 0.17.16 + '@esbuild/darwin-x64': 0.17.16 + '@esbuild/freebsd-arm64': 0.17.16 + '@esbuild/freebsd-x64': 0.17.16 + '@esbuild/linux-arm': 0.17.16 + '@esbuild/linux-arm64': 0.17.16 + '@esbuild/linux-ia32': 0.17.16 + '@esbuild/linux-loong64': 0.17.16 + '@esbuild/linux-mips64el': 0.17.16 + '@esbuild/linux-ppc64': 0.17.16 + '@esbuild/linux-riscv64': 0.17.16 + '@esbuild/linux-s390x': 0.17.16 + '@esbuild/linux-x64': 0.17.16 + '@esbuild/netbsd-x64': 0.17.16 + '@esbuild/openbsd-x64': 0.17.16 + '@esbuild/sunos-x64': 0.17.16 + '@esbuild/win32-arm64': 0.17.16 + '@esbuild/win32-ia32': 0.17.16 + '@esbuild/win32-x64': 0.17.16 dev: true /escalade/3.1.1: @@ -5074,8 +5111,8 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-prettier/8.6.0_eslint@7.32.0: - resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==} + /eslint-config-prettier/8.8.0_eslint@7.32.0: + resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -5083,7 +5120,7 @@ packages: eslint: 7.32.0 dev: true - /eslint-plugin-prettier/3.4.1_2fbugv7hbzbahj5qm3ztcno6by: + /eslint-plugin-prettier/3.4.1_mouiu7tdcm2dtderipseaggmee: resolution: {integrity: sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==} engines: {node: '>=6.0.0'} peerDependencies: @@ -5095,8 +5132,8 @@ packages: optional: true dependencies: eslint: 7.32.0 - eslint-config-prettier: 8.6.0_eslint@7.32.0 - prettier: 2.8.4 + eslint-config-prettier: 8.8.0_eslint@7.32.0 + prettier: 2.8.7 prettier-linter-helpers: 1.0.0 dev: true @@ -5115,16 +5152,6 @@ packages: eslint-visitor-keys: 1.3.0 dev: true - /eslint-utils/3.0.0_eslint@7.32.0: - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: 7.32.0 - eslint-visitor-keys: 2.1.0 - dev: true - /eslint-visitor-keys/1.3.0: resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} engines: {node: '>=4'} @@ -5135,8 +5162,8 @@ packages: engines: {node: '>=10'} dev: true - /eslint-visitor-keys/3.3.0: - resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} + /eslint-visitor-keys/3.4.0: + resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -5159,7 +5186,7 @@ packages: eslint-utils: 2.1.0 eslint-visitor-keys: 2.1.0 espree: 7.3.1 - esquery: 1.4.2 + esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -5179,7 +5206,7 @@ packages: optionator: 0.9.1 progress: 2.0.3 regexpp: 3.2.0 - semver: 7.3.8 + semver: 7.4.0 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 table: 6.8.1 @@ -5204,8 +5231,8 @@ packages: hasBin: true dev: true - /esquery/1.4.2: - resolution: {integrity: sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==} + /esquery/1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 @@ -5280,13 +5307,13 @@ packages: strip-final-newline: 2.0.0 dev: true - /execa/6.1.0: - resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /execa/7.1.1: + resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 - human-signals: 3.0.1 + human-signals: 4.3.1 is-stream: 3.0.0 merge-stream: 2.0.0 npm-run-path: 5.1.0 @@ -5322,15 +5349,15 @@ packages: homedir-polyfill: 1.0.3 dev: true - /expect/29.4.3: - resolution: {integrity: sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==} + /expect/29.5.0: + resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/expect-utils': 29.4.3 + '@jest/expect-utils': 29.5.0 jest-get-type: 29.4.3 - jest-matcher-utils: 29.4.3 - jest-message-util: 29.4.3 - jest-util: 29.4.3 + jest-matcher-utils: 29.5.0 + jest-message-util: 29.5.0 + jest-util: 29.5.0 dev: true /express/4.18.2: @@ -5699,7 +5726,7 @@ packages: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 dev: true @@ -5709,7 +5736,7 @@ packages: engines: {node: '>=10'} dependencies: at-least-node: 1.0.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 dev: true @@ -5759,7 +5786,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.1 + es-abstract: 1.21.2 functions-have-names: 1.2.3 dev: true @@ -5873,14 +5900,14 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob/9.3.4: - resolution: {integrity: sha512-qaSc49hojMOv1EPM4EuyITjDSgSKI0rthoHnvE81tcOi1SCVndHko7auqxdQ14eiQG2NDBJBE86+2xIrbIvrbA==} + /glob/9.3.5: + resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} engines: {node: '>=16 || 14 >=14.17'} dependencies: fs.realpath: 1.0.0 - minimatch: 8.0.3 - minipass: 4.2.5 - path-scurry: 1.6.3 + minimatch: 8.0.4 + minipass: 4.2.8 + path-scurry: 1.6.4 dev: true /global-dirs/0.1.1: @@ -5958,8 +5985,8 @@ packages: get-intrinsic: 1.2.0 dev: true - /graceful-fs/4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + /graceful-fs/4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true /grapheme-splitter/1.0.4: @@ -6080,7 +6107,7 @@ packages: dependencies: inherits: 2.0.4 obuf: 1.1.2 - readable-stream: 2.3.7 + readable-stream: 2.3.8 wbuf: 1.7.3 dev: true @@ -6178,9 +6205,9 @@ packages: engines: {node: '>=10.17.0'} dev: true - /human-signals/3.0.1: - resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==} - engines: {node: '>=12.20.0'} + /human-signals/4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} dev: true /iconv-lite/0.4.24: @@ -6341,8 +6368,8 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-array-buffer/3.0.1: - resolution: {integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==} + /is-array-buffer/3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.0 @@ -6382,8 +6409,8 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-core-module/2.11.0: - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} + /is-core-module/2.12.0: + resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} dependencies: has: 1.0.3 dev: true @@ -6664,8 +6691,8 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.20.12 - '@babel/parser': 7.20.15 + '@babel/core': 7.21.4 + '@babel/parser': 7.21.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -6701,43 +6728,44 @@ packages: istanbul-lib-report: 3.0.0 dev: true - /jest-changed-files/29.4.3: - resolution: {integrity: sha512-Vn5cLuWuwmi2GNNbokPOEcvrXGSGrqVnPEZV7rC6P7ck07Dyw9RFnvWglnupSh+hGys0ajGtw/bc2ZgweljQoQ==} + /jest-changed-files/29.5.0: + resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: execa: 5.1.1 p-limit: 3.1.0 dev: true - /jest-circus/29.4.3: - resolution: {integrity: sha512-Vw/bVvcexmdJ7MLmgdT3ZjkJ3LKu8IlpefYokxiqoZy6OCQ2VAm6Vk3t/qHiAGUXbdbJKJWnc8gH3ypTbB/OBw==} + /jest-circus/29.5.0: + resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.4.3 - '@jest/expect': 29.4.3 - '@jest/test-result': 29.4.3 - '@jest/types': 29.4.3 - '@types/node': 18.15.5 + '@jest/environment': 29.5.0 + '@jest/expect': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.11 chalk: 4.1.1 co: 4.6.0 dedent: 0.7.0 is-generator-fn: 2.1.0 - jest-each: 29.4.3 - jest-matcher-utils: 29.4.3 - jest-message-util: 29.4.3 - jest-runtime: 29.4.3 - jest-snapshot: 29.4.3 - jest-util: 29.4.3 + jest-each: 29.5.0 + jest-matcher-utils: 29.5.0 + jest-message-util: 29.5.0 + jest-runtime: 29.5.0 + jest-snapshot: 29.5.0 + jest-util: 29.5.0 p-limit: 3.1.0 - pretty-format: 29.4.3 + pretty-format: 29.5.0 + pure-rand: 6.0.1 slash: 3.0.0 stack-utils: 2.0.6 transitivePeerDependencies: - supports-color dev: true - /jest-cli/29.4.3_757mb262zsxkcnuknwfdsckmku: - resolution: {integrity: sha512-PiiAPuFNfWWolCE6t3ZrDXQc6OsAuM3/tVW0u27UWc1KE+n/HSn5dSE6B2juqN7WP+PP0jAcnKtGmI4u8GMYCg==} + /jest-cli/29.5.0_rrli7kzx2akox3oq6aahu3rvje: + resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -6746,26 +6774,26 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.4.3_ts-node@10.9.1 - '@jest/test-result': 29.4.3 - '@jest/types': 29.4.3 + '@jest/core': 29.5.0_ts-node@10.9.1 + '@jest/test-result': 29.5.0 + '@jest/types': 29.5.0 chalk: 4.1.1 exit: 0.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.4.3_757mb262zsxkcnuknwfdsckmku - jest-util: 29.4.3 - jest-validate: 29.4.3 + jest-config: 29.5.0_rrli7kzx2akox3oq6aahu3rvje + jest-util: 29.5.0 + jest-validate: 29.5.0 prompts: 2.4.2 - yargs: 17.7.0 + yargs: 17.7.1 transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: true - /jest-config/29.4.3_757mb262zsxkcnuknwfdsckmku: - resolution: {integrity: sha512-eCIpqhGnIjdUCXGtLhz4gdDoxKSWXKjzNcc5r+0S1GKOp2fwOipx5mRcwa9GB/ArsxJ1jlj2lmlD9bZAsBxaWQ==} + /jest-config/29.5.0_rrli7kzx2akox3oq6aahu3rvje: + resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' @@ -6776,42 +6804,42 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.20.12 - '@jest/test-sequencer': 29.4.3 - '@jest/types': 29.4.3 - '@types/node': 18.15.5 - babel-jest: 29.4.3_@babel+core@7.20.12 + '@babel/core': 7.21.4 + '@jest/test-sequencer': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.11 + babel-jest: 29.5.0_@babel+core@7.21.4 chalk: 4.1.1 ci-info: 3.8.0 - deepmerge: 4.3.0 + deepmerge: 4.3.1 glob: 7.2.3 - graceful-fs: 4.2.10 - jest-circus: 29.4.3 - jest-environment-node: 29.4.3 + graceful-fs: 4.2.11 + jest-circus: 29.5.0 + jest-environment-node: 29.5.0 jest-get-type: 29.4.3 jest-regex-util: 29.4.3 - jest-resolve: 29.4.3 - jest-runner: 29.4.3 - jest-util: 29.4.3 - jest-validate: 29.4.3 + jest-resolve: 29.5.0 + jest-runner: 29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 micromatch: 4.0.5 parse-json: 5.2.0 - pretty-format: 29.4.3 + pretty-format: 29.5.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1_rtqtuii6mqwmhbrzzpdx2vdzzq + ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e transitivePeerDependencies: - supports-color dev: true - /jest-diff/29.4.3: - resolution: {integrity: sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==} + /jest-diff/29.5.0: + resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.1 diff-sequences: 29.4.3 jest-get-type: 29.4.3 - pretty-format: 29.4.3 + pretty-format: 29.5.0 dev: true /jest-docblock/29.4.3: @@ -6821,19 +6849,19 @@ packages: detect-newline: 3.1.0 dev: true - /jest-each/29.4.3: - resolution: {integrity: sha512-1ElHNAnKcbJb/b+L+7j0/w7bDvljw4gTv1wL9fYOczeJrbTbkMGQ5iQPFJ3eFQH19VPTx1IyfePdqSpePKss7Q==} + /jest-each/29.5.0: + resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.4.3 + '@jest/types': 29.5.0 chalk: 4.1.1 jest-get-type: 29.4.3 - jest-util: 29.4.3 - pretty-format: 29.4.3 + jest-util: 29.5.0 + pretty-format: 29.5.0 dev: true - /jest-environment-jsdom/29.4.3: - resolution: {integrity: sha512-rFjf8JXrw3OjUzzmSE5l0XjMj0/MSVEUMCSXBGPDkfwb1T03HZI7iJSL0cGctZApPSyJxbjyKDVxkZuyhHkuTw==} + /jest-environment-jsdom/29.5.0: + resolution: {integrity: sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: canvas: ^2.5.0 @@ -6841,13 +6869,13 @@ packages: canvas: optional: true dependencies: - '@jest/environment': 29.4.3 - '@jest/fake-timers': 29.4.3 - '@jest/types': 29.4.3 + '@jest/environment': 29.5.0 + '@jest/fake-timers': 29.5.0 + '@jest/types': 29.5.0 '@types/jsdom': 20.0.1 - '@types/node': 18.15.5 - jest-mock: 29.4.3 - jest-util: 29.4.3 + '@types/node': 18.15.11 + jest-mock: 29.5.0 + jest-util: 29.5.0 jsdom: 20.0.3 transitivePeerDependencies: - bufferutil @@ -6855,16 +6883,16 @@ packages: - utf-8-validate dev: true - /jest-environment-node/29.4.3: - resolution: {integrity: sha512-gAiEnSKF104fsGDXNkwk49jD/0N0Bqu2K9+aMQXA6avzsA9H3Fiv1PW2D+gzbOSR705bWd2wJZRFEFpV0tXISg==} + /jest-environment-node/29.5.0: + resolution: {integrity: sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.4.3 - '@jest/fake-timers': 29.4.3 - '@jest/types': 29.4.3 - '@types/node': 18.15.5 - jest-mock: 29.4.3 - jest-util: 29.4.3 + '@jest/environment': 29.5.0 + '@jest/fake-timers': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.11 + jest-mock: 29.5.0 + jest-util: 29.5.0 dev: true /jest-get-type/29.4.3: @@ -6872,68 +6900,68 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-haste-map/29.4.3: - resolution: {integrity: sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ==} + /jest-haste-map/29.5.0: + resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.4.3 + '@jest/types': 29.5.0 '@types/graceful-fs': 4.1.6 - '@types/node': 18.15.5 + '@types/node': 18.15.11 anymatch: 3.1.3 fb-watchman: 2.0.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-regex-util: 29.4.3 - jest-util: 29.4.3 - jest-worker: 29.4.3 + jest-util: 29.5.0 + jest-worker: 29.5.0 micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 dev: true - /jest-leak-detector/29.4.3: - resolution: {integrity: sha512-9yw4VC1v2NspMMeV3daQ1yXPNxMgCzwq9BocCwYrRgXe4uaEJPAN0ZK37nFBhcy3cUwEVstFecFLaTHpF7NiGA==} + /jest-leak-detector/29.5.0: + resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.3 - pretty-format: 29.4.3 + pretty-format: 29.5.0 dev: true - /jest-matcher-utils/29.4.3: - resolution: {integrity: sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==} + /jest-matcher-utils/29.5.0: + resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.1 - jest-diff: 29.4.3 + jest-diff: 29.5.0 jest-get-type: 29.4.3 - pretty-format: 29.4.3 + pretty-format: 29.5.0 dev: true - /jest-message-util/29.4.3: - resolution: {integrity: sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==} + /jest-message-util/29.5.0: + resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.18.6 - '@jest/types': 29.4.3 + '@babel/code-frame': 7.21.4 + '@jest/types': 29.5.0 '@types/stack-utils': 2.0.1 chalk: 4.1.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 micromatch: 4.0.5 - pretty-format: 29.4.3 + pretty-format: 29.5.0 slash: 3.0.0 stack-utils: 2.0.6 dev: true - /jest-mock/29.4.3: - resolution: {integrity: sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==} + /jest-mock/29.5.0: + resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.4.3 - '@types/node': 18.15.5 - jest-util: 29.4.3 + '@jest/types': 29.5.0 + '@types/node': 18.15.11 + jest-util: 29.5.0 dev: true - /jest-pnp-resolver/1.2.3_jest-resolve@29.4.3: + /jest-pnp-resolver/1.2.3_jest-resolve@29.5.0: resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: @@ -6942,7 +6970,7 @@ packages: jest-resolve: optional: true dependencies: - jest-resolve: 29.4.3 + jest-resolve: 29.5.0 dev: true /jest-regex-util/29.4.3: @@ -6950,157 +6978,156 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-resolve-dependencies/29.4.3: - resolution: {integrity: sha512-uvKMZAQ3nmXLH7O8WAOhS5l0iWyT3WmnJBdmIHiV5tBbdaDZ1wqtNX04FONGoaFvSOSHBJxnwAVnSn1WHdGVaw==} + /jest-resolve-dependencies/29.5.0: + resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-regex-util: 29.4.3 - jest-snapshot: 29.4.3 + jest-snapshot: 29.5.0 transitivePeerDependencies: - supports-color dev: true - /jest-resolve/29.4.3: - resolution: {integrity: sha512-GPokE1tzguRyT7dkxBim4wSx6E45S3bOQ7ZdKEG+Qj0Oac9+6AwJPCk0TZh5Vu0xzeX4afpb+eDmgbmZFFwpOw==} + /jest-resolve/29.5.0: + resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.1 - graceful-fs: 4.2.10 - jest-haste-map: 29.4.3 - jest-pnp-resolver: 1.2.3_jest-resolve@29.4.3 - jest-util: 29.4.3 - jest-validate: 29.4.3 - resolve: 1.22.1 - resolve.exports: 2.0.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.5.0 + jest-pnp-resolver: 1.2.3_jest-resolve@29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 + resolve: 1.22.2 + resolve.exports: 2.0.2 slash: 3.0.0 dev: true - /jest-runner/29.4.3: - resolution: {integrity: sha512-GWPTEiGmtHZv1KKeWlTX9SIFuK19uLXlRQU43ceOQ2hIfA5yPEJC7AMkvFKpdCHx6pNEdOD+2+8zbniEi3v3gA==} + /jest-runner/29.5.0: + resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.4.3 - '@jest/environment': 29.4.3 - '@jest/test-result': 29.4.3 - '@jest/transform': 29.4.3 - '@jest/types': 29.4.3 - '@types/node': 18.15.5 + '@jest/console': 29.5.0 + '@jest/environment': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.11 chalk: 4.1.1 emittery: 0.13.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-docblock: 29.4.3 - jest-environment-node: 29.4.3 - jest-haste-map: 29.4.3 - jest-leak-detector: 29.4.3 - jest-message-util: 29.4.3 - jest-resolve: 29.4.3 - jest-runtime: 29.4.3 - jest-util: 29.4.3 - jest-watcher: 29.4.3 - jest-worker: 29.4.3 + jest-environment-node: 29.5.0 + jest-haste-map: 29.5.0 + jest-leak-detector: 29.5.0 + jest-message-util: 29.5.0 + jest-resolve: 29.5.0 + jest-runtime: 29.5.0 + jest-util: 29.5.0 + jest-watcher: 29.5.0 + jest-worker: 29.5.0 p-limit: 3.1.0 source-map-support: 0.5.13 transitivePeerDependencies: - supports-color dev: true - /jest-runtime/29.4.3: - resolution: {integrity: sha512-F5bHvxSH+LvLV24vVB3L8K467dt3y3dio6V3W89dUz9nzvTpqd/HcT9zfYKL2aZPvD63vQFgLvaUX/UpUhrP6Q==} + /jest-runtime/29.5.0: + resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.4.3 - '@jest/fake-timers': 29.4.3 - '@jest/globals': 29.4.3 + '@jest/environment': 29.5.0 + '@jest/fake-timers': 29.5.0 + '@jest/globals': 29.5.0 '@jest/source-map': 29.4.3 - '@jest/test-result': 29.4.3 - '@jest/transform': 29.4.3 - '@jest/types': 29.4.3 - '@types/node': 18.15.5 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.11 chalk: 4.1.1 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 glob: 7.2.3 - graceful-fs: 4.2.10 - jest-haste-map: 29.4.3 - jest-message-util: 29.4.3 - jest-mock: 29.4.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.5.0 + jest-message-util: 29.5.0 + jest-mock: 29.5.0 jest-regex-util: 29.4.3 - jest-resolve: 29.4.3 - jest-snapshot: 29.4.3 - jest-util: 29.4.3 + jest-resolve: 29.5.0 + jest-snapshot: 29.5.0 + jest-util: 29.5.0 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: - supports-color dev: true - /jest-snapshot/29.4.3: - resolution: {integrity: sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw==} + /jest-snapshot/29.5.0: + resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.20.12 - '@babel/generator': 7.20.14 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12 - '@babel/traverse': 7.20.13 - '@babel/types': 7.20.7 - '@jest/expect-utils': 29.4.3 - '@jest/transform': 29.4.3 - '@jest/types': 29.4.3 + '@babel/core': 7.21.4 + '@babel/generator': 7.21.4 + '@babel/plugin-syntax-jsx': 7.21.4_@babel+core@7.21.4 + '@babel/plugin-syntax-typescript': 7.21.4_@babel+core@7.21.4 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 + '@jest/expect-utils': 29.5.0 + '@jest/transform': 29.5.0 + '@jest/types': 29.5.0 '@types/babel__traverse': 7.18.3 '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.4 chalk: 4.1.1 - expect: 29.4.3 - graceful-fs: 4.2.10 - jest-diff: 29.4.3 + expect: 29.5.0 + graceful-fs: 4.2.11 + jest-diff: 29.5.0 jest-get-type: 29.4.3 - jest-haste-map: 29.4.3 - jest-matcher-utils: 29.4.3 - jest-message-util: 29.4.3 - jest-util: 29.4.3 + jest-matcher-utils: 29.5.0 + jest-message-util: 29.5.0 + jest-util: 29.5.0 natural-compare: 1.4.0 - pretty-format: 29.4.3 - semver: 7.3.8 + pretty-format: 29.5.0 + semver: 7.4.0 transitivePeerDependencies: - supports-color dev: true - /jest-util/29.4.3: - resolution: {integrity: sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==} + /jest-util/29.5.0: + resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.4.3 - '@types/node': 18.15.5 + '@jest/types': 29.5.0 + '@types/node': 18.15.11 chalk: 4.1.1 ci-info: 3.8.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 picomatch: 2.3.1 dev: true - /jest-validate/29.4.3: - resolution: {integrity: sha512-J3u5v7aPQoXPzaar6GndAVhdQcZr/3osWSgTeKg5v574I9ybX/dTyH0AJFb5XgXIB7faVhf+rS7t4p3lL9qFaw==} + /jest-validate/29.5.0: + resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.4.3 + '@jest/types': 29.5.0 camelcase: 6.3.0 chalk: 4.1.1 jest-get-type: 29.4.3 leven: 3.1.0 - pretty-format: 29.4.3 + pretty-format: 29.5.0 dev: true - /jest-watcher/29.4.3: - resolution: {integrity: sha512-zwlXH3DN3iksoIZNk73etl1HzKyi5FuQdYLnkQKm5BW4n8HpoG59xSwpVdFrnh60iRRaRBGw0gcymIxjJENPcA==} + /jest-watcher/29.5.0: + resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.4.3 - '@jest/types': 29.4.3 - '@types/node': 18.15.5 + '@jest/test-result': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.11 ansi-escapes: 4.3.2 chalk: 4.1.1 emittery: 0.13.1 - jest-util: 29.4.3 + jest-util: 29.5.0 string-length: 4.0.2 dev: true @@ -7108,23 +7135,23 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.15.5 + '@types/node': 18.15.11 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest-worker/29.4.3: - resolution: {integrity: sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==} + /jest-worker/29.5.0: + resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.15.5 - jest-util: 29.4.3 + '@types/node': 18.15.11 + jest-util: 29.5.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest/29.4.3_757mb262zsxkcnuknwfdsckmku: - resolution: {integrity: sha512-XvK65feuEFGZT8OO0fB/QAQS+LGHvQpaadkH5p47/j3Ocqq3xf2pK9R+G0GzgfuhXVxEv76qCOOcMb5efLk6PA==} + /jest/29.5.0_rrli7kzx2akox3oq6aahu3rvje: + resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -7133,10 +7160,10 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.4.3_ts-node@10.9.1 - '@jest/types': 29.4.3 + '@jest/core': 29.5.0_ts-node@10.9.1 + '@jest/types': 29.5.0 import-local: 3.1.0 - jest-cli: 29.4.3_757mb262zsxkcnuknwfdsckmku + jest-cli: 29.5.0_rrli7kzx2akox3oq6aahu3rvje transitivePeerDependencies: - '@types/node' - supports-color @@ -7196,7 +7223,7 @@ packages: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.2 + nwsapi: 2.2.4 parse5: 7.1.2 saxes: 6.0.0 symbol-tree: 3.2.4 @@ -7206,7 +7233,7 @@ packages: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.11.0 + ws: 8.13.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -7262,7 +7289,7 @@ packages: dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: true /jsonparse/1.3.1: @@ -7329,8 +7356,8 @@ packages: type-check: 0.4.0 dev: true - /lilconfig/2.0.6: - resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} + /lilconfig/2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} dev: true @@ -7338,18 +7365,18 @@ packages: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true - /lint-staged/13.1.2: - resolution: {integrity: sha512-K9b4FPbWkpnupvK3WXZLbgu9pchUJ6N7TtVZjbaPsoizkqFUDkUReUL25xdrCljJs7uLUF3tZ7nVPeo/6lp+6w==} + /lint-staged/13.2.1: + resolution: {integrity: sha512-8gfzinVXoPfga5Dz/ZOn8I2GOhf81Wvs+KwbEXQn/oWZAvCVS2PivrXfVbFJc93zD16uC0neS47RXHIjXKYZQw==} engines: {node: ^14.13.1 || >=16.0.0} hasBin: true dependencies: + chalk: 5.2.0 cli-truncate: 3.1.0 - colorette: 2.0.19 - commander: 9.5.0 + commander: 10.0.0 debug: 4.3.4 - execa: 6.1.0 - lilconfig: 2.0.6 - listr2: 5.0.7 + execa: 7.1.1 + lilconfig: 2.1.0 + listr2: 5.0.8 micromatch: 4.0.5 normalize-path: 3.0.0 object-inspect: 1.12.3 @@ -7361,8 +7388,8 @@ packages: - supports-color dev: true - /listr2/5.0.7: - resolution: {integrity: sha512-MD+qXHPmtivrHIDRwPYdfNkrzqDiuaKU/rfBcec3WMyMF3xylQj3jMq344OtvQxz7zaCFViRAeqlr2AFhPvXHw==} + /listr2/5.0.8: + resolution: {integrity: sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==} engines: {node: ^14.13.1 || >=16.0.0} peerDependencies: enquirer: '>= 2.3.0 < 3' @@ -7380,8 +7407,8 @@ packages: wrap-ansi: 7.0.0 dev: true - /load-tsconfig/0.2.3: - resolution: {integrity: sha512-iyT2MXws+dc2Wi6o3grCFtGXpeMvHmJqS27sMPGtV2eUu4PeFnG+33I8BlFK1t1NWMjOpcx9bridn5yxLDX2gQ==} + /load-tsconfig/0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true @@ -7514,9 +7541,9 @@ packages: yallist: 4.0.0 dev: true - /lru-cache/7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} + /lru-cache/9.0.1: + resolution: {integrity: sha512-C8QsKIN1UIXeOs3iWmiZ1lQY+EnKDojWd37fXy1aSbJvH4iSma1uy2OWuoB3m4SYRli5+CUjDv3Dij5DVoetmg==} + engines: {node: 14 || >=16.14} dev: true /make-dir/3.1.0: @@ -7563,8 +7590,8 @@ packages: engines: {node: '>= 0.6'} dev: true - /memfs/3.4.13: - resolution: {integrity: sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==} + /memfs/3.5.0: + resolution: {integrity: sha512-yK6o8xVJlQerz57kvPROwTMgx5WtGwC2ZxDtOUsnGl49rHjYkfQoPNZPCKH73VdLE1BwBu/+Fx/NL8NYMUw2aA==} engines: {node: '>= 4.0.0'} dependencies: fs-monkey: 1.0.3 @@ -7574,7 +7601,7 @@ packages: resolution: {integrity: sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==} dependencies: errno: 0.1.8 - readable-stream: 2.3.7 + readable-stream: 2.3.8 dev: true /meow/8.1.2: @@ -7693,8 +7720,8 @@ packages: brace-expansion: 1.1.11 dev: true - /minimatch/8.0.3: - resolution: {integrity: sha512-tEEvU9TkZgnFDCtpnrEYnPsjT7iUx42aXfs4bzmQ5sMA09/6hZY0jeZcGkXyDagiBOvkUjNo8Viom+Me6+2x7g==} + /minimatch/8.0.4: + resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 @@ -7717,8 +7744,13 @@ packages: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /minipass/4.2.5: - resolution: {integrity: sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==} + /minipass/4.2.8: + resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} + engines: {node: '>=8'} + dev: true + + /minipass/5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} dev: true @@ -7868,7 +7900,7 @@ packages: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.1 + resolve: 1.22.2 semver: 5.7.1 validate-npm-package-license: 3.0.4 dev: true @@ -7878,8 +7910,8 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.11.0 - semver: 7.3.8 + is-core-module: 2.12.0 + semver: 7.4.0 validate-npm-package-license: 3.0.4 dev: true @@ -7908,8 +7940,8 @@ packages: path-key: 4.0.0 dev: true - /nwsapi/2.2.2: - resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} + /nwsapi/2.2.4: + resolution: {integrity: sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==} dev: true /object-assign/4.1.1: @@ -7967,7 +7999,7 @@ packages: array.prototype.reduce: 1.0.5 call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.1 + es-abstract: 1.21.2 dev: true /object.pick/1.3.0: @@ -8054,7 +8086,7 @@ packages: bl: 4.1.0 chalk: 4.1.1 cli-cursor: 3.1.0 - cli-spinners: 2.7.0 + cli-spinners: 2.8.0 is-interactive: 1.0.0 is-unicode-supported: 0.1.0 log-symbols: 4.1.0 @@ -8132,7 +8164,7 @@ packages: engines: {node: '>=6'} dev: true - /page-with/0.6.1_44e4morsomth5ookbazmyefmhi: + /page-with/0.6.1_57233mj27fjz7synoeubptyy7e: resolution: {integrity: sha512-5J58fSpc8CKonUWCPsh8b2LctFrNSOpXQ8O3tB+/iJvixOQf1qHp4+cDLiIVsl/WiuheXdZTzMcuR0KLQMaWcg==} dependencies: '@open-draft/until': 2.0.0 @@ -8143,11 +8175,11 @@ packages: debug: 4.3.4 express: 4.18.2 headers-polyfill: 3.1.2 - memfs: 3.4.13 + memfs: 3.5.0 mustache: 4.2.0 - playwright: 1.30.0 + playwright: 1.32.3 uuid: 8.3.2 - webpack: 5.75.0_44e4morsomth5ookbazmyefmhi + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e webpack-merge: 5.8.0 transitivePeerDependencies: - '@swc/core' @@ -8168,7 +8200,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.21.4 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -8233,12 +8265,12 @@ packages: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-scurry/1.6.3: - resolution: {integrity: sha512-RAmB+n30SlN+HnNx6EbcpoDy9nwdpcGPnEKrJnu6GZoDWBdIjo1UQMVtW2ybtC7LC2oKLcMq8y5g8WnKLiod9g==} + /path-scurry/1.6.4: + resolution: {integrity: sha512-Qp/9IHkdNiXJ3/Kon++At2nVpnhRiPq/aSvQN+H3U1WZbvNRK0RIQK/o4HMqPoXjpuGJUEWpHSs6Mnjxqh3TQg==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 7.18.3 - minipass: 4.2.5 + lru-cache: 9.0.1 + minipass: 5.0.0 dev: true /path-to-regexp/0.1.7: @@ -8294,7 +8326,7 @@ packages: resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} dependencies: duplexify: 4.1.2 - split2: 4.1.0 + split2: 4.2.0 dev: true /pino-pretty/7.6.1: @@ -8309,7 +8341,7 @@ packages: on-exit-leak-free: 0.2.0 pino-abstract-transport: 0.5.0 pump: 3.0.0 - readable-stream: 3.6.0 + readable-stream: 3.6.2 rfdc: 1.3.0 secure-json-parse: 2.7.0 sonic-boom: 2.8.0 @@ -8332,7 +8364,7 @@ packages: process-warning: 1.0.0 quick-format-unescaped: 4.0.4 real-require: 0.1.0 - safe-stable-stringify: 2.4.2 + safe-stable-stringify: 2.4.3 sonic-boom: 2.8.0 thread-stream: 0.15.2 dev: true @@ -8356,19 +8388,19 @@ packages: find-up: 4.1.0 dev: true - /playwright-core/1.30.0: - resolution: {integrity: sha512-7AnRmTCf+GVYhHbLJsGUtskWTE33SwMZkybJ0v6rqR1boxq2x36U7p1vDRV7HO2IwTZgmycracLxPEJI49wu4g==} + /playwright-core/1.32.3: + resolution: {integrity: sha512-SB+cdrnu74ZIn5Ogh/8278ngEh9NEEV0vR4sJFmK04h2iZpybfbqBY0bX6+BLYWVdV12JLLI+JEFtSnYgR+mWg==} engines: {node: '>=14'} hasBin: true dev: true - /playwright/1.30.0: - resolution: {integrity: sha512-ENbW5o75HYB3YhnMTKJLTErIBExrSlX2ZZ1C/FzmHjUYIfxj/UnI+DWpQr992m+OQVSg0rCExAOlRwB+x+yyIg==} + /playwright/1.32.3: + resolution: {integrity: sha512-h/ylpgoj6l/EjkfUDyx8cdOlfzC96itPpPe8BXacFkqpw/YsuxkpPyVbzEq4jw+bAJh5FLgh31Ljg2cR6HV3uw==} engines: {node: '>=14'} hasBin: true requiresBuild: true dependencies: - playwright-core: 1.30.0 + playwright-core: 1.32.3 dev: true /portfinder/1.0.32_supports-color@6.1.0: @@ -8399,8 +8431,8 @@ packages: ts-node: optional: true dependencies: - lilconfig: 2.0.6 - ts-node: 10.9.1_rtqtuii6mqwmhbrzzpdx2vdzzq + lilconfig: 2.1.0 + ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e yaml: 1.10.2 dev: true @@ -8421,14 +8453,14 @@ packages: fast-diff: 1.2.0 dev: true - /prettier/2.8.4: - resolution: {integrity: sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==} + /prettier/2.8.7: + resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==} engines: {node: '>=10.13.0'} hasBin: true dev: true - /pretty-format/29.4.3: - resolution: {integrity: sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==} + /pretty-format/29.5.0: + resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/schemas': 29.4.3 @@ -8489,6 +8521,10 @@ packages: engines: {node: '>=6'} dev: true + /pure-rand/6.0.1: + resolution: {integrity: sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==} + dev: true + /q/1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} @@ -8578,8 +8614,8 @@ packages: type-fest: 0.6.0 dev: true - /readable-stream/2.3.7: - resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + /readable-stream/2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -8590,8 +8626,8 @@ packages: util-deprecate: 1.0.2 dev: true - /readable-stream/3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + /readable-stream/3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} dependencies: inherits: 2.0.4 @@ -8635,7 +8671,7 @@ packages: /regenerator-transform/0.15.1: resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.21.0 dev: true /regex-not/1.0.2: @@ -8660,8 +8696,8 @@ packages: engines: {node: '>=8'} dev: true - /regexpu-core/5.3.1: - resolution: {integrity: sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ==} + /regexpu-core/5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} engines: {node: '>=4'} dependencies: '@babel/regjsgen': 0.8.0 @@ -8762,16 +8798,16 @@ packages: deprecated: https://github.com/lydell/resolve-url#deprecated dev: true - /resolve.exports/2.0.0: - resolution: {integrity: sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==} + /resolve.exports/2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} dev: true - /resolve/1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + /resolve/1.22.2: + resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true dependencies: - is-core-module: 2.11.0 + is-core-module: 2.12.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -8816,8 +8852,8 @@ packages: glob: 7.2.3 dev: true - /rollup/3.20.1: - resolution: {integrity: sha512-sz2w8cBJlWQ2E17RcpvHuf4sk2BQx4tfKDnjNPikEpLEevrbIAR7CH3PGa2hpPwWbNgPaA9yh9Jzljds5bc9zg==} + /rollup/3.20.2: + resolution: {integrity: sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -8860,8 +8896,8 @@ packages: ret: 0.1.15 dev: true - /safe-stable-stringify/2.4.2: - resolution: {integrity: sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA==} + /safe-stable-stringify/2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} engines: {node: '>=10'} dev: true @@ -8934,8 +8970,8 @@ packages: lru-cache: 6.0.0 dev: true - /semver/7.3.8: - resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} + /semver/7.4.0: + resolution: {integrity: sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==} engines: {node: '>=10'} hasBin: true dependencies: @@ -9033,8 +9069,8 @@ packages: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /set-cookie-parser/2.5.1: - resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==} + /set-cookie-parser/2.6.0: + resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} dev: false /set-value/2.0.1: @@ -9189,14 +9225,14 @@ packages: - supports-color dev: true - /socket.io/4.6.0: - resolution: {integrity: sha512-b65bp6INPk/BMMrIgVvX12x3Q+NqlGqSlTuvKQWt0BUJ3Hyy3JangBl7fEoWZTXbOKlCqNPbQ6MbWgok/km28w==} + /socket.io/4.6.1: + resolution: {integrity: sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==} engines: {node: '>=10.0.0'} dependencies: accepts: 1.3.8 base64id: 2.0.0 debug: 4.3.4 - engine.io: 6.4.0 + engine.io: 6.4.1 socket.io-adapter: 2.5.2 socket.io-parser: 4.2.2 transitivePeerDependencies: @@ -9287,11 +9323,11 @@ packages: resolution: {integrity: sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==} dev: true - /spdx-correct/3.1.1: - resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} + /spdx-correct/3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.12 + spdx-license-ids: 3.0.13 dev: true /spdx-exceptions/2.3.0: @@ -9302,11 +9338,11 @@ packages: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.12 + spdx-license-ids: 3.0.13 dev: true - /spdx-license-ids/3.0.12: - resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} + /spdx-license-ids/3.0.13: + resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} dev: true /spdy-transport/3.0.0_supports-color@6.1.0: @@ -9316,7 +9352,7 @@ packages: detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 - readable-stream: 3.6.0 + readable-stream: 3.6.2 wbuf: 1.7.3 transitivePeerDependencies: - supports-color @@ -9351,11 +9387,11 @@ packages: /split2/3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: - readable-stream: 3.6.0 + readable-stream: 3.6.2 dev: true - /split2/4.1.0: - resolution: {integrity: sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==} + /split2/4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} dev: true @@ -9391,7 +9427,7 @@ packages: resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} dependencies: duplexer2: 0.1.4 - readable-stream: 2.3.7 + readable-stream: 2.3.8 dev: true /stream-shift/1.0.1: @@ -9446,12 +9482,21 @@ packages: strip-ansi: 7.0.1 dev: true + /string.prototype.trim/1.2.7: + resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + dev: true + /string.prototype.trimend/1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.1 + es-abstract: 1.21.2 dev: true /string.prototype.trimstart/1.0.6: @@ -9459,7 +9504,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.1 + es-abstract: 1.21.2 dev: true /string_decoder/1.1.1: @@ -9537,11 +9582,12 @@ packages: engines: {node: '>=8'} dev: true - /sucrase/3.29.0: - resolution: {integrity: sha512-bZPAuGA5SdFHuzqIhTAqt9fvNEo9rESqXIG3oiKdF8K4UmkQxC4KlNL3lVyAErXp+mPvUqZ5l13qx6TrDIGf3A==} + /sucrase/3.32.0: + resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} engines: {node: '>=8'} hasBin: true dependencies: + '@jridgewell/gen-mapping': 0.3.3 commander: 4.1.1 glob: 7.1.6 lines-and-columns: 1.2.4 @@ -9602,8 +9648,8 @@ packages: engines: {node: '>=6'} dev: true - /terser-webpack-plugin/5.3.6_7lhzojqiyzh43yiyfexcg3btze: - resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} + /terser-webpack-plugin/5.3.7_4mbh3ks6vevmq3w4sbjme7looe: + resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -9618,22 +9664,22 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.17 - '@swc/core': 1.3.35 - esbuild: 0.17.15 + '@jridgewell/trace-mapping': 0.3.18 + '@swc/core': 1.3.49 + esbuild: 0.17.16 jest-worker: 27.5.1 schema-utils: 3.1.1 serialize-javascript: 6.0.1 - terser: 5.16.4 - webpack: 5.75.0_44e4morsomth5ookbazmyefmhi + terser: 5.16.9 + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e dev: true - /terser/5.16.4: - resolution: {integrity: sha512-5yEGuZ3DZradbogeYQ1NaGz7rXVBDWujWlx1PT8efXO6Txn+eWbfKqB2bTDVmFXmePFkoLU6XI8UektMIEA0ug==} + /terser/5.16.9: + resolution: {integrity: sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg==} engines: {node: '>=10'} hasBin: true dependencies: - '@jridgewell/source-map': 0.3.2 + '@jridgewell/source-map': 0.3.3 acorn: 8.8.2 commander: 2.20.3 source-map-support: 0.5.21 @@ -9682,14 +9728,14 @@ packages: /through2/2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: - readable-stream: 2.3.7 + readable-stream: 2.3.8 xtend: 4.0.2 dev: true /through2/4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: - readable-stream: 3.6.0 + readable-stream: 3.6.2 dev: true /thunky/1.1.0: @@ -9791,7 +9837,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-node/10.9.1_chdop2axsawvq2yu4npultaqpi: + /ts-node/10.9.1_faublg25f7qpbcz6w4cw6yyzse: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -9806,12 +9852,12 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@swc/core': 1.3.35 + '@swc/core': 1.3.49 '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 18.15.5 + '@types/node': 18.15.11 acorn: 8.8.2 acorn-walk: 8.2.0 arg: 4.1.3 @@ -9823,7 +9869,7 @@ packages: yn: 3.1.1 dev: true - /ts-node/10.9.1_rtqtuii6mqwmhbrzzpdx2vdzzq: + /ts-node/10.9.1_l7nicavc6cghsvyjdpeszw7e5e: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -9838,19 +9884,19 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@swc/core': 1.3.35 + '@swc/core': 1.3.49 '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 18.15.5 + '@types/node': 18.15.11 acorn: 8.8.2 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.0.2 + typescript: 5.0.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -9862,7 +9908,7 @@ packages: /tslib/2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - /tsup/6.7.0_4s7jzcjqpdttwnwh3e3glkuq6y: + /tsup/6.7.0_kpvxmbmtx6ydv4unklsjw2abeq: resolution: {integrity: sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==} engines: {node: '>=14.18'} hasBin: true @@ -9878,35 +9924,35 @@ packages: typescript: optional: true dependencies: - '@swc/core': 1.3.35 - bundle-require: 4.0.1_esbuild@0.17.15 + '@swc/core': 1.3.49 + bundle-require: 4.0.1_esbuild@0.17.16 cac: 6.7.14 chokidar: 3.4.1 debug: 4.3.4 - esbuild: 0.17.15 + esbuild: 0.17.16 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 postcss-load-config: 3.1.4_ts-node@10.9.1 resolve-from: 5.0.0 - rollup: 3.20.1 + rollup: 3.20.2 source-map: 0.8.0-beta.0 - sucrase: 3.29.0 + sucrase: 3.32.0 tree-kill: 1.2.2 - typescript: 5.0.2 + typescript: 5.0.4 transitivePeerDependencies: - supports-color - ts-node dev: true - /tsutils/3.21.0_typescript@5.0.2: + /tsutils/3.21.0_typescript@5.0.4: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.0.2 + typescript: 5.0.4 dev: true /type-check/0.3.2: @@ -9979,8 +10025,8 @@ packages: hasBin: true dev: true - /typescript/5.0.2: - resolution: {integrity: sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==} + /typescript/5.0.4: + resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} hasBin: true dev: true @@ -9994,8 +10040,8 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /undici/5.21.0: - resolution: {integrity: sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==} + /undici/5.21.2: + resolution: {integrity: sha512-f6pTQ9RF4DQtwoWSaC42P/NKlUjvezVvd9r155ohqkwFNRyBKM3f3pcty3ouusefNRyM25XhIQEbeQ46sZDJfQ==} engines: {node: '>=12.18'} dependencies: busboy: 1.6.0 @@ -10079,7 +10125,7 @@ packages: deprecated: Please see https://github.com/lydell/urix#deprecated dev: true - /url-loader/4.1.1_webpack@5.75.0: + /url-loader/4.1.1_webpack@5.79.0: resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -10092,7 +10138,7 @@ packages: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.1.1 - webpack: 5.75.0_44e4morsomth5ookbazmyefmhi + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e dev: true /url-parse/1.5.10: @@ -10155,7 +10201,7 @@ packages: resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 1.9.0 dev: true @@ -10163,7 +10209,7 @@ packages: /validate-npm-package-license/3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: - spdx-correct: 3.1.1 + spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 dev: true @@ -10190,7 +10236,7 @@ packages: engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: true /wbuf/1.7.3: @@ -10221,7 +10267,7 @@ packages: engines: {node: '>=12'} dev: true - /webpack-dev-middleware/3.7.3_webpack@5.75.0: + /webpack-dev-middleware/3.7.3_webpack@5.79.0: resolution: {integrity: sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==} engines: {node: '>= 6'} peerDependencies: @@ -10231,11 +10277,11 @@ packages: mime: 2.6.0 mkdirp: 0.5.6 range-parser: 1.2.1 - webpack: 5.75.0_44e4morsomth5ookbazmyefmhi + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e webpack-log: 2.0.0 dev: true - /webpack-dev-server/3.11.3_webpack@5.75.0: + /webpack-dev-server/3.11.3_webpack@5.79.0: resolution: {integrity: sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==} engines: {node: '>= 6.11.5'} hasBin: true @@ -10275,8 +10321,8 @@ packages: strip-ansi: 3.0.1 supports-color: 6.1.0 url: 0.11.0 - webpack: 5.75.0_44e4morsomth5ookbazmyefmhi - webpack-dev-middleware: 3.7.3_webpack@5.75.0 + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e + webpack-dev-middleware: 3.7.3_webpack@5.79.0 webpack-log: 2.0.0 ws: 6.2.2 yargs: 13.3.2 @@ -10285,16 +10331,16 @@ packages: - utf-8-validate dev: true - /webpack-http-server/0.5.0_44e4morsomth5ookbazmyefmhi: + /webpack-http-server/0.5.0_57233mj27fjz7synoeubptyy7e: resolution: {integrity: sha512-kyewxAnzmDuZxe09fn/Bb0PeEnaDxHChYKFVsMy4oeBUs9Cyv2j1uEgzQJ7ljPFexLU8ongUS4i4O+e22CeBZQ==} dependencies: '@types/express': 4.17.17 '@types/mustache': 4.2.2 express: 4.18.2 - memfs: 3.4.13 + memfs: 3.5.0 mustache: 4.2.0 outvariant: 1.4.0 - webpack: 5.75.0_44e4morsomth5ookbazmyefmhi + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e transitivePeerDependencies: - '@swc/core' - esbuild @@ -10331,8 +10377,8 @@ packages: engines: {node: '>=10.13.0'} dev: true - /webpack/5.75.0_44e4morsomth5ookbazmyefmhi: - resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} + /webpack/5.79.0_57233mj27fjz7synoeubptyy7e: + resolution: {integrity: sha512-3mN4rR2Xq+INd6NnYuL9RC9GAmc1ROPKJoHhrZ4pAjdMFEkJJWrsPw8o2JjCIyQyTu7rTXYn4VG6OpyB3CobZg==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -10342,7 +10388,7 @@ packages: optional: true dependencies: '@types/eslint-scope': 3.7.4 - '@types/estree': 0.0.51 + '@types/estree': 1.0.0 '@webassemblyjs/ast': 1.11.1 '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 @@ -10351,18 +10397,18 @@ packages: browserslist: 4.21.5 chrome-trace-event: 1.0.3 enhanced-resolve: 5.12.0 - es-module-lexer: 0.9.3 + es-module-lexer: 1.2.1 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 json-parse-even-better-errors: 2.3.1 loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 3.1.1 tapable: 2.2.1 - terser-webpack-plugin: 5.3.6_7lhzojqiyzh43yiyfexcg3btze + terser-webpack-plugin: 5.3.7_4mbh3ks6vevmq3w4sbjme7looe watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -10534,6 +10580,19 @@ packages: optional: true dev: true + /ws/8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -10611,8 +10670,8 @@ packages: yargs-parser: 13.1.2 dev: true - /yargs/17.7.0: - resolution: {integrity: sha512-dwqOPg5trmrre9+v8SUo2q/hAwyKoVfu8OC1xPHKJGNdxAvPl4sKxL4vBnh3bQz/ZvvGAFeA5H3ou2kcOY8sQQ==} + /yargs/17.7.1: + resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} engines: {node: '>=12'} dependencies: cliui: 8.0.1 From b8376e46331518b74254956af9b4411df1d04948 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 14 Apr 2023 20:00:57 +0200 Subject: [PATCH 103/210] chore: explain "customConditions" in jest (jsdom) --- test/jest.config.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/jest.config.js b/test/jest.config.js index 5975044cc..1e384c902 100644 --- a/test/jest.config.js +++ b/test/jest.config.js @@ -11,6 +11,12 @@ module.exports = { '^msw(.*)': '/../..$1', }, testEnvironmentOptions: { + // Force JSDOM to use the Node module resolution because we're still in Node.js. + // Using browser resolution won't work by design because JSDOM is not a browser + // and doesn't ship with 100% compatibility with the browser APIs. + // In tests, using browser resolution will result in "ClientRequest" imports + // from "@mswjs/interceptors" to not be found because they are not exported + // by the browser bundle of that library. customExportConditions: [''], }, globals: { From a4dadc9ff4eb086a12d3edf39d14420042111262 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 15 Apr 2023 00:23:36 +0200 Subject: [PATCH 104/210] chore: force exit node tests --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 72f7c5952..9ead0c77a 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "check:exports": "node \"./config/scripts/validate-esm.js\"", "test": "pnpm test:unit && pnpm test:node && pnpm test:browser", "test:unit": "cross-env BABEL_ENV=test jest --maxWorkers=3", - "test:node": "jest --config=./test/jest.config.js", + "test:node": "jest --config=./test/jest.config.js --forceExit", "test:browser": "playwright test -c ./test/browser/playwright.config.ts", "test:ts": "ts-node test/typings/run.ts", "prepare": "pnpm simple-git-hooks init", From b816698333669f2377c68dceb86080be09c780ff Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 15 Apr 2023 00:48:54 +0200 Subject: [PATCH 105/210] chore(release): v0.0.0-fetch.rc-11 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9ead0c77a..74dd6c20a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-10", + "version": "0.0.0-fetch.rc-11", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/core/index.js", "module": "./lib/core/index.mjs", From 2331179c01ba09d37a0d372b850922888479e3ac Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 17 Apr 2023 16:41:03 +0200 Subject: [PATCH 106/210] chore: add automated modules tests --- .github/workflows/compat.yml | 3 + package.json | 1 + test/modules/esm-node.test.ts | 129 ++++++++++++++++++ test/modules/jest.config.js | 9 ++ .../setup-server/printHandlers.node.test.ts | 17 ++- 5 files changed, 150 insertions(+), 9 deletions(-) create mode 100644 test/modules/esm-node.test.ts create mode 100644 test/modules/jest.config.js diff --git a/.github/workflows/compat.yml b/.github/workflows/compat.yml index 83a62634c..d0f11ca66 100644 --- a/.github/workflows/compat.yml +++ b/.github/workflows/compat.yml @@ -33,6 +33,9 @@ jobs: - name: Validate package.json exports run: pnpm check:exports + - name: Test modules + run: pnpm test:modules + # Checks the library's compatibility with different # TypeScript versions to discover type regressions. typescript: diff --git a/package.json b/package.json index 74dd6c20a..0b7a7c92d 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "test:unit": "cross-env BABEL_ENV=test jest --maxWorkers=3", "test:node": "jest --config=./test/jest.config.js --forceExit", "test:browser": "playwright test -c ./test/browser/playwright.config.ts", + "test:modules": "jest --config=./test/modules/jest.config.js", "test:ts": "ts-node test/typings/run.ts", "prepare": "pnpm simple-git-hooks init", "prepack": "pnpm build", diff --git a/test/modules/esm-node.test.ts b/test/modules/esm-node.test.ts new file mode 100644 index 000000000..18af9029e --- /dev/null +++ b/test/modules/esm-node.test.ts @@ -0,0 +1,129 @@ +import * as fs from 'fs' +import * as path from 'path' +import { createTeardown } from 'fs-teardown' +import { spawnSync } from 'child_process' +import { invariant } from 'outvariant' + +const fsMock = createTeardown({ + rootDir: path.resolve(__dirname, 'node-esm-tests'), + paths: { + 'package.json': JSON.stringify({ type: 'module' }), + }, +}) + +async function getLibraryTarball(): Promise { + const ROOT_PATH = path.resolve(__dirname, '../..') + const { version } = require(`${ROOT_PATH}/package.json`) + const packFilename = `msw-${version}.tgz` + const packPath = path.resolve(ROOT_PATH, packFilename) + + if (fs.existsSync(packPath)) { + return packPath + } + + const out = spawnSync('pnpm', ['pack'], { cwd: ROOT_PATH }) + + if (out.error) { + console.error(out.error) + } + + invariant( + fs.existsSync(packPath), + 'Failed to pack the library at "%s"', + packPath, + ) + + return packPath +} + +async function installLibrary() { + const TARBALL_PATH = await getLibraryTarball() + const installStdio = await fsMock.exec(`pnpm install $TARBALL_PATH`, { + env: { TARBALL_PATH }, + }) + + if (installStdio.stderr) { + console.error(installStdio.stderr) + return Promise.reject( + 'Failed to install the library. See the stderr output above.', + ) + } + + /** @todo Assert that pnpm printed success: + * + msw 0.0.0-fetch.rc-11 + */ +} + +beforeAll(async () => { + await fsMock.prepare() + await installLibrary() +}) + +afterAll(async () => { + await fsMock.cleanup() +}) + +it('resolves exports in ESM Node.js', async () => { + await fsMock.create({ + 'index.mjs': ` +console.log('msw:', await import.meta.resolve('msw')) +console.log('msw/node:', await import.meta.resolve('msw/node')) +console.log('msw/native:', await import.meta.resolve('msw/native')) +`, + }) + + const runtimeStdio = await fsMock.exec( + /** + * @note Using the import meta resolve flag + * to enable the "import.meta.resolve" API to see + * what library imports resolve to in Node.js ESM. + */ + 'node --experimental-import-meta-resolve ./index.mjs', + ) + expect(runtimeStdio.stderr).toBe('') + /** + * @todo Take these expected export paths from package.json. + * That should be the source of truth. + */ + expect(runtimeStdio.stdout).toMatch( + /^msw: (.+?)\/node_modules\/msw\/lib\/core\/index\.mjs/m, + ) + expect(runtimeStdio.stdout).toMatch( + /^msw\/node: (.+?)\/node_modules\/msw\/lib\/node\/index\.mjs/m, + ) + expect(runtimeStdio.stdout).toMatch( + /^msw\/native: (.+?)\/node_modules\/msw\/lib\/native\/index\.mjs/m, + ) + + /** + * @todo Also test the "msw/browser" import that throws, + * saying that the "./browser" export is not defined. + * That's correct, it's exlpicitly set as "browser: null" for Node.js. + */ +}) + +it('resolves exports in CJS Node.js', async () => { + await fsMock.create({ + 'index.cjs': ` +console.log('msw:', require.resolve('msw')) +console.log('msw/node:', require.resolve('msw/node')) +console.log('msw/native:', require.resolve('msw/native')) +`, + }) + + const runtimeStdio = await fsMock.exec('node ./index.cjs') + expect(runtimeStdio.stderr).toBe('') + /** + * @todo Take these expected export paths from package.json. + * That should be the source of truth. + */ + expect(runtimeStdio.stdout).toMatch( + /^msw: (.+?)\/node_modules\/msw\/lib\/core\/index\.js/m, + ) + expect(runtimeStdio.stdout).toMatch( + /^msw\/node: (.+?)\/node_modules\/msw\/lib\/node\/index\.js/m, + ) + expect(runtimeStdio.stdout).toMatch( + /^msw\/native: (.+?)\/node_modules\/msw\/lib\/native\/index\.js/m, + ) +}) diff --git a/test/modules/jest.config.js b/test/modules/jest.config.js new file mode 100644 index 000000000..5d31469cb --- /dev/null +++ b/test/modules/jest.config.js @@ -0,0 +1,9 @@ +/** @type {import('jest').Config} */ +module.exports = { + rootDir: '.', + transform: { + '^.+\\.ts$': '@swc/jest', + }, + testEnvironment: 'node', + testTimeout: 60_000, +} diff --git a/test/node/msw-api/setup-server/printHandlers.node.test.ts b/test/node/msw-api/setup-server/printHandlers.node.test.ts index bb812cd70..d1a7ee6dc 100644 --- a/test/node/msw-api/setup-server/printHandlers.node.test.ts +++ b/test/node/msw-api/setup-server/printHandlers.node.test.ts @@ -1,7 +1,6 @@ /** * @jest-environment node */ -import { bold } from 'chalk' import { rest, graphql } from 'msw' import { setupServer } from 'msw/node' @@ -42,32 +41,32 @@ test('lists all current request handlers', () => { expect(console.log).toBeCalledTimes(6) expect(console.log).toBeCalledWith(`\ -${bold('[rest] GET https://test.mswjs.io/book/:bookId')} +${'[rest] GET https://test.mswjs.io/book/:bookId'} Declaration: ${__filename}:13:8 `) expect(console.log).toBeCalledWith(`\ -${bold('[graphql] query GetUser (origin: *)')} +${'[graphql] query GetUser (origin: *)'} Declaration: ${__filename}:14:11 `) expect(console.log).toBeCalledWith(`\ -${bold('[graphql] mutation UpdatePost (origin: *)')} +${'[graphql] mutation UpdatePost (origin: *)'} Declaration: ${__filename}:15:11 `) expect(console.log).toBeCalledWith(`\ -${bold('[graphql] all (origin: *)')} +${'[graphql] all (origin: *)'} Declaration: ${__filename}:16:11 `) expect(console.log).toBeCalledWith(`\ -${bold('[graphql] query GetRepo (origin: https://api.github.com)')} +${'[graphql] query GetRepo (origin: https://api.github.com)'} Declaration: ${__filename}:17:10 `) expect(console.log).toBeCalledWith(`\ -${bold('[graphql] all (origin: https://api.github.com)')} +${'[graphql] all (origin: https://api.github.com)'} Declaration: ${__filename}:18:10 `) }) @@ -85,12 +84,12 @@ test('respects runtime request handlers when listing handlers', () => { expect(console.log).toBeCalledTimes(8) expect(console.log).toBeCalledWith(`\ -${bold('[rest] GET https://test.mswjs.io/book/:bookId')} +${'[rest] GET https://test.mswjs.io/book/:bookId'} Declaration: ${__filename}:77:10 `) expect(console.log).toBeCalledWith(`\ -${bold('[graphql] query GetRandomNumber (origin: *)')} +${'[graphql] query GetRandomNumber (origin: *)'} Declaration: ${__filename}:78:13 `) }) From e48f435e71d23de25cbc5e1a5422a1bbcaa6573c Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 17 Apr 2023 16:46:51 +0200 Subject: [PATCH 107/210] chore: add runtime esm node test --- test/modules/esm-node.test.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/test/modules/esm-node.test.ts b/test/modules/esm-node.test.ts index 18af9029e..628635cee 100644 --- a/test/modules/esm-node.test.ts +++ b/test/modules/esm-node.test.ts @@ -102,6 +102,25 @@ console.log('msw/native:', await import.meta.resolve('msw/native')) */ }) +it('runs ESM bundle in the ESM Node.js', async () => { + await fsMock.create({ + 'entry.mjs': ` +import { rest } from 'msw' +import { setupServer } from 'msw/node' + +const server = setupServer( + rest.get('/resource', () => new Response()) +) + +console.log(typeof server.listen) + `, + }) + + const runtimeStdio = await fsMock.exec('node ./entry.mjs') + expect(runtimeStdio.stderr).toBe('') + expect(runtimeStdio.stdout).toMatch(/function/m) +}) + it('resolves exports in CJS Node.js', async () => { await fsMock.create({ 'index.cjs': ` From 99402f6f4d10927bb0c98d0b39e6bdee4422cbbf Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 17 Apr 2023 16:49:38 +0200 Subject: [PATCH 108/210] fix: drop "chalk" --- config/copyServiceWorker.ts | 5 +---- package.json | 1 - pnpm-lock.yaml | 2 -- src/node/SetupServerApi.ts | 8 +------- 4 files changed, 2 insertions(+), 14 deletions(-) diff --git a/config/copyServiceWorker.ts b/config/copyServiceWorker.ts index 1520e89dd..7058b36cb 100644 --- a/config/copyServiceWorker.ts +++ b/config/copyServiceWorker.ts @@ -1,10 +1,7 @@ import * as fs from 'fs' import * as path from 'path' -import chalk from 'chalk' import { until } from '@open-draft/until' -const { cyan } = chalk - /** * Copies the given Service Worker source file into the destination. * Injects the integrity checksum into the destination file. @@ -48,5 +45,5 @@ export default async function copyServiceWorker( throw new Error(`Failed to write file.\n${writeFileResult.error.message}`) } - console.log('Service Worker copied to: %s', cyan(destFilePath)) + console.log('Service Worker copied to: %s', destFilePath) } diff --git a/package.json b/package.json index 0b7a7c92d..a22c034cb 100644 --- a/package.json +++ b/package.json @@ -114,7 +114,6 @@ "@types/cookie": "^0.4.1", "@types/js-levenshtein": "^1.1.1", "@types/statuses": "^2.0.1", - "chalk": "4.1.1", "chokidar": "^3.4.2", "cookie": "^0.4.2", "formdata-node": "4.4.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 28c639b77..77f712642 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,7 +31,6 @@ specifiers: '@typescript-eslint/parser': ^5.11.0 babel-loader: ^8.2.3 babel-minify: ^0.5.1 - chalk: 4.1.1 chokidar: 3.4.1 commitizen: ^4.2.4 cookie: ^0.4.2 @@ -85,7 +84,6 @@ dependencies: '@types/cookie': 0.4.1 '@types/js-levenshtein': 1.1.1 '@types/statuses': 2.0.1 - chalk: 4.1.1 chokidar: 3.4.1 cookie: 0.4.2 formdata-node: 4.4.1 diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 906538158..4984511db 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -1,4 +1,3 @@ -import chalk from 'chalk' import { invariant } from 'outvariant' import { BatchInterceptor, @@ -15,11 +14,6 @@ import { handleRequest } from '~/core/utils/handleRequest' import { devUtils } from '~/core/utils/internal/devUtils' import { SetupServer } from './glossary' -/** - * @see https://github.com/mswjs/msw/pull/1399 - */ -const { bold } = chalk - const DEFAULT_LISTEN_OPTIONS: RequiredDeep = { onUnhandledRequest: 'warn', } @@ -114,7 +108,7 @@ export class SetupServerApi : '[rest]' console.log(`\ -${bold(`${pragma} ${header}`)} +${`${pragma} ${header}`} Declaration: ${callFrame} `) }) From 1f815825cdf3c1f9bcdbd7abb6f9dd0464a8410e Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 17 Apr 2023 16:50:07 +0200 Subject: [PATCH 109/210] fix: use default import for cjs "statuses" --- src/core/utils/HttpResponse/decorators.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/core/utils/HttpResponse/decorators.ts b/src/core/utils/HttpResponse/decorators.ts index 204954b3d..8e8563194 100644 --- a/src/core/utils/HttpResponse/decorators.ts +++ b/src/core/utils/HttpResponse/decorators.ts @@ -1,6 +1,8 @@ -import { message } from 'statuses' +import statuses from 'statuses' import type { HttpResponseInit } from '../../HttpResponse' +const { message } = statuses + export interface HttpResponseDecoratedInit extends HttpResponseInit { status: number statusText: string From 0074b52bbce9411703c38f980c6484aefc3fd7c4 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 17 Apr 2023 16:53:17 +0200 Subject: [PATCH 110/210] test: add runtime esm node.js tests --- test/modules/esm-node.test.ts | 67 +++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/test/modules/esm-node.test.ts b/test/modules/esm-node.test.ts index 628635cee..badbb1b78 100644 --- a/test/modules/esm-node.test.ts +++ b/test/modules/esm-node.test.ts @@ -63,35 +63,43 @@ afterAll(async () => { await fsMock.cleanup() }) -it('resolves exports in ESM Node.js', async () => { +it('runs in a ESM Node.js project', async () => { await fsMock.create({ - 'index.mjs': ` + 'resolve.mjs': ` console.log('msw:', await import.meta.resolve('msw')) console.log('msw/node:', await import.meta.resolve('msw/node')) console.log('msw/native:', await import.meta.resolve('msw/native')) +`, + 'runtime.mjs': ` +import { rest } from 'msw' +import { setupServer } from 'msw/node' +const server = setupServer( + rest.get('/resource', () => new Response()) +) +console.log(typeof server.listen) `, }) - const runtimeStdio = await fsMock.exec( + const resolveStdio = await fsMock.exec( /** * @note Using the import meta resolve flag * to enable the "import.meta.resolve" API to see * what library imports resolve to in Node.js ESM. */ - 'node --experimental-import-meta-resolve ./index.mjs', + 'node --experimental-import-meta-resolve ./resolve.mjs', ) - expect(runtimeStdio.stderr).toBe('') + expect(resolveStdio.stderr).toBe('') /** * @todo Take these expected export paths from package.json. * That should be the source of truth. */ - expect(runtimeStdio.stdout).toMatch( + expect(resolveStdio.stdout).toMatch( /^msw: (.+?)\/node_modules\/msw\/lib\/core\/index\.mjs/m, ) - expect(runtimeStdio.stdout).toMatch( + expect(resolveStdio.stdout).toMatch( /^msw\/node: (.+?)\/node_modules\/msw\/lib\/node\/index\.mjs/m, ) - expect(runtimeStdio.stdout).toMatch( + expect(resolveStdio.stdout).toMatch( /^msw\/native: (.+?)\/node_modules\/msw\/lib\/native\/index\.mjs/m, ) @@ -100,49 +108,46 @@ console.log('msw/native:', await import.meta.resolve('msw/native')) * saying that the "./browser" export is not defined. * That's correct, it's exlpicitly set as "browser: null" for Node.js. */ -}) - -it('runs ESM bundle in the ESM Node.js', async () => { - await fsMock.create({ - 'entry.mjs': ` -import { rest } from 'msw' -import { setupServer } from 'msw/node' -const server = setupServer( - rest.get('/resource', () => new Response()) -) - -console.log(typeof server.listen) - `, - }) - - const runtimeStdio = await fsMock.exec('node ./entry.mjs') + const runtimeStdio = await fsMock.exec('node ./runtime.mjs') expect(runtimeStdio.stderr).toBe('') expect(runtimeStdio.stdout).toMatch(/function/m) }) -it('resolves exports in CJS Node.js', async () => { +it('runs in a CJS Node.js project', async () => { await fsMock.create({ - 'index.cjs': ` + 'resolve.cjs': ` console.log('msw:', require.resolve('msw')) console.log('msw/node:', require.resolve('msw/node')) console.log('msw/native:', require.resolve('msw/native')) +`, + 'runtime.cjs': ` +import { rest } from 'msw' +import { setupServer } from 'msw/node' +const server = setupServer( + rest.get('/resource', () => new Response()) +) +console.log(typeof server.listen) `, }) - const runtimeStdio = await fsMock.exec('node ./index.cjs') - expect(runtimeStdio.stderr).toBe('') + const resolveStdio = await fsMock.exec('node ./resolve.cjs') + expect(resolveStdio.stderr).toBe('') /** * @todo Take these expected export paths from package.json. * That should be the source of truth. */ - expect(runtimeStdio.stdout).toMatch( + expect(resolveStdio.stdout).toMatch( /^msw: (.+?)\/node_modules\/msw\/lib\/core\/index\.js/m, ) - expect(runtimeStdio.stdout).toMatch( + expect(resolveStdio.stdout).toMatch( /^msw\/node: (.+?)\/node_modules\/msw\/lib\/node\/index\.js/m, ) - expect(runtimeStdio.stdout).toMatch( + expect(resolveStdio.stdout).toMatch( /^msw\/native: (.+?)\/node_modules\/msw\/lib\/native\/index\.js/m, ) + + const runtimeStdio = await fsMock.exec('node ./runtime.mjs') + expect(runtimeStdio.stderr).toBe('') + expect(runtimeStdio.stdout).toMatch(/function/m) }) From a3b5c096222a524f53e646835133837e0d6b87a1 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 17 Apr 2023 17:14:14 +0200 Subject: [PATCH 111/210] test: fix printHandlers location tests --- .../setup-server/printHandlers.node.test.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/test/node/msw-api/setup-server/printHandlers.node.test.ts b/test/node/msw-api/setup-server/printHandlers.node.test.ts index d1a7ee6dc..76dd62d28 100644 --- a/test/node/msw-api/setup-server/printHandlers.node.test.ts +++ b/test/node/msw-api/setup-server/printHandlers.node.test.ts @@ -42,32 +42,32 @@ test('lists all current request handlers', () => { expect(console.log).toBeCalledWith(`\ ${'[rest] GET https://test.mswjs.io/book/:bookId'} - Declaration: ${__filename}:13:8 + Declaration: ${__filename}:12:8 `) expect(console.log).toBeCalledWith(`\ ${'[graphql] query GetUser (origin: *)'} - Declaration: ${__filename}:14:11 + Declaration: ${__filename}:13:11 `) expect(console.log).toBeCalledWith(`\ ${'[graphql] mutation UpdatePost (origin: *)'} - Declaration: ${__filename}:15:11 + Declaration: ${__filename}:14:11 `) expect(console.log).toBeCalledWith(`\ ${'[graphql] all (origin: *)'} - Declaration: ${__filename}:16:11 + Declaration: ${__filename}:15:11 `) expect(console.log).toBeCalledWith(`\ ${'[graphql] query GetRepo (origin: https://api.github.com)'} - Declaration: ${__filename}:17:10 + Declaration: ${__filename}:16:10 `) expect(console.log).toBeCalledWith(`\ ${'[graphql] all (origin: https://api.github.com)'} - Declaration: ${__filename}:18:10 + Declaration: ${__filename}:17:10 `) }) @@ -85,11 +85,11 @@ test('respects runtime request handlers when listing handlers', () => { expect(console.log).toBeCalledWith(`\ ${'[rest] GET https://test.mswjs.io/book/:bookId'} - Declaration: ${__filename}:77:10 + Declaration: ${__filename}:76:10 `) expect(console.log).toBeCalledWith(`\ ${'[graphql] query GetRandomNumber (origin: *)'} - Declaration: ${__filename}:78:13 + Declaration: ${__filename}:77:13 `) }) From 4c211108bfca89ee024e6fc47623eca11575e896 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 17 Apr 2023 17:57:49 +0200 Subject: [PATCH 112/210] chore: add browser module tests --- .github/workflows/compat.yml | 7 ++- package.json | 3 +- test/browser/setup/webpackHttpServer.ts | 2 +- test/modules/browser/esm-browser.test.ts | 63 +++++++++++++++++++++++ test/modules/browser/playwright.config.ts | 13 +++++ test/modules/module-utils.ts | 48 +++++++++++++++++ test/modules/{ => node}/esm-node.test.ts | 49 +----------------- test/modules/{ => node}/jest.config.js | 0 8 files changed, 134 insertions(+), 51 deletions(-) create mode 100644 test/modules/browser/esm-browser.test.ts create mode 100644 test/modules/browser/playwright.config.ts create mode 100644 test/modules/module-utils.ts rename test/modules/{ => node}/esm-node.test.ts (73%) rename test/modules/{ => node}/jest.config.js (100%) diff --git a/.github/workflows/compat.yml b/.github/workflows/compat.yml index d0f11ca66..d8b9f03df 100644 --- a/.github/workflows/compat.yml +++ b/.github/workflows/compat.yml @@ -33,8 +33,11 @@ jobs: - name: Validate package.json exports run: pnpm check:exports - - name: Test modules - run: pnpm test:modules + - name: Test modules (Node.js) + run: pnpm test:modules:node + + - name: Test modules (browser) + run: pnpm test:modules:browser # Checks the library's compatibility with different # TypeScript versions to discover type regressions. diff --git a/package.json b/package.json index a22c034cb..51821e475 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,8 @@ "test:unit": "cross-env BABEL_ENV=test jest --maxWorkers=3", "test:node": "jest --config=./test/jest.config.js --forceExit", "test:browser": "playwright test -c ./test/browser/playwright.config.ts", - "test:modules": "jest --config=./test/modules/jest.config.js", + "test:modules:node": "jest --config=./test/modules/node/jest.config.js", + "test:modules:browser": "playwright test -c ./test/modules/browser/playwright.config.ts", "test:ts": "ts-node test/typings/run.ts", "prepare": "pnpm simple-git-hooks init", "prepack": "pnpm build", diff --git a/test/browser/setup/webpackHttpServer.ts b/test/browser/setup/webpackHttpServer.ts index 68409bec0..e24a07a4e 100644 --- a/test/browser/setup/webpackHttpServer.ts +++ b/test/browser/setup/webpackHttpServer.ts @@ -62,7 +62,7 @@ export async function startWebpackServer(): Promise { alias: { msw: path.resolve(__dirname, '../../..'), }, - extensions: ['.ts', '.js'], + extensions: ['.ts', '.js', '.mjs'], }, }, }) diff --git a/test/modules/browser/esm-browser.test.ts b/test/modules/browser/esm-browser.test.ts new file mode 100644 index 000000000..42fc902d9 --- /dev/null +++ b/test/modules/browser/esm-browser.test.ts @@ -0,0 +1,63 @@ +import * as path from 'path' +import { createTeardown } from 'fs-teardown' +import { WebpackHttpServer } from 'webpack-http-server' +import { test, expect } from '@playwright/test' +import { spyOnConsole } from 'page-with' +import { installLibrary } from '../module-utils' + +const fsMock = createTeardown({ + rootDir: path.resolve(__dirname, 'esm-browser-tests'), + paths: { + 'package.json': JSON.stringify({ type: 'module' }), + }, +}) + +const webpackServer = new WebpackHttpServer({ + before(app) { + app.get('/favicon.ico', (req, res) => res.status(200).end()) + }, + webpackConfig: { + context: fsMock.resolve('.'), + target: 'web', + resolve: { + extensions: ['.mjs', '.js'], + }, + }, +}) + +test.beforeAll(async () => { + await webpackServer.listen() + await fsMock.prepare() + await installLibrary(fsMock.resolve('.')) +}) + +test.afterAll(async () => { + await webpackServer.close() + await fsMock.cleanup() +}) + +test('runs in an ESM browser project', async ({ page }) => { + await fsMock.create({ + 'entry.mjs': ` +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' +const worker = setupWorker( + rest.get('/resource', () => new Response()), + rest.post('/login', () => HttpResponse.json([1, 2, 3])) +) +console.log(typeof worker.start) + `, + }) + const consoleSpy = spyOnConsole(page) + const pageErrors: Array = [] + page.on('pageerror', (error) => pageErrors.push(error.message)) + + const compilation = await webpackServer.compile(['./entry.mjs']) + await page.goto(compilation.previewUrl, { waitUntil: 'networkidle' }) + + await compilation.dispose() + + expect(pageErrors).toEqual([]) + expect(consoleSpy.get('error')).toBeUndefined() + expect(consoleSpy.get('log')).toEqual(expect.arrayContaining(['function'])) +}) diff --git a/test/modules/browser/playwright.config.ts b/test/modules/browser/playwright.config.ts new file mode 100644 index 000000000..2fea97eca --- /dev/null +++ b/test/modules/browser/playwright.config.ts @@ -0,0 +1,13 @@ +import { Config } from '@playwright/test' + +const config: Config = { + testDir: __dirname, + use: { + launchOptions: { + devtools: !process.env.CI, + }, + }, + fullyParallel: true, +} + +export default config diff --git a/test/modules/module-utils.ts b/test/modules/module-utils.ts new file mode 100644 index 000000000..b73a07a35 --- /dev/null +++ b/test/modules/module-utils.ts @@ -0,0 +1,48 @@ +import * as fs from 'fs' +import * as path from 'path' +import { spawnSync } from 'child_process' +import { invariant } from 'outvariant' + +export async function getLibraryTarball(): Promise { + const ROOT_PATH = path.resolve(__dirname, '../..') + const { version } = require(`${ROOT_PATH}/package.json`) + const packFilename = `msw-${version}.tgz` + const packPath = path.resolve(ROOT_PATH, packFilename) + + if (fs.existsSync(packPath)) { + return packPath + } + + const out = spawnSync('pnpm', ['pack'], { cwd: ROOT_PATH }) + + if (out.error) { + console.error(out.error) + } + + invariant( + fs.existsSync(packPath), + 'Failed to pack the library at "%s"', + packPath, + ) + + return packPath +} + +export async function installLibrary(projectPath: string) { + const TARBALL_PATH = await getLibraryTarball() + + const out = spawnSync('pnpm', ['install', TARBALL_PATH], { + cwd: projectPath, + }) + + if (out.error) { + console.error(out.error) + return Promise.reject( + 'Failed to install the library. See the stderr output above.', + ) + } + + /** @todo Assert that pnpm printed success: + * + msw 0.0.0-fetch.rc-11 + */ +} diff --git a/test/modules/esm-node.test.ts b/test/modules/node/esm-node.test.ts similarity index 73% rename from test/modules/esm-node.test.ts rename to test/modules/node/esm-node.test.ts index badbb1b78..7f1859c9f 100644 --- a/test/modules/esm-node.test.ts +++ b/test/modules/node/esm-node.test.ts @@ -1,8 +1,6 @@ -import * as fs from 'fs' import * as path from 'path' import { createTeardown } from 'fs-teardown' -import { spawnSync } from 'child_process' -import { invariant } from 'outvariant' +import { installLibrary } from '../module-utils' const fsMock = createTeardown({ rootDir: path.resolve(__dirname, 'node-esm-tests'), @@ -11,52 +9,9 @@ const fsMock = createTeardown({ }, }) -async function getLibraryTarball(): Promise { - const ROOT_PATH = path.resolve(__dirname, '../..') - const { version } = require(`${ROOT_PATH}/package.json`) - const packFilename = `msw-${version}.tgz` - const packPath = path.resolve(ROOT_PATH, packFilename) - - if (fs.existsSync(packPath)) { - return packPath - } - - const out = spawnSync('pnpm', ['pack'], { cwd: ROOT_PATH }) - - if (out.error) { - console.error(out.error) - } - - invariant( - fs.existsSync(packPath), - 'Failed to pack the library at "%s"', - packPath, - ) - - return packPath -} - -async function installLibrary() { - const TARBALL_PATH = await getLibraryTarball() - const installStdio = await fsMock.exec(`pnpm install $TARBALL_PATH`, { - env: { TARBALL_PATH }, - }) - - if (installStdio.stderr) { - console.error(installStdio.stderr) - return Promise.reject( - 'Failed to install the library. See the stderr output above.', - ) - } - - /** @todo Assert that pnpm printed success: - * + msw 0.0.0-fetch.rc-11 - */ -} - beforeAll(async () => { await fsMock.prepare() - await installLibrary() + await installLibrary(fsMock.resolve('.')) }) afterAll(async () => { diff --git a/test/modules/jest.config.js b/test/modules/node/jest.config.js similarity index 100% rename from test/modules/jest.config.js rename to test/modules/node/jest.config.js From 0fd26dc3674d9e5210b92087b1041f1d56f9178c Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 18 Apr 2023 16:02:09 +0200 Subject: [PATCH 113/210] chore: use "@web/dev-server" for browser esm tests --- package.json | 1 + pnpm-lock.yaml | 550 +++++++++++++++++++++++ test/modules/browser/esm-browser.test.ts | 57 ++- 3 files changed, 590 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index 51821e475..25025070e 100644 --- a/package.json +++ b/package.json @@ -151,6 +151,7 @@ "@types/puppeteer": "^5.4.4", "@typescript-eslint/eslint-plugin": "^5.11.0", "@typescript-eslint/parser": "^5.11.0", + "@web/dev-server": "^0.1.38", "babel-loader": "^8.2.3", "babel-minify": "^0.5.1", "commitizen": "^4.2.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 77f712642..8d6959dc3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,6 +29,7 @@ specifiers: '@types/statuses': ^2.0.1 '@typescript-eslint/eslint-plugin': ^5.11.0 '@typescript-eslint/parser': ^5.11.0 + '@web/dev-server': ^0.1.38 babel-loader: ^8.2.3 babel-minify: ^0.5.1 chokidar: 3.4.1 @@ -120,6 +121,7 @@ devDependencies: '@types/puppeteer': 5.4.7 '@typescript-eslint/eslint-plugin': 5.58.0_ug56riyzsilszklzuxgwlsssqe '@typescript-eslint/parser': 5.58.0_cgdknpc562nnyruteofhkegnom + '@web/dev-server': 0.1.38 babel-loader: 8.3.0_c3tfwv7p35clwcmkb5fnkshzei babel-minify: 0.5.2 commitizen: 4.3.0_@swc+core@1.3.49 @@ -155,6 +157,14 @@ devDependencies: packages: + /@75lb/deep-merge/1.1.1: + resolution: {integrity: sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw==} + engines: {node: '>=12.17'} + dependencies: + lodash.assignwith: 4.2.0 + typical: 7.1.1 + dev: true + /@ampproject/remapping/2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} @@ -2438,6 +2448,33 @@ packages: fsevents: 2.3.2 dev: true + /@rollup/plugin-node-resolve/13.3.0_rollup@2.79.1: + resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^2.42.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.79.1 + '@types/resolve': 1.17.1 + deepmerge: 4.3.1 + is-builtin-module: 3.2.1 + is-module: 1.0.0 + resolve: 1.22.2 + rollup: 2.79.1 + dev: true + + /@rollup/pluginutils/3.1.0_rollup@2.79.1: + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 + dev: true + /@sinclair/typebox/0.25.24: resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} dev: true @@ -2602,6 +2639,12 @@ packages: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true + /@types/accepts/1.3.5: + resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==} + dependencies: + '@types/node': 18.15.11 + dev: true + /@types/babel__core/7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: @@ -2638,12 +2681,20 @@ packages: '@types/node': 18.15.11 dev: true + /@types/command-line-args/5.2.0: + resolution: {integrity: sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==} + dev: true + /@types/connect/3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: '@types/node': 18.15.11 dev: true + /@types/content-disposition/0.5.5: + resolution: {integrity: sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==} + dev: true + /@types/conventional-commits-parser/3.0.3: resolution: {integrity: sha512-aoUKfRQYvGMH+spFpOTX9jO4nZoz9/BKp4hlHPxL3Cj2r2Xj+jEcwlXtFIyZr5uL8bh1nbWynDEYaAota+XqPg==} dependencies: @@ -2653,6 +2704,15 @@ packages: /@types/cookie/0.4.1: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} + /@types/cookies/0.7.7: + resolution: {integrity: sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==} + dependencies: + '@types/connect': 3.4.35 + '@types/express': 4.17.17 + '@types/keygrip': 1.0.2 + '@types/node': 18.15.11 + dev: true + /@types/cors/2.8.13: resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==} dependencies: @@ -2679,6 +2739,10 @@ packages: '@types/json-schema': 7.0.11 dev: true + /@types/estree/0.0.39: + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + dev: true + /@types/estree/1.0.0: resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} dev: true @@ -2726,6 +2790,14 @@ packages: '@types/node': 18.15.11 dev: true + /@types/http-assert/1.5.3: + resolution: {integrity: sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==} + dev: true + + /@types/http-errors/2.0.1: + resolution: {integrity: sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==} + dev: true + /@types/issue-parser/3.0.1: resolution: {integrity: sha512-cdggbeJIxWoIB8CB57BvenONrQZcBuEf2uddxMRNIy2jgdcnSxnY71tQcNrxdqTG4VmQP5fdLLE9E+jCnMK0Fg==} dev: true @@ -2773,6 +2845,29 @@ packages: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true + /@types/keygrip/1.0.2: + resolution: {integrity: sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==} + dev: true + + /@types/koa-compose/3.2.5: + resolution: {integrity: sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==} + dependencies: + '@types/koa': 2.13.6 + dev: true + + /@types/koa/2.13.6: + resolution: {integrity: sha512-diYUfp/GqfWBAiwxHtYJ/FQYIXhlEhlyaU7lB/bWQrx4Il9lCET5UwpFy3StOAohfsxxvEQ11qIJgT1j2tfBvw==} + dependencies: + '@types/accepts': 1.3.5 + '@types/content-disposition': 0.5.5 + '@types/cookies': 0.7.7 + '@types/http-assert': 1.5.3 + '@types/http-errors': 2.0.1 + '@types/keygrip': 1.0.2 + '@types/koa-compose': 3.2.5 + '@types/node': 18.15.11 + dev: true + /@types/mime/3.0.1: resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} dev: true @@ -2815,6 +2910,10 @@ packages: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} dev: true + /@types/parse5/6.0.3: + resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} + dev: true + /@types/prettier/2.7.2: resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} dev: true @@ -2843,6 +2942,12 @@ packages: resolution: {integrity: sha512-VtTUcUaJGiJtlBKYwwFIOSvrcnuKmpPGO+x56XijNZnaDpnzKh2VwoTw5hewrOMW2BgjoU+uFbVAvSCW2FpWmA==} dev: true + /@types/resolve/1.17.1: + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + dependencies: + '@types/node': 18.15.11 + dev: true + /@types/semver/7.3.13: resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} dev: true @@ -2876,6 +2981,12 @@ packages: resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} dev: true + /@types/ws/7.4.7: + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + dependencies: + '@types/node': 18.15.11 + dev: true + /@types/yargs-parser/21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true @@ -3022,6 +3133,90 @@ packages: eslint-visitor-keys: 3.4.0 dev: true + /@web/config-loader/0.1.3: + resolution: {integrity: sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==} + engines: {node: '>=10.0.0'} + dependencies: + semver: 7.4.0 + dev: true + + /@web/dev-server-core/0.4.1: + resolution: {integrity: sha512-KdYwejXZwIZvb6tYMCqU7yBiEOPfKLQ3V9ezqqEz8DA9V9R3oQWaowckvCpFB9IxxPfS/P8/59OkdzGKQjcIUw==} + engines: {node: '>=10.0.0'} + dependencies: + '@types/koa': 2.13.6 + '@types/ws': 7.4.7 + '@web/parse5-utils': 1.3.1 + chokidar: 3.4.1 + clone: 2.1.2 + es-module-lexer: 1.2.1 + get-stream: 6.0.1 + is-stream: 2.0.1 + isbinaryfile: 5.0.0 + koa: 2.14.2 + koa-etag: 4.0.0 + koa-send: 5.0.1 + koa-static: 5.0.0 + lru-cache: 6.0.0 + mime-types: 2.1.35 + parse5: 6.0.1 + picomatch: 2.3.1 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@web/dev-server-rollup/0.4.1: + resolution: {integrity: sha512-Ebsv7Ovd9MufeH3exvikBJ7GmrZA5OmHnOgaiHcwMJ2eQBJA5/I+/CbRjsLX97ICj/ZwZG//p2ITRz8W3UfSqg==} + engines: {node: '>=10.0.0'} + dependencies: + '@rollup/plugin-node-resolve': 13.3.0_rollup@2.79.1 + '@web/dev-server-core': 0.4.1 + nanocolors: 0.2.13 + parse5: 6.0.1 + rollup: 2.79.1 + whatwg-url: 11.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@web/dev-server/0.1.38: + resolution: {integrity: sha512-WUq7Zi8KeJ5/UZmmpZ+kzUpUlFlMP/rcreJKYg9Lxiz998KYl4G5Rv24akX0piTuqXG7r6h+zszg8V/hdzjCoA==} + engines: {node: '>=10.0.0'} + hasBin: true + dependencies: + '@babel/code-frame': 7.21.4 + '@types/command-line-args': 5.2.0 + '@web/config-loader': 0.1.3 + '@web/dev-server-core': 0.4.1 + '@web/dev-server-rollup': 0.4.1 + camelcase: 6.3.0 + command-line-args: 5.2.1 + command-line-usage: 7.0.1 + debounce: 1.2.1 + deepmerge: 4.3.1 + ip: 1.1.8 + nanocolors: 0.2.13 + open: 8.4.2 + portfinder: 1.0.32 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@web/parse5-utils/1.3.1: + resolution: {integrity: sha512-haCgDchZrAOB9EhBJ5XqiIjBMsS/exsM5Ru7sCSyNkXVEJWskyyKuKMFk66BonnIGMPpDtqDrTUfYEis5Zi3XA==} + engines: {node: '>=10.0.0'} + dependencies: + '@types/parse5': 6.0.3 + parse5: 6.0.1 + dev: true + /@webassemblyjs/ast/1.11.1: resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} dependencies: @@ -3366,6 +3561,16 @@ packages: engines: {node: '>=0.10.0'} dev: true + /array-back/3.1.0: + resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} + engines: {node: '>=6'} + dev: true + + /array-back/6.2.2: + resolution: {integrity: sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==} + engines: {node: '>=12.17'} + dev: true + /array-buffer-byte-length/1.0.0: resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: @@ -3942,6 +4147,11 @@ packages: base64-js: 1.5.1 ieee754: 1.2.1 + /builtin-modules/3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + /bundle-require/4.0.1_esbuild@0.17.16: resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3989,6 +4199,14 @@ packages: unset-value: 1.0.0 dev: true + /cache-content-type/1.0.1: + resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} + engines: {node: '>= 6.0.0'} + dependencies: + mime-types: 2.1.35 + ylru: 1.3.2 + dev: true + /cachedir/2.3.0: resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==} engines: {node: '>=6'} @@ -4039,6 +4257,13 @@ packages: resolution: {integrity: sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw==} dev: true + /chalk-template/0.4.0: + resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} + engines: {node: '>=12'} + dependencies: + chalk: 4.1.2 + dev: true + /chalk/2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -4055,6 +4280,14 @@ packages: ansi-styles: 4.3.0 supports-color: 7.2.0 + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + /chalk/5.2.0: resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} @@ -4170,6 +4403,11 @@ packages: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} + /clone/2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + dev: true + /co/4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} @@ -4217,6 +4455,26 @@ packages: delayed-stream: 1.0.0 dev: true + /command-line-args/5.2.1: + resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} + engines: {node: '>=4.0.0'} + dependencies: + array-back: 3.1.0 + find-replace: 3.0.0 + lodash.camelcase: 4.3.0 + typical: 4.0.0 + dev: true + + /command-line-usage/7.0.1: + resolution: {integrity: sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==} + engines: {node: '>=12.20.0'} + dependencies: + array-back: 6.2.2 + chalk-template: 0.4.0 + table-layout: 3.0.2 + typical: 7.1.1 + dev: true + /commander/10.0.0: resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==} engines: {node: '>=14'} @@ -4389,6 +4647,14 @@ packages: engines: {node: '>= 0.6'} dev: true + /cookies/0.8.0: + resolution: {integrity: sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + keygrip: 1.1.0 + dev: true + /copy-descriptor/0.1.1: resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} engines: {node: '>=0.10.0'} @@ -4556,6 +4822,10 @@ packages: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} dev: true + /debounce/1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + dev: true + /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -4579,6 +4849,17 @@ packages: supports-color: 6.1.0 dev: true + /debug/3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + /debug/3.2.7_supports-color@6.1.0: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -4642,6 +4923,10 @@ packages: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true + /deep-equal/1.0.1: + resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} + dev: true + /deep-equal/1.1.1: resolution: {integrity: sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==} dependencies: @@ -4680,6 +4965,11 @@ packages: dependencies: clone: 1.0.4 + /define-lazy-prop/2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: true + /define-properties/1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} @@ -4728,6 +5018,10 @@ packages: engines: {node: '>=0.4.0'} dev: true + /delegates/1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + dev: true + /depd/1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} @@ -5253,6 +5547,10 @@ packages: engines: {node: '>=4.0'} dev: true + /estree-walker/1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + dev: true + /esutils/2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -5605,6 +5903,13 @@ packages: merge: 2.1.1 dev: true + /find-replace/3.0.0: + resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} + engines: {node: '>=4.0.0'} + dependencies: + array-back: 3.1.0 + dev: true + /find-root/1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} dev: true @@ -6124,6 +6429,14 @@ packages: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true + /http-assert/1.5.0: + resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} + engines: {node: '>= 0.8'} + dependencies: + deep-equal: 1.0.1 + http-errors: 1.8.1 + dev: true + /http-deceiver/1.2.7: resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} dev: true @@ -6138,6 +6451,17 @@ packages: statuses: 1.5.0 dev: true + /http-errors/1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 1.5.0 + toidentifier: 1.0.1 + dev: true + /http-errors/2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} @@ -6402,6 +6726,13 @@ packages: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: true + /is-builtin-module/3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + dependencies: + builtin-modules: 3.3.0 + dev: true + /is-callable/1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -6452,6 +6783,12 @@ packages: kind-of: 6.0.3 dev: true + /is-docker/2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + /is-extendable/0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} @@ -6487,6 +6824,13 @@ packages: engines: {node: '>=6'} dev: true + /is-generator-function/1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + /is-glob/4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -6497,6 +6841,10 @@ packages: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} + /is-module/1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + dev: true + /is-negative-zero/2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -6649,10 +6997,22 @@ packages: engines: {node: '>=4'} dev: true + /is-wsl/2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + /isarray/1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true + /isbinaryfile/5.0.0: + resolution: {integrity: sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==} + engines: {node: '>= 14.0.0'} + dev: true + /isexe/2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true @@ -7295,6 +7655,13 @@ packages: engines: {'0': node >= 0.2.0} dev: true + /keygrip/1.1.0: + resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} + engines: {node: '>= 0.6'} + dependencies: + tsscmp: 1.0.6 + dev: true + /killable/1.0.1: resolution: {integrity: sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==} dev: true @@ -7328,6 +7695,76 @@ packages: engines: {node: '>=6'} dev: true + /koa-compose/4.1.0: + resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} + dev: true + + /koa-convert/2.0.0: + resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} + engines: {node: '>= 10'} + dependencies: + co: 4.6.0 + koa-compose: 4.1.0 + dev: true + + /koa-etag/4.0.0: + resolution: {integrity: sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==} + dependencies: + etag: 1.8.1 + dev: true + + /koa-send/5.0.1: + resolution: {integrity: sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==} + engines: {node: '>= 8'} + dependencies: + debug: 4.3.4 + http-errors: 1.8.1 + resolve-path: 1.4.0 + transitivePeerDependencies: + - supports-color + dev: true + + /koa-static/5.0.0: + resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==} + engines: {node: '>= 7.6.0'} + dependencies: + debug: 3.2.7 + koa-send: 5.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /koa/2.14.2: + resolution: {integrity: sha512-VFI2bpJaodz6P7x2uyLiX6RLYpZmOJqNmoCst/Yyd7hQlszyPwG/I9CQJ63nOtKSxpt5M7NH67V6nJL2BwCl7g==} + engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} + dependencies: + accepts: 1.3.8 + cache-content-type: 1.0.1 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookies: 0.8.0 + debug: 4.3.4 + delegates: 1.0.0 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + fresh: 0.5.2 + http-assert: 1.5.0 + http-errors: 1.6.3 + is-generator-function: 1.0.10 + koa-compose: 4.1.0 + koa-convert: 2.0.0 + on-finished: 2.4.1 + only: 0.0.2 + parseurl: 1.3.3 + statuses: 1.5.0 + type-is: 1.6.18 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: true + /leven/2.1.0: resolution: {integrity: sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==} engines: {node: '>=0.10.0'} @@ -7446,6 +7883,14 @@ packages: p-locate: 5.0.0 dev: true + /lodash.assignwith/4.2.0: + resolution: {integrity: sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==} + dev: true + + /lodash.camelcase/4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + dev: true + /lodash.capitalize/4.2.1: resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} dev: true @@ -7812,6 +8257,10 @@ packages: thenify-all: 1.6.0 dev: true + /nanocolors/0.2.13: + resolution: {integrity: sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==} + dev: true + /nanomatch/1.2.13_supports-color@6.1.0: resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} engines: {node: '>=0.10.0'} @@ -8046,6 +8495,19 @@ packages: mimic-fn: 4.0.0 dev: true + /only/0.0.2: + resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} + dev: true + + /open/8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: true + /opn/5.5.0: resolution: {integrity: sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==} engines: {node: '>=4'} @@ -8209,6 +8671,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /parse5/6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + dev: true + /parse5/7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: @@ -8401,6 +8867,17 @@ packages: playwright-core: 1.32.3 dev: true + /portfinder/1.0.32: + resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} + engines: {node: '>= 0.12.0'} + dependencies: + async: 2.6.4 + debug: 3.2.7 + mkdirp: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: true + /portfinder/1.0.32_supports-color@6.1.0: resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} @@ -8791,6 +9268,14 @@ packages: global-dirs: 0.1.1 dev: true + /resolve-path/1.4.0: + resolution: {integrity: sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==} + engines: {node: '>= 0.8'} + dependencies: + http-errors: 1.6.3 + path-is-absolute: 1.0.1 + dev: true + /resolve-url/0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated @@ -8850,6 +9335,14 @@ packages: glob: 7.2.3 dev: true + /rollup/2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + /rollup/3.20.2: resolution: {integrity: sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} @@ -9428,6 +9921,11 @@ packages: readable-stream: 2.3.8 dev: true + /stream-read-all/3.0.1: + resolution: {integrity: sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==} + engines: {node: '>=10'} + dev: true + /stream-shift/1.0.1: resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} dev: true @@ -9630,6 +10128,20 @@ packages: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true + /table-layout/3.0.2: + resolution: {integrity: sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==} + engines: {node: '>=12.17'} + hasBin: true + dependencies: + '@75lb/deep-merge': 1.1.1 + array-back: 6.2.2 + command-line-args: 5.2.1 + command-line-usage: 7.0.1 + stream-read-all: 3.0.1 + typical: 7.1.1 + wordwrapjs: 5.1.0 + dev: true + /table/6.8.1: resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} engines: {node: '>=10.0.0'} @@ -9906,6 +10418,11 @@ packages: /tslib/2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + /tsscmp/1.0.6: + resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} + engines: {node: '>=0.6.x'} + dev: true + /tsup/6.7.0_kpvxmbmtx6ydv4unklsjw2abeq: resolution: {integrity: sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==} engines: {node: '>=14.18'} @@ -10029,6 +10546,16 @@ packages: hasBin: true dev: true + /typical/4.0.0: + resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} + engines: {node: '>=8'} + dev: true + + /typical/7.1.1: + resolution: {integrity: sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==} + engines: {node: '>=12.17'} + dev: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -10513,6 +11040,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /wordwrapjs/5.1.0: + resolution: {integrity: sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==} + engines: {node: '>=12.17'} + dev: true + /wrap-ansi/5.1.0: resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} engines: {node: '>=6'} @@ -10565,6 +11097,19 @@ packages: async-limiter: 1.0.1 dev: true + /ws/7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + /ws/8.11.0: resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} engines: {node: '>=10.0.0'} @@ -10680,6 +11225,11 @@ packages: y18n: 5.0.8 yargs-parser: 21.1.1 + /ylru/1.3.2: + resolution: {integrity: sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==} + engines: {node: '>= 4.0.0'} + dev: true + /yn/3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} diff --git a/test/modules/browser/esm-browser.test.ts b/test/modules/browser/esm-browser.test.ts index 42fc902d9..1a8cb2da7 100644 --- a/test/modules/browser/esm-browser.test.ts +++ b/test/modules/browser/esm-browser.test.ts @@ -1,10 +1,15 @@ import * as path from 'path' +import { invariant } from 'outvariant' import { createTeardown } from 'fs-teardown' -import { WebpackHttpServer } from 'webpack-http-server' +import * as express from 'express' +import { HttpServer } from '@open-draft/test-server/http' import { test, expect } from '@playwright/test' import { spyOnConsole } from 'page-with' +import { startDevServer } from '@web/dev-server' import { installLibrary } from '../module-utils' +type DevServer = Awaited> + const fsMock = createTeardown({ rootDir: path.resolve(__dirname, 'esm-browser-tests'), paths: { @@ -12,27 +17,43 @@ const fsMock = createTeardown({ }, }) -const webpackServer = new WebpackHttpServer({ - before(app) { - app.get('/favicon.ico', (req, res) => res.status(200).end()) - }, - webpackConfig: { - context: fsMock.resolve('.'), - target: 'web', - resolve: { - extensions: ['.mjs', '.js'], - }, - }, +let devServer: DevServer + +function getDevServerUrl(): string { + const address = devServer.server.address() + + invariant(address, 'Failed to retrieve dev server url: null') + + if (typeof address === 'string') { + return new URL(address).href + } + + return new URL(`http://localhost:${address.port}`).href +} + +const httpServer = new HttpServer((app) => { + app.use(express.static(fsMock.resolve('.'))) }) test.beforeAll(async () => { - await webpackServer.listen() + devServer = await startDevServer({ + config: { + rootDir: fsMock.resolve('.'), + nodeResolve: { + exportConditions: ['browser'], + }, + }, + logStartMessage: false, + }) + + await httpServer.listen() await fsMock.prepare() await installLibrary(fsMock.resolve('.')) }) test.afterAll(async () => { - await webpackServer.close() + await devServer?.stop() + await httpServer.close() await fsMock.cleanup() }) @@ -47,15 +68,15 @@ const worker = setupWorker( ) console.log(typeof worker.start) `, + 'index.html': ` + + `, }) const consoleSpy = spyOnConsole(page) const pageErrors: Array = [] page.on('pageerror', (error) => pageErrors.push(error.message)) - const compilation = await webpackServer.compile(['./entry.mjs']) - await page.goto(compilation.previewUrl, { waitUntil: 'networkidle' }) - - await compilation.dispose() + await page.goto(getDevServerUrl(), { waitUntil: 'networkidle' }) expect(pageErrors).toEqual([]) expect(consoleSpy.get('error')).toBeUndefined() From 4f3e05b7f93497d35e736e59e1b1fa76546d6af9 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 18 Apr 2023 18:55:36 +0200 Subject: [PATCH 114/210] chore: update in-house dependencies for esm compat --- package.json | 4 ++-- pnpm-lock.yaml | 36 ++++++++++++------------------------ 2 files changed, 14 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index 25025070e..755d5a155 100644 --- a/package.json +++ b/package.json @@ -109,9 +109,9 @@ ], "sideEffects": false, "dependencies": { - "@mswjs/cookies": "^0.2.2", + "@mswjs/cookies": "^1.0.0", "@mswjs/interceptors": "^0.22.12", - "@open-draft/until": "^2.0.0", + "@open-draft/until": "^2.1.0", "@types/cookie": "^0.4.1", "@types/js-levenshtein": "^1.1.1", "@types/statuses": "^2.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8d6959dc3..27c4d0df1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,10 +8,10 @@ specifiers: '@babel/preset-env': ^7.16.11 '@commitlint/cli': ^16.1.0 '@commitlint/config-conventional': ^16.0.0 - '@mswjs/cookies': ^0.2.2 + '@mswjs/cookies': ^1.0.0 '@mswjs/interceptors': ^0.22.12 '@open-draft/test-server': ^0.4.2 - '@open-draft/until': ^2.0.0 + '@open-draft/until': ^2.1.0 '@ossjs/release': ^0.4.0 '@playwright/test': ^1.30.0 '@swc/core': ^1.3.35 @@ -79,9 +79,9 @@ specifiers: yargs: ^17.3.1 dependencies: - '@mswjs/cookies': 0.2.2 + '@mswjs/cookies': 1.0.0 '@mswjs/interceptors': 0.22.12 - '@open-draft/until': 2.0.0 + '@open-draft/until': 2.1.0 '@types/cookie': 0.4.1 '@types/js-levenshtein': 1.1.1 '@types/statuses': 2.0.1 @@ -2337,12 +2337,9 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /@mswjs/cookies/0.2.2: - resolution: {integrity: sha512-mlN83YSrcFgk7Dm1Mys40DLssI1KdJji2CMKN8eOlBqsTADYzj2+jWzsANsUTFbxDMWPD5e9bfA1RGqBpS3O1g==} + /@mswjs/cookies/1.0.0: + resolution: {integrity: sha512-TdXoBdI+h/EDTsVLCX/34s4+9U0sWi92qFnIGUEikpMCSKLhBeujovyYVSoORNbYgsBH5ga7/tfxyWcEZAxiYA==} engines: {node: '>=14'} - dependencies: - '@types/set-cookie-parser': 2.4.2 - set-cookie-parser: 2.6.0 dev: false /@mswjs/interceptors/0.22.12: @@ -2351,7 +2348,7 @@ packages: dependencies: '@open-draft/deferred-promise': 2.1.0 '@open-draft/logger': 0.3.0 - '@open-draft/until': 2.0.0 + '@open-draft/until': 2.1.0 headers-polyfill: 3.1.2 outvariant: 1.4.0 strict-event-emitter: 0.5.0 @@ -2405,14 +2402,14 @@ packages: - utf-8-validate dev: true - /@open-draft/until/2.0.0: - resolution: {integrity: sha512-0zJhDjNR0aH1d68TiD6GnYr18dcuOiyTx8xV/I7fp9+z/VQ20e305aObW1/DO5/fiCOztscmvJsCjJDYDhFW6w==} + /@open-draft/until/2.1.0: + resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} /@ossjs/release/0.4.0: resolution: {integrity: sha512-cfW+gk3GdVqjrawkAG8q6MXPmTJouwwPegmBAVNvYvKq/tKQHgluxiueTlNTdJRryI76rpe6y5+EXlHdisrwdg==} hasBin: true dependencies: - '@open-draft/until': 2.0.0 + '@open-draft/until': 2.1.0 '@types/conventional-commits-parser': 3.0.3 '@types/issue-parser': 3.0.1 '@types/node': 16.18.23 @@ -2901,6 +2898,7 @@ packages: /@types/node/18.15.11: resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} + dev: true /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -2959,12 +2957,6 @@ packages: '@types/node': 18.15.11 dev: true - /@types/set-cookie-parser/2.4.2: - resolution: {integrity: sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==} - dependencies: - '@types/node': 18.15.11 - dev: false - /@types/stack-utils/2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} dev: true @@ -8627,7 +8619,7 @@ packages: /page-with/0.6.1_57233mj27fjz7synoeubptyy7e: resolution: {integrity: sha512-5J58fSpc8CKonUWCPsh8b2LctFrNSOpXQ8O3tB+/iJvixOQf1qHp4+cDLiIVsl/WiuheXdZTzMcuR0KLQMaWcg==} dependencies: - '@open-draft/until': 2.0.0 + '@open-draft/until': 2.1.0 '@types/debug': 4.1.7 '@types/express': 4.17.17 '@types/mustache': 4.2.2 @@ -9560,10 +9552,6 @@ packages: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /set-cookie-parser/2.6.0: - resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} - dev: false - /set-value/2.0.1: resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} engines: {node: '>=0.10.0'} From 8ae5a4fbf16726a37a301458fe4909d1b8e92cec Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 18 Apr 2023 18:55:50 +0200 Subject: [PATCH 115/210] chore: use correct cjs deps imports --- src/core/utils/HttpResponse/decorators.ts | 2 +- src/core/utils/request/onUnhandledRequest.ts | 5 ++++- test/modules/browser/esm-browser.test.ts | 5 ++++- test/modules/module-utils.ts | 4 ++++ tsconfig.json | 4 ++-- 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/core/utils/HttpResponse/decorators.ts b/src/core/utils/HttpResponse/decorators.ts index 8e8563194..49478ef69 100644 --- a/src/core/utils/HttpResponse/decorators.ts +++ b/src/core/utils/HttpResponse/decorators.ts @@ -1,4 +1,4 @@ -import statuses from 'statuses' +import * as statuses from 'statuses' import type { HttpResponseInit } from '../../HttpResponse' const { message } = statuses diff --git a/src/core/utils/request/onUnhandledRequest.ts b/src/core/utils/request/onUnhandledRequest.ts index d6a818852..73f654fa8 100644 --- a/src/core/utils/request/onUnhandledRequest.ts +++ b/src/core/utils/request/onUnhandledRequest.ts @@ -1,4 +1,5 @@ -import getStringMatchScore from 'js-levenshtein' +// @ts-ignore +import * as jsLevenshtein from 'js-levenshtein' import { RequestHandler, RestHandler, GraphQLHandler } from '../..' import { ParsedGraphQLQuery, @@ -8,6 +9,8 @@ import { getPublicUrlFromRequest } from './getPublicUrlFromRequest' import { isStringEqual } from '../internal/isStringEqual' import { devUtils } from '../internal/devUtils' +const getStringMatchScore = (jsLevenshtein as any).default + const MAX_MATCH_SCORE = 3 const MAX_SUGGESTION_COUNT = 4 const TYPE_MATCH_DELTA = 0.5 diff --git a/test/modules/browser/esm-browser.test.ts b/test/modules/browser/esm-browser.test.ts index 1a8cb2da7..92f324daa 100644 --- a/test/modules/browser/esm-browser.test.ts +++ b/test/modules/browser/esm-browser.test.ts @@ -39,6 +39,7 @@ test.beforeAll(async () => { devServer = await startDevServer({ config: { rootDir: fsMock.resolve('.'), + port: 0, nodeResolve: { exportConditions: ['browser'], }, @@ -74,7 +75,9 @@ console.log(typeof worker.start) }) const consoleSpy = spyOnConsole(page) const pageErrors: Array = [] - page.on('pageerror', (error) => pageErrors.push(error.message)) + page.on('pageerror', (error) => + pageErrors.push(`${error.message}\n${error.stack}`), + ) await page.goto(getDevServerUrl(), { waitUntil: 'networkidle' }) diff --git a/test/modules/module-utils.ts b/test/modules/module-utils.ts index b73a07a35..0ec7752e5 100644 --- a/test/modules/module-utils.ts +++ b/test/modules/module-utils.ts @@ -9,6 +9,10 @@ export async function getLibraryTarball(): Promise { const packFilename = `msw-${version}.tgz` const packPath = path.resolve(ROOT_PATH, packFilename) + /** + * @note Beware that you need to remove the tarball after + * the test run is done. Don't want to use a stale tgarball, do you? + */ if (fs.existsSync(packPath)) { return packPath } diff --git a/tsconfig.json b/tsconfig.json index ca667b891..e024d9f99 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,8 +4,8 @@ "target": "es6", "module": "ESNext", "moduleResolution": "node", - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, + "allowSyntheticDefaultImports": false, + "esModuleInterop": false, "resolveJsonModule": true, "declaration": true, "declarationDir": "lib/types", From f1749a622747dacd0782bfb5a35605f15603a335 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 18 Apr 2023 18:59:16 +0200 Subject: [PATCH 116/210] chore: fix typescript package import in ts tests --- test/typings/run.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/typings/run.ts b/test/typings/run.ts index 86b26d7bd..fe7861751 100644 --- a/test/typings/run.ts +++ b/test/typings/run.ts @@ -2,7 +2,7 @@ import * as fs from 'fs' import * as path from 'path' import { spawnSync } from 'child_process' import { invariant } from 'outvariant' -import tsPackageJson from 'typescript/package.json' +import * as tsPackageJson from 'typescript/package.json' const tsInstalledVersion = tsPackageJson.version invariant( From c7139dfb3667e39eb20880e69bbeb56f4971a7de Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 20 Apr 2023 17:20:36 +0200 Subject: [PATCH 117/210] fix(cookie): use manually bundled esm version --- global.d.ts | 4 ++++ package.json | 2 +- pnpm-lock.yaml | 12 +++++++++--- src/core/utils/request/getRequestCookies.ts | 4 ++-- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/global.d.ts b/global.d.ts index 8976bba1f..febf64c69 100644 --- a/global.d.ts +++ b/global.d.ts @@ -1 +1,5 @@ declare const SERVICE_WORKER_CHECKSUM: string + +declare module '@bundled-es-modules/cookie' { + export * from 'cookie' +} diff --git a/package.json b/package.json index 755d5a155..7b8b49a2e 100644 --- a/package.json +++ b/package.json @@ -109,6 +109,7 @@ ], "sideEffects": false, "dependencies": { + "@bundled-es-modules/cookie": "^2.0.0", "@mswjs/cookies": "^1.0.0", "@mswjs/interceptors": "^0.22.12", "@open-draft/until": "^2.1.0", @@ -116,7 +117,6 @@ "@types/js-levenshtein": "^1.1.1", "@types/statuses": "^2.0.1", "chokidar": "^3.4.2", - "cookie": "^0.4.2", "formdata-node": "4.4.1", "graphql": "^15.0.0 || ^16.0.0", "headers-polyfill": "^3.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 27c4d0df1..03253370c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,6 +6,7 @@ overrides: specifiers: '@babel/core': ^7.17.2 '@babel/preset-env': ^7.16.11 + '@bundled-es-modules/cookie': ^2.0.0 '@commitlint/cli': ^16.1.0 '@commitlint/config-conventional': ^16.0.0 '@mswjs/cookies': ^1.0.0 @@ -34,7 +35,6 @@ specifiers: babel-minify: ^0.5.1 chokidar: 3.4.1 commitizen: ^4.2.4 - cookie: ^0.4.2 cross-env: ^7.0.3 cross-fetch: ^3.1.5 cz-conventional-changelog: 3.3.0 @@ -79,6 +79,7 @@ specifiers: yargs: ^17.3.1 dependencies: + '@bundled-es-modules/cookie': 2.0.0 '@mswjs/cookies': 1.0.0 '@mswjs/interceptors': 0.22.12 '@open-draft/until': 2.1.0 @@ -86,7 +87,6 @@ dependencies: '@types/js-levenshtein': 1.1.1 '@types/statuses': 2.0.1 chokidar: 3.4.1 - cookie: 0.4.2 formdata-node: 4.4.1 graphql: 16.6.0 headers-polyfill: 3.1.2 @@ -1367,6 +1367,12 @@ packages: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true + /@bundled-es-modules/cookie/2.0.0: + resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==} + dependencies: + cookie: 0.5.0 + dev: false + /@commitlint/cli/16.3.0_@swc+core@1.3.49: resolution: {integrity: sha512-P+kvONlfsuTMnxSwWE1H+ZcPMY3STFaHb2kAacsqoIkNx66O0T7sTpBxpxkMrFPyhkJiLJnJWMhk4bbvYD3BMA==} engines: {node: '>=v12'} @@ -4633,11 +4639,11 @@ packages: /cookie/0.4.2: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} + dev: true /cookie/0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} - dev: true /cookies/0.8.0: resolution: {integrity: sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==} diff --git a/src/core/utils/request/getRequestCookies.ts b/src/core/utils/request/getRequestCookies.ts index 4a0a7d9d6..f869803e2 100644 --- a/src/core/utils/request/getRequestCookies.ts +++ b/src/core/utils/request/getRequestCookies.ts @@ -1,14 +1,14 @@ -import * as cookieUtils from 'cookie' +import * as cookieUtils from '@bundled-es-modules/cookie' import { store } from '@mswjs/cookies' function getAllDocumentCookies() { return cookieUtils.parse(document.cookie) } +/** @todo Rename this to "getDocumentCookies" */ /** * Returns relevant document cookies based on the request `credentials` option. */ -/** @todo Rename this to "getDocumentCookies" */ export function getRequestCookies(request: Request): Record { /** * @note No cookies persist on the document in Node.js: no document. From 9b27a12ef5426228a6ac287395ba9405a260ad15 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 25 Apr 2023 11:32:54 +0200 Subject: [PATCH 118/210] chore: temporarily fix "process.env" for "graphql" --- test/modules/browser/esm-browser.test.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/modules/browser/esm-browser.test.ts b/test/modules/browser/esm-browser.test.ts index 92f324daa..d26bec5b4 100644 --- a/test/modules/browser/esm-browser.test.ts +++ b/test/modules/browser/esm-browser.test.ts @@ -70,6 +70,11 @@ const worker = setupWorker( console.log(typeof worker.start) `, 'index.html': ` + + `, }) From 7ff17ae8be51fd34a4e8accfd02d6b96e661a766 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 28 Apr 2023 15:14:32 +0200 Subject: [PATCH 119/210] feat(HttpResponse): make initializable class --- MIGRATING.md | 6 +- src/core/HttpResponse.test.ts | 4 +- src/core/HttpResponse.ts | 77 ++++++++++--------- .../utils/HttpResponse/createResponse.test.ts | 63 --------------- src/core/utils/HttpResponse/createResponse.ts | 11 --- src/core/utils/HttpResponse/decorators.ts | 2 +- .../msw-api/regression/null-body.mocks.ts | 2 +- .../scenarios/custom-transformers.mocks.ts | 2 +- .../stop/removes-all-listeners.mocks.ts | 2 +- .../custom-transformers.node.test.ts | 2 +- .../rest-api/cookies-inheritance.node.test.ts | 2 +- 11 files changed, 53 insertions(+), 120 deletions(-) delete mode 100644 src/core/utils/HttpResponse/createResponse.test.ts delete mode 100644 src/core/utils/HttpResponse/createResponse.ts diff --git a/MIGRATING.md b/MIGRATING.md index bc9f8a81a..db22c97a5 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -316,7 +316,7 @@ import { Headers, HttpResponse, rest } from 'msw' export const handlers = [ rest.get('/resource', () => { - return HttpResponse.plain(null, { + return new HttpResponse(null, { headers: new Headers([ // Mock a multi-value response cookie header. ['Set-Cookie', 'sessionId=123'], @@ -336,7 +336,7 @@ import { rest, HttpResponse } from 'msw' export const handlers = [ rest.get('/resource', () => { - return HttpResponse.raw('any-body') + return new HttpResponse('any-body') }), ] ``` @@ -585,7 +585,7 @@ rest.get('/greeting', () => { }, }) - return HttpResponse.plain(stream) + return new HttpResponse(stream) }) ``` diff --git a/src/core/HttpResponse.test.ts b/src/core/HttpResponse.test.ts index 6f6a4a093..ef9ec2df7 100644 --- a/src/core/HttpResponse.test.ts +++ b/src/core/HttpResponse.test.ts @@ -5,7 +5,7 @@ import { TextEncoder } from 'util' import { HttpResponse } from './HttpResponse' it('creates a plain response', async () => { - const response = HttpResponse.plain(null, { status: 301 }) + const response = new HttpResponse(null, { status: 301 }) expect(response.status).toBe(301) expect(response.statusText).toBe('Moved Permanently') expect(response.body).toBe(null) @@ -54,7 +54,7 @@ it('creates an array buffer response', async () => { it('creates a form data response', async () => { const formData = new FormData() formData.append('firstName', 'John') - const response = HttpResponse.plain(formData) + const response = HttpResponse.formData(formData) expect(response.status).toBe(200) expect(response.statusText).toBe('OK') diff --git a/src/core/HttpResponse.ts b/src/core/HttpResponse.ts index fcd78fc16..8342d66be 100644 --- a/src/core/HttpResponse.ts +++ b/src/core/HttpResponse.ts @@ -1,6 +1,8 @@ import type { DefaultBodyType } from './handlers/RequestHandler' -import { createResponse } from './utils/HttpResponse/createResponse' -import { decorateResponseInit } from './utils/HttpResponse/decorators' +import { + decorateResponse, + normalizeResponseInit, +} from './utils/HttpResponse/decorators' export interface HttpResponseInit extends ResponseInit { type?: ResponseType @@ -8,6 +10,11 @@ export interface HttpResponseInit extends ResponseInit { declare const bodyType: unique symbol +export interface StrictRequest + extends Request { + json(): Promise +} + /** * Opaque `Response` type that supports strict body type. */ @@ -16,19 +23,17 @@ export interface StrictResponse readonly [bodyType]: BodyType } -export interface StrictRequest - extends Request { - json(): Promise -} - -export const HttpResponse = { - plain( - body?: BodyType | null, - init?: HttpResponseInit, - ): Response { - const responseInit = decorateResponseInit(init) - return createResponse(body, responseInit) - }, +/** + * A `Response` class superset with a stricter response body type. + * @example + * new HttpResponse('Hello world', { status: 201 }) + */ +export class HttpResponse extends Response { + constructor(body?: BodyInit | null, init?: HttpResponseInit) { + const responseInit = normalizeResponseInit(init) + super(body, responseInit) + decorateResponse(this, responseInit) + } /** * Create a `Response` with a `Content-Type: "text/plain"` body. @@ -36,14 +41,14 @@ export const HttpResponse = { * HttpResponse.text('hello world') * HttpResponse.text('Error', { status: 500 }) */ - text( + static text( body?: BodyType | null, init?: HttpResponseInit, ): StrictResponse { - const responseInit = decorateResponseInit(init) + const responseInit = normalizeResponseInit(init) responseInit.headers.set('Content-Type', 'text/plain') - return createResponse(body, responseInit) - }, + return new HttpResponse(body, responseInit) as StrictResponse + } /** * Create a `Response` with a `Content-Type: "application/json"` body. @@ -51,14 +56,17 @@ export const HttpResponse = { * HttpResponse.json({ firstName: 'John' }) * HttpResponse.json({ error: 'Not Authorized' }, { status: 401 }) */ - json( + static json( body?: BodyType | null, init?: HttpResponseInit, ): StrictResponse { - const responseInit = decorateResponseInit(init) + const responseInit = normalizeResponseInit(init) responseInit.headers.set('Content-Type', 'application/json') - return createResponse(JSON.stringify(body), responseInit) - }, + return new HttpResponse( + JSON.stringify(body), + responseInit, + ) as StrictResponse + } /** * Create a `Response` with a `Content-Type: "application/xml"` body. @@ -66,14 +74,14 @@ export const HttpResponse = { * HttpResponse.xml(``) * HttpResponse.xml(`
`, { status: 201 }) */ - xml( + static xml( body?: BodyType | null, init?: HttpResponseInit, ): Response { - const responseInit = decorateResponseInit(init) + const responseInit = normalizeResponseInit(init) responseInit.headers.set('Content-Type', 'text/xml') - return createResponse(body, responseInit) - }, + return new HttpResponse(body, responseInit) + } /** * Create a `Response` with an `ArrayBuffer` body. @@ -84,15 +92,15 @@ export const HttpResponse = { * * HttpResponse.arrayBuffer(buffer) */ - arrayBuffer(body?: ArrayBuffer, init?: HttpResponseInit): Response { - const responseInit = decorateResponseInit(init) + static arrayBuffer(body?: ArrayBuffer, init?: HttpResponseInit): Response { + const responseInit = normalizeResponseInit(init) if (body) { responseInit.headers.set('Content-Length', body.byteLength.toString()) } - return createResponse(body, responseInit) - }, + return new HttpResponse(body, responseInit) + } /** * Create a `Response` with a `FormData` body. @@ -102,8 +110,7 @@ export const HttpResponse = { * * HttpResponse.formData(data) */ - formData(data?: FormData, init?: HttpResponseInit): Response { - const responseInit = decorateResponseInit(init) - return createResponse(data, responseInit) - }, + static formData(body?: FormData, init?: HttpResponseInit): Response { + return new HttpResponse(body, normalizeResponseInit(init)) + } } diff --git a/src/core/utils/HttpResponse/createResponse.test.ts b/src/core/utils/HttpResponse/createResponse.test.ts deleted file mode 100644 index 6f628636c..000000000 --- a/src/core/utils/HttpResponse/createResponse.test.ts +++ /dev/null @@ -1,63 +0,0 @@ -/** - * @jest-environment node - */ -import { Headers } from 'headers-polyfill' -import { createResponse } from './createResponse' - -it('creates an empty response', () => { - const response = createResponse(null, { - status: 200, - statusText: 'OK', - headers: new Headers(), - }) - - expect(response.status).toBe(200) - expect(response.statusText).toBe('OK') - expect(response.body).toBe(null) - expect(Array.from(response.headers.entries())).toEqual([]) -}) - -it('creates a text response', async () => { - const response = createResponse('hello world', { - status: 200, - statusText: 'OK', - headers: new Headers(), - }) - - expect(response.status).toBe(200) - expect(response.statusText).toBe('OK') - expect(response.body).toBeInstanceOf(ReadableStream) - expect(await response.text()).toBe('hello world') - expect(Array.from(response.headers.entries())).toEqual([ - ['content-type', 'text/plain;charset=UTF-8'], - ]) -}) - -it('creates a json response', async () => { - const response = createResponse(JSON.stringify({ firstName: 'John' }), { - status: 200, - statusText: 'OK', - headers: new Headers({ - 'Content-Type': 'application/json', - }), - }) - - expect(response.status).toBe(200) - expect(response.statusText).toBe('OK') - expect(response.body).toBeInstanceOf(ReadableStream) - expect(await response.json()).toEqual({ firstName: 'John' }) - expect(Array.from(response.headers.entries())).toEqual([ - ['content-type', 'application/json'], - ]) -}) - -it('forward a custom "type" response init property', () => { - const response = createResponse(null, { - type: 'opaque', - status: 200, - statusText: 'OK', - headers: new Headers(), - }) - - expect(response.type).toBe('opaque') -}) diff --git a/src/core/utils/HttpResponse/createResponse.ts b/src/core/utils/HttpResponse/createResponse.ts deleted file mode 100644 index 079a55266..000000000 --- a/src/core/utils/HttpResponse/createResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { StrictResponse } from '../../HttpResponse' -import { decorateResponse, HttpResponseDecoratedInit } from './decorators' - -export function createResponse( - body: BodyInit | null | undefined, - init: HttpResponseDecoratedInit, -): StrictResponse { - const response = new Response(body, init) - decorateResponse(response, init) - return response as StrictResponse -} diff --git a/src/core/utils/HttpResponse/decorators.ts b/src/core/utils/HttpResponse/decorators.ts index 49478ef69..a8b21c021 100644 --- a/src/core/utils/HttpResponse/decorators.ts +++ b/src/core/utils/HttpResponse/decorators.ts @@ -9,7 +9,7 @@ export interface HttpResponseDecoratedInit extends HttpResponseInit { headers: Headers } -export function decorateResponseInit( +export function normalizeResponseInit( init: HttpResponseInit = {}, ): HttpResponseDecoratedInit { const status = init?.status || 200 diff --git a/test/browser/msw-api/regression/null-body.mocks.ts b/test/browser/msw-api/regression/null-body.mocks.ts index 0fd27d6c1..496427c65 100644 --- a/test/browser/msw-api/regression/null-body.mocks.ts +++ b/test/browser/msw-api/regression/null-body.mocks.ts @@ -3,7 +3,7 @@ import { setupWorker } from 'msw/browser' const worker = setupWorker( rest.get('/api/books', () => { - return HttpResponse.plain(null, { status: 204 }) + return new HttpResponse(null, { status: 204 }) }), ) diff --git a/test/browser/msw-api/setup-worker/scenarios/custom-transformers.mocks.ts b/test/browser/msw-api/setup-worker/scenarios/custom-transformers.mocks.ts index f7ec33a21..e7844f7a1 100644 --- a/test/browser/msw-api/setup-worker/scenarios/custom-transformers.mocks.ts +++ b/test/browser/msw-api/setup-worker/scenarios/custom-transformers.mocks.ts @@ -4,7 +4,7 @@ import * as JSONbig from 'json-bigint' const worker = setupWorker( rest.get('/user', () => { - return HttpResponse.plain( + return new HttpResponse( JSONbig.stringify({ username: 'john.maverick', balance: BigInt(1597928668063727616), diff --git a/test/browser/msw-api/setup-worker/stop/removes-all-listeners.mocks.ts b/test/browser/msw-api/setup-worker/stop/removes-all-listeners.mocks.ts index 4686a4890..f2bc3c094 100644 --- a/test/browser/msw-api/setup-worker/stop/removes-all-listeners.mocks.ts +++ b/test/browser/msw-api/setup-worker/stop/removes-all-listeners.mocks.ts @@ -4,7 +4,7 @@ import { setupWorker } from 'msw/browser' const createWorker = () => { return setupWorker( rest.get('/user', () => { - return HttpResponse.plain() + return new HttpResponse() }), ) } diff --git a/test/node/msw-api/setup-server/scenarios/custom-transformers.node.test.ts b/test/node/msw-api/setup-server/scenarios/custom-transformers.node.test.ts index 4e8b79bae..db29a0812 100644 --- a/test/node/msw-api/setup-server/scenarios/custom-transformers.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/custom-transformers.node.test.ts @@ -5,7 +5,7 @@ import { setupServer } from 'msw/node' const server = setupServer( rest.get('http://test.mswjs.io/me', () => { - return HttpResponse.plain( + return new HttpResponse( JSONbig.stringify({ username: 'john.maverick', balance: BigInt(1597928668063727616), diff --git a/test/node/rest-api/cookies-inheritance.node.test.ts b/test/node/rest-api/cookies-inheritance.node.test.ts index c89c954f0..bf9bdbccb 100644 --- a/test/node/rest-api/cookies-inheritance.node.test.ts +++ b/test/node/rest-api/cookies-inheritance.node.test.ts @@ -22,7 +22,7 @@ beforeAll(async () => { server = setupServer( rest.post(httpServer.https.url('/login'), () => { - return HttpResponse.plain(null, { + return new HttpResponse(null, { headers: { 'Set-Cookie': 'authToken=abc-123', }, From 0f35fd253c52c92b842e80325eaa0541cf2d7c18 Mon Sep 17 00:00:00 2001 From: thepassle Date: Sat, 29 Apr 2023 09:57:26 +0200 Subject: [PATCH 120/210] fix: esm fixes --- global.d.ts | 7 +- package.json | 3 +- pnpm-lock.yaml | 3892 +++++++++--------- src/core/utils/HttpResponse/decorators.ts | 2 +- src/core/utils/request/getRequestCookies.ts | 2 +- src/core/utils/request/onUnhandledRequest.ts | 4 +- 6 files changed, 1915 insertions(+), 1995 deletions(-) diff --git a/global.d.ts b/global.d.ts index febf64c69..ec52ae4cd 100644 --- a/global.d.ts +++ b/global.d.ts @@ -1,5 +1,10 @@ declare const SERVICE_WORKER_CHECKSUM: string declare module '@bundled-es-modules/cookie' { - export * from 'cookie' + export * as default from 'cookie' +} + +declare module '@bundled-es-modules/statuses' { + const source_default: any + export { source_default as default } } diff --git a/package.json b/package.json index 7b8b49a2e..760920a51 100644 --- a/package.json +++ b/package.json @@ -110,6 +110,8 @@ "sideEffects": false, "dependencies": { "@bundled-es-modules/cookie": "^2.0.0", + "@bundled-es-modules/js-levenshtein": "^2.0.0", + "@bundled-es-modules/statuses": "^1.0.1", "@mswjs/cookies": "^1.0.0", "@mswjs/interceptors": "^0.22.12", "@open-draft/until": "^2.1.0", @@ -126,7 +128,6 @@ "node-fetch": "^2.6.7", "outvariant": "^1.4.0", "path-to-regexp": "^6.2.0", - "statuses": "^2.0.1", "strict-event-emitter": "^0.5.0", "type-fest": "^2.19.0", "yargs": "^17.3.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 03253370c..ab62dd2ed 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,163 +1,237 @@ -lockfileVersion: 5.4 +lockfileVersion: '6.0' overrides: chokidar: 3.4.1 -specifiers: - '@babel/core': ^7.17.2 - '@babel/preset-env': ^7.16.11 - '@bundled-es-modules/cookie': ^2.0.0 - '@commitlint/cli': ^16.1.0 - '@commitlint/config-conventional': ^16.0.0 - '@mswjs/cookies': ^1.0.0 - '@mswjs/interceptors': ^0.22.12 - '@open-draft/test-server': ^0.4.2 - '@open-draft/until': ^2.1.0 - '@ossjs/release': ^0.4.0 - '@playwright/test': ^1.30.0 - '@swc/core': ^1.3.35 - '@swc/jest': ^0.2.24 - '@types/cookie': ^0.4.1 - '@types/express': ^4.17.17 - '@types/fs-extra': ^9.0.13 - '@types/glob': ^8.1.0 - '@types/jest': ^29.4.0 - '@types/js-levenshtein': ^1.1.1 - '@types/json-bigint': ^1.0.1 - '@types/node': 18.x - '@types/node-fetch': ^2.5.11 - '@types/puppeteer': ^5.4.4 - '@types/statuses': ^2.0.1 - '@typescript-eslint/eslint-plugin': ^5.11.0 - '@typescript-eslint/parser': ^5.11.0 - '@web/dev-server': ^0.1.38 - babel-loader: ^8.2.3 - babel-minify: ^0.5.1 - chokidar: 3.4.1 - commitizen: ^4.2.4 - cross-env: ^7.0.3 - cross-fetch: ^3.1.5 - cz-conventional-changelog: 3.3.0 - esbuild: ^0.17.15 - esbuild-loader: ^2.21.0 - eslint: ^7.30.0 - eslint-config-prettier: ^8.3.0 - eslint-plugin-prettier: ^3.4.0 - express: ^4.18.2 - formdata-node: 4.4.1 - fs-extra: ^10.0.0 - fs-teardown: ^0.3.0 - glob: ^9.3.4 - graphql: ^15.0.0 || ^16.0.0 - headers-polyfill: ^3.1.2 - inquirer: ^8.2.0 - is-node-process: ^1.2.0 - jest: ^29.4.3 - jest-environment-jsdom: ^29.4.3 - js-levenshtein: ^1.1.6 - json-bigint: ^1.0.0 - lint-staged: ^13.0.3 - node-fetch: ^2.6.7 - outvariant: ^1.4.0 - page-with: ^0.6.1 - path-to-regexp: ^6.2.0 - prettier: ^2.7.1 - regenerator-runtime: ^0.13.9 - rimraf: ^3.0.2 - simple-git-hooks: ^2.8.0 - statuses: ^2.0.1 - strict-event-emitter: ^0.5.0 - ts-node: ^10.9.1 - tsup: ^6.7.0 - type-fest: ^2.19.0 - typescript: ^5.0.2 - undici: ^5.20.0 - url-loader: ^4.1.1 - webpack: ^5.68.0 - webpack-dev-server: ^3.11.2 - webpack-http-server: ^0.5.0 - yargs: ^17.3.1 - dependencies: - '@bundled-es-modules/cookie': 2.0.0 - '@mswjs/cookies': 1.0.0 - '@mswjs/interceptors': 0.22.12 - '@open-draft/until': 2.1.0 - '@types/cookie': 0.4.1 - '@types/js-levenshtein': 1.1.1 - '@types/statuses': 2.0.1 - chokidar: 3.4.1 - formdata-node: 4.4.1 - graphql: 16.6.0 - headers-polyfill: 3.1.2 - inquirer: 8.2.5 - is-node-process: 1.2.0 - js-levenshtein: 1.1.6 - node-fetch: 2.6.9 - outvariant: 1.4.0 - path-to-regexp: 6.2.1 - statuses: 2.0.1 - strict-event-emitter: 0.5.0 - type-fest: 2.19.0 - yargs: 17.7.1 + '@bundled-es-modules/cookie': + specifier: ^2.0.0 + version: 2.0.0 + '@bundled-es-modules/js-levenshtein': + specifier: ^2.0.0 + version: 2.0.0 + '@bundled-es-modules/statuses': + specifier: ^1.0.1 + version: 1.0.1 + '@mswjs/cookies': + specifier: ^1.0.0 + version: 1.0.0 + '@mswjs/interceptors': + specifier: ^0.22.12 + version: 0.22.12 + '@open-draft/until': + specifier: ^2.1.0 + version: 2.1.0 + '@types/cookie': + specifier: ^0.4.1 + version: 0.4.1 + '@types/js-levenshtein': + specifier: ^1.1.1 + version: 1.1.1 + '@types/statuses': + specifier: ^2.0.1 + version: 2.0.1 + chokidar: + specifier: 3.4.1 + version: 3.4.1 + formdata-node: + specifier: 4.4.1 + version: 4.4.1 + graphql: + specifier: ^15.0.0 || ^16.0.0 + version: 16.6.0 + headers-polyfill: + specifier: ^3.1.2 + version: 3.1.2 + inquirer: + specifier: ^8.2.0 + version: 8.2.5 + is-node-process: + specifier: ^1.2.0 + version: 1.2.0 + js-levenshtein: + specifier: ^1.1.6 + version: 1.1.6 + node-fetch: + specifier: ^2.6.7 + version: 2.6.9 + outvariant: + specifier: ^1.4.0 + version: 1.4.0 + path-to-regexp: + specifier: ^6.2.0 + version: 6.2.1 + strict-event-emitter: + specifier: ^0.5.0 + version: 0.5.0 + type-fest: + specifier: ^2.19.0 + version: 2.19.0 + yargs: + specifier: ^17.3.1 + version: 17.7.1 devDependencies: - '@babel/core': 7.21.4 - '@babel/preset-env': 7.21.4_@babel+core@7.21.4 - '@commitlint/cli': 16.3.0_@swc+core@1.3.49 - '@commitlint/config-conventional': 16.2.4 - '@open-draft/test-server': 0.4.2 - '@ossjs/release': 0.4.0 - '@playwright/test': 1.32.3 - '@swc/core': 1.3.49 - '@swc/jest': 0.2.24_@swc+core@1.3.49 - '@types/express': 4.17.17 - '@types/fs-extra': 9.0.13 - '@types/glob': 8.1.0 - '@types/jest': 29.5.0 - '@types/json-bigint': 1.0.1 - '@types/node': 18.15.11 - '@types/node-fetch': 2.6.3 - '@types/puppeteer': 5.4.7 - '@typescript-eslint/eslint-plugin': 5.58.0_ug56riyzsilszklzuxgwlsssqe - '@typescript-eslint/parser': 5.58.0_cgdknpc562nnyruteofhkegnom - '@web/dev-server': 0.1.38 - babel-loader: 8.3.0_c3tfwv7p35clwcmkb5fnkshzei - babel-minify: 0.5.2 - commitizen: 4.3.0_@swc+core@1.3.49 - cross-env: 7.0.3 - cross-fetch: 3.1.5 - cz-conventional-changelog: 3.3.0_@swc+core@1.3.49 - esbuild: 0.17.16 - esbuild-loader: 2.21.0_webpack@5.79.0 - eslint: 7.32.0 - eslint-config-prettier: 8.8.0_eslint@7.32.0 - eslint-plugin-prettier: 3.4.1_mouiu7tdcm2dtderipseaggmee - express: 4.18.2 - fs-extra: 10.1.0 - fs-teardown: 0.3.2 - glob: 9.3.5 - jest: 29.5.0_rrli7kzx2akox3oq6aahu3rvje - jest-environment-jsdom: 29.5.0 - json-bigint: 1.0.0 - lint-staged: 13.2.1 - page-with: 0.6.1_57233mj27fjz7synoeubptyy7e - prettier: 2.8.7 - regenerator-runtime: 0.13.11 - rimraf: 3.0.2 - simple-git-hooks: 2.8.1 - ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e - tsup: 6.7.0_kpvxmbmtx6ydv4unklsjw2abeq - typescript: 5.0.4 - undici: 5.21.2 - url-loader: 4.1.1_webpack@5.79.0 - webpack: 5.79.0_57233mj27fjz7synoeubptyy7e - webpack-dev-server: 3.11.3_webpack@5.79.0 - webpack-http-server: 0.5.0_57233mj27fjz7synoeubptyy7e + '@babel/core': + specifier: ^7.17.2 + version: 7.21.4 + '@babel/preset-env': + specifier: ^7.16.11 + version: 7.21.4(@babel/core@7.21.4) + '@commitlint/cli': + specifier: ^16.1.0 + version: 16.3.0(@swc/core@1.3.49) + '@commitlint/config-conventional': + specifier: ^16.0.0 + version: 16.2.4 + '@open-draft/test-server': + specifier: ^0.4.2 + version: 0.4.2 + '@ossjs/release': + specifier: ^0.4.0 + version: 0.4.0 + '@playwright/test': + specifier: ^1.30.0 + version: 1.32.3 + '@swc/core': + specifier: ^1.3.35 + version: 1.3.49 + '@swc/jest': + specifier: ^0.2.24 + version: 0.2.24(@swc/core@1.3.49) + '@types/express': + specifier: ^4.17.17 + version: 4.17.17 + '@types/fs-extra': + specifier: ^9.0.13 + version: 9.0.13 + '@types/glob': + specifier: ^8.1.0 + version: 8.1.0 + '@types/jest': + specifier: ^29.4.0 + version: 29.5.0 + '@types/json-bigint': + specifier: ^1.0.1 + version: 1.0.1 + '@types/node': + specifier: 18.x + version: 18.15.11 + '@types/node-fetch': + specifier: ^2.5.11 + version: 2.6.3 + '@types/puppeteer': + specifier: ^5.4.4 + version: 5.4.7 + '@typescript-eslint/eslint-plugin': + specifier: ^5.11.0 + version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@7.32.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: ^5.11.0 + version: 5.58.0(eslint@7.32.0)(typescript@5.0.4) + '@web/dev-server': + specifier: ^0.1.38 + version: 0.1.38 + babel-loader: + specifier: ^8.2.3 + version: 8.3.0(@babel/core@7.21.4)(webpack@5.79.0) + babel-minify: + specifier: ^0.5.1 + version: 0.5.2 + commitizen: + specifier: ^4.2.4 + version: 4.3.0(@swc/core@1.3.49) + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + cross-fetch: + specifier: ^3.1.5 + version: 3.1.5 + cz-conventional-changelog: + specifier: 3.3.0 + version: 3.3.0(@swc/core@1.3.49) + esbuild: + specifier: ^0.17.15 + version: 0.17.16 + esbuild-loader: + specifier: ^2.21.0 + version: 2.21.0(webpack@5.79.0) + eslint: + specifier: ^7.30.0 + version: 7.32.0 + eslint-config-prettier: + specifier: ^8.3.0 + version: 8.8.0(eslint@7.32.0) + eslint-plugin-prettier: + specifier: ^3.4.0 + version: 3.4.1(eslint-config-prettier@8.8.0)(eslint@7.32.0)(prettier@2.8.7) + express: + specifier: ^4.18.2 + version: 4.18.2(supports-color@6.1.0) + fs-extra: + specifier: ^10.0.0 + version: 10.1.0 + fs-teardown: + specifier: ^0.3.0 + version: 0.3.2 + glob: + specifier: ^9.3.4 + version: 9.3.5 + jest: + specifier: ^29.4.3 + version: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + jest-environment-jsdom: + specifier: ^29.4.3 + version: 29.5.0 + json-bigint: + specifier: ^1.0.0 + version: 1.0.0 + lint-staged: + specifier: ^13.0.3 + version: 13.2.1 + page-with: + specifier: ^0.6.1 + version: 0.6.1(@swc/core@1.3.49)(esbuild@0.17.16) + prettier: + specifier: ^2.7.1 + version: 2.8.7 + regenerator-runtime: + specifier: ^0.13.9 + version: 0.13.11 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + simple-git-hooks: + specifier: ^2.8.0 + version: 2.8.1 + ts-node: + specifier: ^10.9.1 + version: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4) + tsup: + specifier: ^6.7.0 + version: 6.7.0(@swc/core@1.3.49)(ts-node@10.9.1)(typescript@5.0.4) + typescript: + specifier: ^5.0.2 + version: 5.0.4 + undici: + specifier: ^5.20.0 + version: 5.21.2 + url-loader: + specifier: ^4.1.1 + version: 4.1.1(webpack@5.79.0) + webpack: + specifier: ^5.68.0 + version: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) + webpack-dev-server: + specifier: ^3.11.2 + version: 3.11.3(webpack@5.79.0) + webpack-http-server: + specifier: ^0.5.0 + version: 0.5.0(@swc/core@1.3.49)(esbuild@0.17.16) packages: - /@75lb/deep-merge/1.1.1: + /@75lb/deep-merge@1.1.1: resolution: {integrity: sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw==} engines: {node: '>=12.17'} dependencies: @@ -165,7 +239,7 @@ packages: typical: 7.1.1 dev: true - /@ampproject/remapping/2.2.1: + /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: @@ -173,32 +247,32 @@ packages: '@jridgewell/trace-mapping': 0.3.18 dev: true - /@babel/code-frame/7.12.11: + /@babel/code-frame@7.12.11: resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} dependencies: '@babel/highlight': 7.18.6 dev: true - /@babel/code-frame/7.21.4: + /@babel/code-frame@7.21.4: resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 dev: true - /@babel/compat-data/7.21.4: + /@babel/compat-data@7.21.4: resolution: {integrity: sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==} engines: {node: '>=6.9.0'} dev: true - /@babel/core/7.21.4: + /@babel/core@7.21.4: resolution: {integrity: sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.21.4 '@babel/generator': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) '@babel/helper-module-transforms': 7.21.2 '@babel/helpers': 7.21.0 '@babel/parser': 7.21.4 @@ -206,7 +280,7 @@ packages: '@babel/traverse': 7.21.4 '@babel/types': 7.21.4 convert-source-map: 1.9.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.0 @@ -214,7 +288,7 @@ packages: - supports-color dev: true - /@babel/generator/7.21.4: + /@babel/generator@7.21.4: resolution: {integrity: sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==} engines: {node: '>=6.9.0'} dependencies: @@ -224,14 +298,14 @@ packages: jsesc: 2.5.2 dev: true - /@babel/helper-annotate-as-pure/7.18.6: + /@babel/helper-annotate-as-pure@7.18.6: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9: + /@babel/helper-builder-binary-assignment-operator-visitor@7.18.9: resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==} engines: {node: '>=6.9.0'} dependencies: @@ -239,7 +313,7 @@ packages: '@babel/types': 7.21.4 dev: true - /@babel/helper-compilation-targets/7.21.4_@babel+core@7.21.4: + /@babel/helper-compilation-targets@7.21.4(@babel/core@7.21.4): resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -253,7 +327,7 @@ packages: semver: 6.3.0 dev: true - /@babel/helper-create-class-features-plugin/7.21.4_@babel+core@7.21.4: + /@babel/helper-create-class-features-plugin@7.21.4(@babel/core@7.21.4): resolution: {integrity: sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -272,7 +346,7 @@ packages: - supports-color dev: true - /@babel/helper-create-regexp-features-plugin/7.21.4_@babel+core@7.21.4: + /@babel/helper-create-regexp-features-plugin@7.21.4(@babel/core@7.21.4): resolution: {integrity: sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -283,15 +357,15 @@ packages: regexpu-core: 5.3.2 dev: true - /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.21.4: + /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.21.4): resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) lodash.debounce: 4.0.8 resolve: 1.22.2 semver: 6.3.0 @@ -299,19 +373,19 @@ packages: - supports-color dev: true - /@babel/helper-environment-visitor/7.18.9: + /@babel/helper-environment-visitor@7.18.9: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-explode-assignable-expression/7.18.6: + /@babel/helper-explode-assignable-expression@7.18.6: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-function-name/7.21.0: + /@babel/helper-function-name@7.21.0: resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} engines: {node: '>=6.9.0'} dependencies: @@ -319,28 +393,28 @@ packages: '@babel/types': 7.21.4 dev: true - /@babel/helper-hoist-variables/7.18.6: + /@babel/helper-hoist-variables@7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-member-expression-to-functions/7.21.0: + /@babel/helper-member-expression-to-functions@7.21.0: resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-module-imports/7.21.4: + /@babel/helper-module-imports@7.21.4: resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-module-transforms/7.21.2: + /@babel/helper-module-transforms@7.21.2: resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} engines: {node: '>=6.9.0'} dependencies: @@ -356,19 +430,19 @@ packages: - supports-color dev: true - /@babel/helper-optimise-call-expression/7.18.6: + /@babel/helper-optimise-call-expression@7.18.6: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-plugin-utils/7.20.2: + /@babel/helper-plugin-utils@7.20.2: resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.21.4: + /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -383,7 +457,7 @@ packages: - supports-color dev: true - /@babel/helper-replace-supers/7.20.7: + /@babel/helper-replace-supers@7.20.7: resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==} engines: {node: '>=6.9.0'} dependencies: @@ -397,43 +471,43 @@ packages: - supports-color dev: true - /@babel/helper-simple-access/7.20.2: + /@babel/helper-simple-access@7.20.2: resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-skip-transparent-expression-wrappers/7.20.0: + /@babel/helper-skip-transparent-expression-wrappers@7.20.0: resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-split-export-declaration/7.18.6: + /@babel/helper-split-export-declaration@7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-string-parser/7.19.4: + /@babel/helper-string-parser@7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-identifier/7.19.1: + /@babel/helper-validator-identifier@7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option/7.21.0: + /@babel/helper-validator-option@7.21.0: resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-wrap-function/7.20.5: + /@babel/helper-wrap-function@7.20.5: resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} engines: {node: '>=6.9.0'} dependencies: @@ -445,7 +519,7 @@ packages: - supports-color dev: true - /@babel/helpers/7.21.0: + /@babel/helpers@7.21.0: resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} engines: {node: '>=6.9.0'} dependencies: @@ -456,7 +530,7 @@ packages: - supports-color dev: true - /@babel/highlight/7.18.6: + /@babel/highlight@7.18.6: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} dependencies: @@ -465,7 +539,7 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser/7.21.4: + /@babel/parser@7.21.4: resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==} engines: {node: '>=6.0.0'} hasBin: true @@ -473,7 +547,7 @@ packages: '@babel/types': 7.21.4 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.21.4: + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -483,7 +557,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.21.4: + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -492,10 +566,10 @@ packages: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.4) dev: true - /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.21.4: + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -504,40 +578,40 @@ packages: '@babel/core': 7.21.4 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.4 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.4 + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.21.4: + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-static-block/7.21.0_@babel+core@7.21.4: + /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.21.4): resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.4 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.4) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.21.4: + /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -545,10 +619,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.4) dev: true - /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.21.4: + /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -556,10 +630,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.4) dev: true - /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.21.4: + /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -567,10 +641,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) dev: true - /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.21.4: + /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} engines: {node: '>=6.9.0'} peerDependencies: @@ -578,10 +652,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) dev: true - /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.21.4: + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -589,10 +663,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) dev: true - /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.21.4: + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -600,10 +674,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) dev: true - /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.21.4: + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -611,13 +685,13 @@ packages: dependencies: '@babel/compat-data': 7.21.4 '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.4 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.4) dev: true - /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.21.4: + /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -625,10 +699,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) dev: true - /@babel/plugin-proposal-optional-chaining/7.21.0_@babel+core@7.21.4: + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.21.4): resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -637,23 +711,23 @@ packages: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) dev: true - /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.21.4: + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object/7.21.0_@babel+core@7.21.4: + /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.21.4): resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -661,25 +735,25 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.4 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.4) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.21.4: + /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.4: + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.4): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -688,7 +762,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.21.4: + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -697,7 +771,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.4: + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.4): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -706,7 +780,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.21.4: + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.4): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -716,7 +790,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.21.4: + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -725,7 +799,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.21.4: + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -734,7 +808,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.21.4: + /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.21.4): resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -744,7 +818,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.21.4: + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.21.4): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -753,7 +827,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.4: + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -762,7 +836,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-jsx/7.21.4_@babel+core@7.21.4: + /@babel/plugin-syntax-jsx@7.21.4(@babel/core@7.21.4): resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -772,7 +846,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.4: + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.4): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -781,7 +855,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.4: + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -790,7 +864,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.4: + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.4): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -799,7 +873,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.4: + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -808,7 +882,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.4: + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -817,7 +891,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.4: + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -826,7 +900,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.21.4: + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.4): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -836,7 +910,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.4: + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.4): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -846,7 +920,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-typescript/7.21.4_@babel+core@7.21.4: + /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.21.4): resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -856,7 +930,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.21.4: + /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -866,7 +940,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.21.4: + /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -875,12 +949,12 @@ packages: '@babel/core': 7.21.4 '@babel/helper-module-imports': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.4 + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.4) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -890,7 +964,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-block-scoping/7.21.0_@babel+core@7.21.4: + /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.4): resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -900,7 +974,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-classes/7.21.0_@babel+core@7.21.4: + /@babel/plugin-transform-classes@7.21.0(@babel/core@7.21.4): resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -908,7 +982,7 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 @@ -920,7 +994,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.21.4: + /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -931,7 +1005,7 @@ packages: '@babel/template': 7.20.7 dev: true - /@babel/plugin-transform-destructuring/7.21.3_@babel+core@7.21.4: + /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.21.4): resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -941,18 +1015,18 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.21.4: + /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -962,7 +1036,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -973,7 +1047,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-for-of/7.21.0_@babel+core@7.21.4: + /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.21.4): resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -983,19 +1057,19 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.21.4: + /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) '@babel/helper-function-name': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-literals/7.18.9_@babel+core@7.21.4: + /@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1005,7 +1079,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1015,7 +1089,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.21.4: + /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.21.4): resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1028,7 +1102,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-commonjs/7.21.2_@babel+core@7.21.4: + /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.21.4): resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1042,7 +1116,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.21.4: + /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.21.4): resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1057,7 +1131,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1070,18 +1144,18 @@ packages: - supports-color dev: true - /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.21.4: + /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.21.4): resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1091,7 +1165,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1104,7 +1178,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-parameters/7.21.3_@babel+core@7.21.4: + /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.21.4): resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1114,7 +1188,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1124,7 +1198,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.21.4: + /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.21.4): resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1135,7 +1209,7 @@ packages: regenerator-transform: 0.15.1 dev: true - /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1145,7 +1219,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1155,7 +1229,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-spread/7.20.7_@babel+core@7.21.4: + /@babel/plugin-transform-spread@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1166,7 +1240,7 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 dev: true - /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1176,7 +1250,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.21.4: + /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1186,7 +1260,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.21.4: + /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1196,7 +1270,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.21.4: + /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.21.4): resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1206,18 +1280,18 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/preset-env/7.21.4_@babel+core@7.21.4: + /@babel/preset-env@7.21.4(@babel/core@7.21.4): resolution: {integrity: sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1225,109 +1299,109 @@ packages: dependencies: '@babel/compat-data': 7.21.4 '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.21.4 - '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.21.4 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-proposal-class-static-block': 7.21.0_@babel+core@7.21.4 - '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.21.4 - '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.21.4 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.21.4 - '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.4 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-proposal-private-property-in-object': 7.21.0_@babel+core@7.21.4 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.4 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.4 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.4 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.21.4 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.4 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.4 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.4 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.4 - '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.21.4 - '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.21.4 - '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-block-scoping': 7.21.0_@babel+core@7.21.4 - '@babel/plugin-transform-classes': 7.21.0_@babel+core@7.21.4 - '@babel/plugin-transform-computed-properties': 7.20.7_@babel+core@7.21.4 - '@babel/plugin-transform-destructuring': 7.21.3_@babel+core@7.21.4 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.21.4 - '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-for-of': 7.21.0_@babel+core@7.21.4 - '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.21.4 - '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.21.4 - '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.21.4 - '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.21.4 - '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.21.4 - '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.21.4 - '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.4 - '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-regenerator': 7.20.5_@babel+core@7.21.4 - '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.21.4 - '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.4 - '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.21.4 - '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.21.4 - '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.21.4 - '@babel/preset-modules': 0.1.5_@babel+core@7.21.4 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.4) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.4) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.21.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.4) + '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.4) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.4) + '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.4) + '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.21.4) + '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.4) + '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.4) + '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.21.4) + '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.21.4) + '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.4) + '@babel/preset-modules': 0.1.5(@babel/core@7.21.4) '@babel/types': 7.21.4 - babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.21.4 - babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.21.4 - babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.21.4 + babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.4) + babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.4) + babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.4) core-js-compat: 3.30.0 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules/0.1.5_@babel+core@7.21.4: + /@babel/preset-modules@0.1.5(@babel/core@7.21.4): resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.4) '@babel/types': 7.21.4 esutils: 2.0.3 dev: true - /@babel/regjsgen/0.8.0: + /@babel/regjsgen@0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: true - /@babel/runtime/7.21.0: + /@babel/runtime@7.21.0: resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 dev: true - /@babel/template/7.20.7: + /@babel/template@7.20.7: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} dependencies: @@ -1336,7 +1410,7 @@ packages: '@babel/types': 7.21.4 dev: true - /@babel/traverse/7.21.4: + /@babel/traverse@7.21.4: resolution: {integrity: sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==} engines: {node: '>=6.9.0'} dependencies: @@ -1348,13 +1422,13 @@ packages: '@babel/helper-split-export-declaration': 7.18.6 '@babel/parser': 7.21.4 '@babel/types': 7.21.4 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types/7.21.4: + /@babel/types@7.21.4: resolution: {integrity: sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==} engines: {node: '>=6.9.0'} dependencies: @@ -1363,24 +1437,36 @@ packages: to-fast-properties: 2.0.0 dev: true - /@bcoe/v8-coverage/0.2.3: + /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /@bundled-es-modules/cookie/2.0.0: + /@bundled-es-modules/cookie@2.0.0: resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==} dependencies: cookie: 0.5.0 dev: false - /@commitlint/cli/16.3.0_@swc+core@1.3.49: + /@bundled-es-modules/js-levenshtein@2.0.0: + resolution: {integrity: sha512-KSVIngpi1QztKcUxXr50ru6JCK3zO2TZuax92MdupxosHAZMJrPWkb9U4tyVg878+IBYbsplW1yEyJE3s10cFg==} + dependencies: + js-levenshtein: 1.1.6 + dev: false + + /@bundled-es-modules/statuses@1.0.1: + resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} + dependencies: + statuses: 2.0.1 + dev: false + + /@commitlint/cli@16.3.0(@swc/core@1.3.49): resolution: {integrity: sha512-P+kvONlfsuTMnxSwWE1H+ZcPMY3STFaHb2kAacsqoIkNx66O0T7sTpBxpxkMrFPyhkJiLJnJWMhk4bbvYD3BMA==} engines: {node: '>=v12'} hasBin: true dependencies: '@commitlint/format': 16.2.1 '@commitlint/lint': 16.2.4 - '@commitlint/load': 16.3.0_@swc+core@1.3.49 + '@commitlint/load': 16.3.0(@swc/core@1.3.49) '@commitlint/read': 16.2.1 '@commitlint/types': 16.2.1 lodash: 4.17.21 @@ -1392,14 +1478,14 @@ packages: - '@swc/wasm' dev: true - /@commitlint/config-conventional/16.2.4: + /@commitlint/config-conventional@16.2.4: resolution: {integrity: sha512-av2UQJa3CuE5P0dzxj/o/B9XVALqYzEViHrMXtDrW9iuflrqCStWBAioijppj9URyz6ONpohJKAtSdgAOE0gkA==} engines: {node: '>=v12'} dependencies: conventional-changelog-conventionalcommits: 4.6.3 dev: true - /@commitlint/config-validator/16.2.1: + /@commitlint/config-validator@16.2.1: resolution: {integrity: sha512-hogSe0WGg7CKmp4IfNbdNES3Rq3UEI4XRPB8JL4EPgo/ORq5nrGTVzxJh78omibNuB8Ho4501Czb1Er1MoDWpw==} engines: {node: '>=v12'} dependencies: @@ -1407,7 +1493,7 @@ packages: ajv: 6.12.6 dev: true - /@commitlint/config-validator/17.4.4: + /@commitlint/config-validator@17.4.4: resolution: {integrity: sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==} engines: {node: '>=v14'} dependencies: @@ -1416,7 +1502,7 @@ packages: dev: true optional: true - /@commitlint/ensure/16.2.1: + /@commitlint/ensure@16.2.1: resolution: {integrity: sha512-/h+lBTgf1r5fhbDNHOViLuej38i3rZqTQnBTk+xEg+ehOwQDXUuissQ5GsYXXqI5uGy+261ew++sT4EA3uBJ+A==} engines: {node: '>=v12'} dependencies: @@ -1424,18 +1510,18 @@ packages: lodash: 4.17.21 dev: true - /@commitlint/execute-rule/16.2.1: + /@commitlint/execute-rule@16.2.1: resolution: {integrity: sha512-oSls82fmUTLM6cl5V3epdVo4gHhbmBFvCvQGHBRdQ50H/690Uq1Dyd7hXMuKITCIdcnr9umyDkr8r5C6HZDF3g==} engines: {node: '>=v12'} dev: true - /@commitlint/execute-rule/17.4.0: + /@commitlint/execute-rule@17.4.0: resolution: {integrity: sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==} engines: {node: '>=v14'} dev: true optional: true - /@commitlint/format/16.2.1: + /@commitlint/format@16.2.1: resolution: {integrity: sha512-Yyio9bdHWmNDRlEJrxHKglamIk3d6hC0NkEUW6Ti6ipEh2g0BAhy8Od6t4vLhdZRa1I2n+gY13foy+tUgk0i1Q==} engines: {node: '>=v12'} dependencies: @@ -1443,7 +1529,7 @@ packages: chalk: 4.1.1 dev: true - /@commitlint/is-ignored/16.2.4: + /@commitlint/is-ignored@16.2.4: resolution: {integrity: sha512-Lxdq9aOAYCOOOjKi58ulbwK/oBiiKz+7Sq0+/SpFIEFwhHkIVugvDvWjh2VRBXmRC/x5lNcjDcYEwS/uYUvlYQ==} engines: {node: '>=v12'} dependencies: @@ -1451,7 +1537,7 @@ packages: semver: 7.3.7 dev: true - /@commitlint/lint/16.2.4: + /@commitlint/lint@16.2.4: resolution: {integrity: sha512-AUDuwOxb2eGqsXbTMON3imUGkc1jRdtXrbbohiLSCSk3jFVXgJLTMaEcr39pR00N8nE9uZ+V2sYaiILByZVmxQ==} engines: {node: '>=v12'} dependencies: @@ -1461,7 +1547,7 @@ packages: '@commitlint/types': 16.2.1 dev: true - /@commitlint/load/16.3.0_@swc+core@1.3.49: + /@commitlint/load@16.3.0(@swc/core@1.3.49): resolution: {integrity: sha512-3tykjV/iwbkv2FU9DG+NZ/JqmP0Nm3b7aDwgCNQhhKV5P74JAuByULkafnhn+zsFGypG1qMtI5u+BZoa9APm0A==} engines: {node: '>=v12'} dependencies: @@ -1472,7 +1558,7 @@ packages: '@types/node': 18.15.11 chalk: 4.1.1 cosmiconfig: 7.1.0 - cosmiconfig-typescript-loader: 2.0.2_faublg25f7qpbcz6w4cw6yyzse + cosmiconfig-typescript-loader: 2.0.2(@swc/core@1.3.49)(@types/node@18.15.11)(cosmiconfig@7.1.0)(typescript@4.9.5) lodash: 4.17.21 resolve-from: 5.0.0 typescript: 4.9.5 @@ -1481,7 +1567,7 @@ packages: - '@swc/wasm' dev: true - /@commitlint/load/17.5.0_@swc+core@1.3.49: + /@commitlint/load@17.5.0(@swc/core@1.3.49): resolution: {integrity: sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q==} engines: {node: '>=v14'} requiresBuild: true @@ -1493,12 +1579,12 @@ packages: '@types/node': 18.15.11 chalk: 4.1.1 cosmiconfig: 8.1.3 - cosmiconfig-typescript-loader: 4.3.0_zulaepqzabcjiyzbkdbfeduf6u + cosmiconfig-typescript-loader: 4.3.0(@types/node@18.15.11)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@5.0.4) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e + ts-node: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4) typescript: 5.0.4 transitivePeerDependencies: - '@swc/core' @@ -1506,12 +1592,12 @@ packages: dev: true optional: true - /@commitlint/message/16.2.1: + /@commitlint/message@16.2.1: resolution: {integrity: sha512-2eWX/47rftViYg7a3axYDdrgwKv32mxbycBJT6OQY/MJM7SUfYNYYvbMFOQFaA4xIVZt7t2Alyqslbl6blVwWw==} engines: {node: '>=v12'} dev: true - /@commitlint/parse/16.2.1: + /@commitlint/parse@16.2.1: resolution: {integrity: sha512-2NP2dDQNL378VZYioLrgGVZhWdnJO4nAxQl5LXwYb08nEcN+cgxHN1dJV8OLJ5uxlGJtDeR8UZZ1mnQ1gSAD/g==} engines: {node: '>=v12'} dependencies: @@ -1520,7 +1606,7 @@ packages: conventional-commits-parser: 3.2.4 dev: true - /@commitlint/read/16.2.1: + /@commitlint/read@16.2.1: resolution: {integrity: sha512-tViXGuaxLTrw2r7PiYMQOFA2fueZxnnt0lkOWqKyxT+n2XdEMGYcI9ID5ndJKXnfPGPppD0w/IItKsIXlZ+alw==} engines: {node: '>=v12'} dependencies: @@ -1530,7 +1616,7 @@ packages: git-raw-commits: 2.0.11 dev: true - /@commitlint/resolve-extends/16.2.1: + /@commitlint/resolve-extends@16.2.1: resolution: {integrity: sha512-NbbCMPKTFf2J805kwfP9EO+vV+XvnaHRcBy6ud5dF35dxMsvdJqke54W3XazXF1ZAxC4a3LBy4i/GNVBAthsEg==} engines: {node: '>=v12'} dependencies: @@ -1542,7 +1628,7 @@ packages: resolve-global: 1.0.0 dev: true - /@commitlint/resolve-extends/17.4.4: + /@commitlint/resolve-extends@17.4.4: resolution: {integrity: sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==} engines: {node: '>=v14'} dependencies: @@ -1555,7 +1641,7 @@ packages: dev: true optional: true - /@commitlint/rules/16.2.4: + /@commitlint/rules@16.2.4: resolution: {integrity: sha512-rK5rNBIN2ZQNQK+I6trRPK3dWa0MtaTN4xnwOma1qxa4d5wQMQJtScwTZjTJeallFxhOgbNOgr48AMHkdounVg==} engines: {node: '>=v12'} dependencies: @@ -1566,26 +1652,26 @@ packages: execa: 5.1.1 dev: true - /@commitlint/to-lines/16.2.1: + /@commitlint/to-lines@16.2.1: resolution: {integrity: sha512-9/VjpYj5j1QeY3eiog1zQWY6axsdWAc0AonUUfyZ7B0MVcRI0R56YsHAfzF6uK/g/WwPZaoe4Lb1QCyDVnpVaQ==} engines: {node: '>=v12'} dev: true - /@commitlint/top-level/16.2.1: + /@commitlint/top-level@16.2.1: resolution: {integrity: sha512-lS6GSieHW9y6ePL73ied71Z9bOKyK+Ib9hTkRsB8oZFAyQZcyRwq2w6nIa6Fngir1QW51oKzzaXfJL94qwImyw==} engines: {node: '>=v12'} dependencies: find-up: 5.0.0 dev: true - /@commitlint/types/16.2.1: + /@commitlint/types@16.2.1: resolution: {integrity: sha512-7/z7pA7BM0i8XvMSBynO7xsB3mVQPUZbVn6zMIlp/a091XJ3qAXRXc+HwLYhiIdzzS5fuxxNIHZMGHVD4HJxdA==} engines: {node: '>=v12'} dependencies: chalk: 4.1.1 dev: true - /@commitlint/types/17.4.4: + /@commitlint/types@17.4.4: resolution: {integrity: sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==} engines: {node: '>=v14'} dependencies: @@ -1593,50 +1679,50 @@ packages: dev: true optional: true - /@cspotcode/source-map-support/0.8.1: + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@esbuild/android-arm/0.16.17: - resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} + /@esbuild/android-arm64@0.16.17: + resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-arm/0.17.16: - resolution: {integrity: sha512-baLqRpLe4JnKrUXLJChoTN0iXZH7El/mu58GE3WIA6/H834k0XWvLRmGLG8y8arTRS9hJJibPnF0tiGhmWeZgw==} + /@esbuild/android-arm64@0.17.16: + resolution: {integrity: sha512-QX48qmsEZW+gcHgTmAj+x21mwTz8MlYQBnzF6861cNdQGvj2jzzFjqH0EBabrIa/WVZ2CHolwMoqxVryqKt8+Q==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-arm64/0.16.17: - resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} + /@esbuild/android-arm@0.16.17: + resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-arm64/0.17.16: - resolution: {integrity: sha512-QX48qmsEZW+gcHgTmAj+x21mwTz8MlYQBnzF6861cNdQGvj2jzzFjqH0EBabrIa/WVZ2CHolwMoqxVryqKt8+Q==} + /@esbuild/android-arm@0.17.16: + resolution: {integrity: sha512-baLqRpLe4JnKrUXLJChoTN0iXZH7El/mu58GE3WIA6/H834k0XWvLRmGLG8y8arTRS9hJJibPnF0tiGhmWeZgw==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-x64/0.16.17: + /@esbuild/android-x64@0.16.17: resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} engines: {node: '>=12'} cpu: [x64] @@ -1645,7 +1731,7 @@ packages: dev: true optional: true - /@esbuild/android-x64/0.17.16: + /@esbuild/android-x64@0.17.16: resolution: {integrity: sha512-G4wfHhrrz99XJgHnzFvB4UwwPxAWZaZBOFXh+JH1Duf1I4vIVfuYY9uVLpx4eiV2D/Jix8LJY+TAdZ3i40tDow==} engines: {node: '>=12'} cpu: [x64] @@ -1654,7 +1740,7 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64/0.16.17: + /@esbuild/darwin-arm64@0.16.17: resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} engines: {node: '>=12'} cpu: [arm64] @@ -1663,7 +1749,7 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64/0.17.16: + /@esbuild/darwin-arm64@0.17.16: resolution: {integrity: sha512-/Ofw8UXZxuzTLsNFmz1+lmarQI6ztMZ9XktvXedTbt3SNWDn0+ODTwxExLYQ/Hod91EZB4vZPQJLoqLF0jvEzA==} engines: {node: '>=12'} cpu: [arm64] @@ -1672,7 +1758,7 @@ packages: dev: true optional: true - /@esbuild/darwin-x64/0.16.17: + /@esbuild/darwin-x64@0.16.17: resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} engines: {node: '>=12'} cpu: [x64] @@ -1681,7 +1767,7 @@ packages: dev: true optional: true - /@esbuild/darwin-x64/0.17.16: + /@esbuild/darwin-x64@0.17.16: resolution: {integrity: sha512-SzBQtCV3Pdc9kyizh36Ol+dNVhkDyIrGb/JXZqFq8WL37LIyrXU0gUpADcNV311sCOhvY+f2ivMhb5Tuv8nMOQ==} engines: {node: '>=12'} cpu: [x64] @@ -1690,7 +1776,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64/0.16.17: + /@esbuild/freebsd-arm64@0.16.17: resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} engines: {node: '>=12'} cpu: [arm64] @@ -1699,7 +1785,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64/0.17.16: + /@esbuild/freebsd-arm64@0.17.16: resolution: {integrity: sha512-ZqftdfS1UlLiH1DnS2u3It7l4Bc3AskKeu+paJSfk7RNOMrOxmeFDhLTMQqMxycP1C3oj8vgkAT6xfAuq7ZPRA==} engines: {node: '>=12'} cpu: [arm64] @@ -1708,7 +1794,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64/0.16.17: + /@esbuild/freebsd-x64@0.16.17: resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} engines: {node: '>=12'} cpu: [x64] @@ -1717,7 +1803,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64/0.17.16: + /@esbuild/freebsd-x64@0.17.16: resolution: {integrity: sha512-rHV6zNWW1tjgsu0dKQTX9L0ByiJHHLvQKrWtnz8r0YYJI27FU3Xu48gpK2IBj1uCSYhJ+pEk6Y0Um7U3rIvV8g==} engines: {node: '>=12'} cpu: [x64] @@ -1726,43 +1812,43 @@ packages: dev: true optional: true - /@esbuild/linux-arm/0.16.17: - resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} + /@esbuild/linux-arm64@0.16.17: + resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-arm/0.17.16: - resolution: {integrity: sha512-n4O8oVxbn7nl4+m+ISb0a68/lcJClIbaGAoXwqeubj/D1/oMMuaAXmJVfFlRjJLu/ZvHkxoiFJnmbfp4n8cdSw==} + /@esbuild/linux-arm64@0.17.16: + resolution: {integrity: sha512-8yoZhGkU6aHu38WpaM4HrRLTFc7/VVD9Q2SvPcmIQIipQt2I/GMTZNdEHXoypbbGao5kggLcxg0iBKjo0SQYKA==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-arm64/0.16.17: - resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} + /@esbuild/linux-arm@0.16.17: + resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-arm64/0.17.16: - resolution: {integrity: sha512-8yoZhGkU6aHu38WpaM4HrRLTFc7/VVD9Q2SvPcmIQIipQt2I/GMTZNdEHXoypbbGao5kggLcxg0iBKjo0SQYKA==} + /@esbuild/linux-arm@0.17.16: + resolution: {integrity: sha512-n4O8oVxbn7nl4+m+ISb0a68/lcJClIbaGAoXwqeubj/D1/oMMuaAXmJVfFlRjJLu/ZvHkxoiFJnmbfp4n8cdSw==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-ia32/0.16.17: + /@esbuild/linux-ia32@0.16.17: resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} engines: {node: '>=12'} cpu: [ia32] @@ -1771,7 +1857,7 @@ packages: dev: true optional: true - /@esbuild/linux-ia32/0.17.16: + /@esbuild/linux-ia32@0.17.16: resolution: {integrity: sha512-9ZBjlkdaVYxPNO8a7OmzDbOH9FMQ1a58j7Xb21UfRU29KcEEU3VTHk+Cvrft/BNv0gpWJMiiZ/f4w0TqSP0gLA==} engines: {node: '>=12'} cpu: [ia32] @@ -1780,7 +1866,7 @@ packages: dev: true optional: true - /@esbuild/linux-loong64/0.16.17: + /@esbuild/linux-loong64@0.16.17: resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==} engines: {node: '>=12'} cpu: [loong64] @@ -1789,7 +1875,7 @@ packages: dev: true optional: true - /@esbuild/linux-loong64/0.17.16: + /@esbuild/linux-loong64@0.17.16: resolution: {integrity: sha512-TIZTRojVBBzdgChY3UOG7BlPhqJz08AL7jdgeeu+kiObWMFzGnQD7BgBBkWRwOtKR1i2TNlO7YK6m4zxVjjPRQ==} engines: {node: '>=12'} cpu: [loong64] @@ -1798,7 +1884,7 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el/0.16.17: + /@esbuild/linux-mips64el@0.16.17: resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} engines: {node: '>=12'} cpu: [mips64el] @@ -1807,7 +1893,7 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el/0.17.16: + /@esbuild/linux-mips64el@0.17.16: resolution: {integrity: sha512-UPeRuFKCCJYpBbIdczKyHLAIU31GEm0dZl1eMrdYeXDH+SJZh/i+2cAmD3A1Wip9pIc5Sc6Kc5cFUrPXtR0XHA==} engines: {node: '>=12'} cpu: [mips64el] @@ -1816,7 +1902,7 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64/0.16.17: + /@esbuild/linux-ppc64@0.16.17: resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} engines: {node: '>=12'} cpu: [ppc64] @@ -1825,7 +1911,7 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64/0.17.16: + /@esbuild/linux-ppc64@0.17.16: resolution: {integrity: sha512-io6yShgIEgVUhExJejJ21xvO5QtrbiSeI7vYUnr7l+v/O9t6IowyhdiYnyivX2X5ysOVHAuyHW+Wyi7DNhdw6Q==} engines: {node: '>=12'} cpu: [ppc64] @@ -1834,7 +1920,7 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64/0.16.17: + /@esbuild/linux-riscv64@0.16.17: resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} engines: {node: '>=12'} cpu: [riscv64] @@ -1843,7 +1929,7 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64/0.17.16: + /@esbuild/linux-riscv64@0.17.16: resolution: {integrity: sha512-WhlGeAHNbSdG/I2gqX2RK2gfgSNwyJuCiFHMc8s3GNEMMHUI109+VMBfhVqRb0ZGzEeRiibi8dItR3ws3Lk+cA==} engines: {node: '>=12'} cpu: [riscv64] @@ -1852,7 +1938,7 @@ packages: dev: true optional: true - /@esbuild/linux-s390x/0.16.17: + /@esbuild/linux-s390x@0.16.17: resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} engines: {node: '>=12'} cpu: [s390x] @@ -1861,7 +1947,7 @@ packages: dev: true optional: true - /@esbuild/linux-s390x/0.17.16: + /@esbuild/linux-s390x@0.17.16: resolution: {integrity: sha512-gHRReYsJtViir63bXKoFaQ4pgTyah4ruiMRQ6im9YZuv+gp3UFJkNTY4sFA73YDynmXZA6hi45en4BGhNOJUsw==} engines: {node: '>=12'} cpu: [s390x] @@ -1870,7 +1956,7 @@ packages: dev: true optional: true - /@esbuild/linux-x64/0.16.17: + /@esbuild/linux-x64@0.16.17: resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} engines: {node: '>=12'} cpu: [x64] @@ -1879,7 +1965,7 @@ packages: dev: true optional: true - /@esbuild/linux-x64/0.17.16: + /@esbuild/linux-x64@0.17.16: resolution: {integrity: sha512-mfiiBkxEbUHvi+v0P+TS7UnA9TeGXR48aK4XHkTj0ZwOijxexgMF01UDFaBX7Q6CQsB0d+MFNv9IiXbIHTNd4g==} engines: {node: '>=12'} cpu: [x64] @@ -1888,7 +1974,7 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64/0.16.17: + /@esbuild/netbsd-x64@0.16.17: resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} engines: {node: '>=12'} cpu: [x64] @@ -1897,7 +1983,7 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64/0.17.16: + /@esbuild/netbsd-x64@0.17.16: resolution: {integrity: sha512-n8zK1YRDGLRZfVcswcDMDM0j2xKYLNXqei217a4GyBxHIuPMGrrVuJ+Ijfpr0Kufcm7C1k/qaIrGy6eG7wvgmA==} engines: {node: '>=12'} cpu: [x64] @@ -1906,7 +1992,7 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64/0.16.17: + /@esbuild/openbsd-x64@0.16.17: resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} engines: {node: '>=12'} cpu: [x64] @@ -1915,7 +2001,7 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64/0.17.16: + /@esbuild/openbsd-x64@0.17.16: resolution: {integrity: sha512-lEEfkfsUbo0xC47eSTBqsItXDSzwzwhKUSsVaVjVji07t8+6KA5INp2rN890dHZeueXJAI8q0tEIfbwVRYf6Ew==} engines: {node: '>=12'} cpu: [x64] @@ -1924,7 +2010,7 @@ packages: dev: true optional: true - /@esbuild/sunos-x64/0.16.17: + /@esbuild/sunos-x64@0.16.17: resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} engines: {node: '>=12'} cpu: [x64] @@ -1933,7 +2019,7 @@ packages: dev: true optional: true - /@esbuild/sunos-x64/0.17.16: + /@esbuild/sunos-x64@0.17.16: resolution: {integrity: sha512-jlRjsuvG1fgGwnE8Afs7xYDnGz0dBgTNZfgCK6TlvPH3Z13/P5pi6I57vyLE8qZYLrGVtwcm9UbUx1/mZ8Ukag==} engines: {node: '>=12'} cpu: [x64] @@ -1942,7 +2028,7 @@ packages: dev: true optional: true - /@esbuild/win32-arm64/0.16.17: + /@esbuild/win32-arm64@0.16.17: resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} engines: {node: '>=12'} cpu: [arm64] @@ -1951,7 +2037,7 @@ packages: dev: true optional: true - /@esbuild/win32-arm64/0.17.16: + /@esbuild/win32-arm64@0.17.16: resolution: {integrity: sha512-TzoU2qwVe2boOHl/3KNBUv2PNUc38U0TNnzqOAcgPiD/EZxT2s736xfC2dYQbszAwo4MKzzwBV0iHjhfjxMimg==} engines: {node: '>=12'} cpu: [arm64] @@ -1960,7 +2046,7 @@ packages: dev: true optional: true - /@esbuild/win32-ia32/0.16.17: + /@esbuild/win32-ia32@0.16.17: resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} engines: {node: '>=12'} cpu: [ia32] @@ -1969,7 +2055,7 @@ packages: dev: true optional: true - /@esbuild/win32-ia32/0.17.16: + /@esbuild/win32-ia32@0.17.16: resolution: {integrity: sha512-B8b7W+oo2yb/3xmwk9Vc99hC9bNolvqjaTZYEfMQhzdpBsjTvZBlXQ/teUE55Ww6sg//wlcDjOaqldOKyigWdA==} engines: {node: '>=12'} cpu: [ia32] @@ -1978,7 +2064,7 @@ packages: dev: true optional: true - /@esbuild/win32-x64/0.16.17: + /@esbuild/win32-x64@0.16.17: resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} engines: {node: '>=12'} cpu: [x64] @@ -1987,7 +2073,7 @@ packages: dev: true optional: true - /@esbuild/win32-x64/0.17.16: + /@esbuild/win32-x64@0.17.16: resolution: {integrity: sha512-xJ7OH/nanouJO9pf03YsL9NAFQBHd8AqfrQd7Pf5laGyyTt/gToul6QYOA/i5i/q8y9iaM5DQFNTgpi995VkOg==} engines: {node: '>=12'} cpu: [x64] @@ -1996,7 +2082,7 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils/4.4.0_eslint@7.32.0: + /@eslint-community/eslint-utils@4.4.0(eslint@7.32.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2006,17 +2092,17 @@ packages: eslint-visitor-keys: 3.4.0 dev: true - /@eslint-community/regexpp/4.5.0: + /@eslint-community/regexpp@4.5.0: resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc/0.4.3: + /@eslint/eslintrc@0.4.3: resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) espree: 7.3.1 globals: 13.20.0 ignore: 4.0.6 @@ -2028,22 +2114,22 @@ packages: - supports-color dev: true - /@humanwhocodes/config-array/0.5.0: + /@humanwhocodes/config-array@0.5.0: resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color dev: true - /@humanwhocodes/object-schema/1.2.1: + /@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@istanbuljs/load-nyc-config/1.1.0: + /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} dependencies: @@ -2054,12 +2140,12 @@ packages: resolve-from: 5.0.0 dev: true - /@istanbuljs/schema/0.1.3: + /@istanbuljs/schema@0.1.3: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} dev: true - /@jest/console/29.5.0: + /@jest/console@29.5.0: resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2071,7 +2157,7 @@ packages: slash: 3.0.0 dev: true - /@jest/core/29.5.0_ts-node@10.9.1: + /@jest/core@29.5.0(ts-node@10.9.1): resolution: {integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2092,7 +2178,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.5.0 - jest-config: 29.5.0_rrli7kzx2akox3oq6aahu3rvje + jest-config: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) jest-haste-map: 29.5.0 jest-message-util: 29.5.0 jest-regex-util: 29.4.3 @@ -2113,14 +2199,14 @@ packages: - ts-node dev: true - /@jest/create-cache-key-function/27.5.1: + /@jest/create-cache-key-function@27.5.1: resolution: {integrity: sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 dev: true - /@jest/environment/29.5.0: + /@jest/environment@29.5.0: resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2130,14 +2216,14 @@ packages: jest-mock: 29.5.0 dev: true - /@jest/expect-utils/29.5.0: + /@jest/expect-utils@29.5.0: resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.3 dev: true - /@jest/expect/29.5.0: + /@jest/expect@29.5.0: resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2147,7 +2233,7 @@ packages: - supports-color dev: true - /@jest/fake-timers/29.5.0: + /@jest/fake-timers@29.5.0: resolution: {integrity: sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2159,7 +2245,7 @@ packages: jest-util: 29.5.0 dev: true - /@jest/globals/29.5.0: + /@jest/globals@29.5.0: resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2171,7 +2257,7 @@ packages: - supports-color dev: true - /@jest/reporters/29.5.0: + /@jest/reporters@29.5.0: resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2208,14 +2294,14 @@ packages: - supports-color dev: true - /@jest/schemas/29.4.3: + /@jest/schemas@29.4.3: resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@sinclair/typebox': 0.25.24 dev: true - /@jest/source-map/29.4.3: + /@jest/source-map@29.4.3: resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2224,7 +2310,7 @@ packages: graceful-fs: 4.2.11 dev: true - /@jest/test-result/29.5.0: + /@jest/test-result@29.5.0: resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2234,7 +2320,7 @@ packages: collect-v8-coverage: 1.0.1 dev: true - /@jest/test-sequencer/29.5.0: + /@jest/test-sequencer@29.5.0: resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2244,7 +2330,7 @@ packages: slash: 3.0.0 dev: true - /@jest/transform/29.5.0: + /@jest/transform@29.5.0: resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2267,7 +2353,7 @@ packages: - supports-color dev: true - /@jest/types/27.5.1: + /@jest/types@27.5.1: resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: @@ -2278,7 +2364,7 @@ packages: chalk: 4.1.1 dev: true - /@jest/types/29.5.0: + /@jest/types@29.5.0: resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2290,7 +2376,7 @@ packages: chalk: 4.1.1 dev: true - /@jridgewell/gen-mapping/0.3.3: + /@jridgewell/gen-mapping@0.3.3: resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} dependencies: @@ -2299,56 +2385,56 @@ packages: '@jridgewell/trace-mapping': 0.3.18 dev: true - /@jridgewell/resolve-uri/3.1.0: + /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/resolve-uri/3.1.1: + /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/set-array/1.1.2: + /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/source-map/0.3.3: + /@jridgewell/source-map@0.3.3: resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} dependencies: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 dev: true - /@jridgewell/sourcemap-codec/1.4.14: + /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true - /@jridgewell/sourcemap-codec/1.4.15: + /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true - /@jridgewell/trace-mapping/0.3.18: + /@jridgewell/trace-mapping@0.3.18: resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@jridgewell/trace-mapping/0.3.9: + /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /@mswjs/cookies/1.0.0: + /@mswjs/cookies@1.0.0: resolution: {integrity: sha512-TdXoBdI+h/EDTsVLCX/34s4+9U0sWi92qFnIGUEikpMCSKLhBeujovyYVSoORNbYgsBH5ga7/tfxyWcEZAxiYA==} engines: {node: '>=14'} dev: false - /@mswjs/interceptors/0.22.12: + /@mswjs/interceptors@0.22.12: resolution: {integrity: sha512-SHzP8HCsgjpmFI+OXWIYSdDQBnNCmcb3TQOETRMWHaNjXFGt2EwniJWQXMfMRrmgdvyb8izGGhFArrBAx+2KSg==} engines: {node: '>=18'} dependencies: @@ -2360,7 +2446,7 @@ packages: strict-event-emitter: 0.5.0 dev: false - /@nodelib/fs.scandir/2.1.5: + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} dependencies: @@ -2368,12 +2454,12 @@ packages: run-parallel: 1.2.0 dev: true - /@nodelib/fs.stat/2.0.5: + /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} dev: true - /@nodelib/fs.walk/1.2.8: + /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} dependencies: @@ -2381,25 +2467,25 @@ packages: fastq: 1.15.0 dev: true - /@open-draft/deferred-promise/2.1.0: + /@open-draft/deferred-promise@2.1.0: resolution: {integrity: sha512-Rzd5JrXZX8zErHzgcGyngh4fmEbSHqTETdGj9rXtejlqMIgXFlyKBA7Jn1Xp0Ls0M0Y22+xHcWiEzbmdWl0BOA==} dev: false - /@open-draft/logger/0.3.0: + /@open-draft/logger@0.3.0: resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} dependencies: is-node-process: 1.2.0 outvariant: 1.4.0 dev: false - /@open-draft/test-server/0.4.2: + /@open-draft/test-server@0.4.2: resolution: {integrity: sha512-J9wbdQkPx5WKcDNtgfnXsx5ew4UJd6BZyGr89YlHeaUkOShkO2iO5QIyCCsG4qpjIvr2ZTkEYJA9ujOXXyO6Pg==} dependencies: '@types/body-parser': 1.19.2 '@types/cors': 2.8.13 '@types/express': 4.17.17 cors: 2.8.5 - express: 4.18.2 + express: 4.18.2(supports-color@6.1.0) outvariant: 1.4.0 socket.io: 4.6.1 transitivePeerDependencies: @@ -2408,10 +2494,10 @@ packages: - utf-8-validate dev: true - /@open-draft/until/2.1.0: + /@open-draft/until@2.1.0: resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - /@ossjs/release/0.4.0: + /@ossjs/release@0.4.0: resolution: {integrity: sha512-cfW+gk3GdVqjrawkAG8q6MXPmTJouwwPegmBAVNvYvKq/tKQHgluxiueTlNTdJRryI76rpe6y5+EXlHdisrwdg==} hasBin: true dependencies: @@ -2440,7 +2526,7 @@ packages: - encoding dev: true - /@playwright/test/1.32.3: + /@playwright/test@1.32.3: resolution: {integrity: sha512-BvWNvK0RfBriindxhLVabi8BRe3X0J9EVjKlcmhxjg4giWBD/xleLcg2dz7Tx0agu28rczjNIPQWznwzDwVsZQ==} engines: {node: '>=14'} hasBin: true @@ -2451,13 +2537,13 @@ packages: fsevents: 2.3.2 dev: true - /@rollup/plugin-node-resolve/13.3.0_rollup@2.79.1: + /@rollup/plugin-node-resolve@13.3.0(rollup@2.79.1): resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==} engines: {node: '>= 10.0.0'} peerDependencies: rollup: ^2.42.0 dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.79.1 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) '@types/resolve': 1.17.1 deepmerge: 4.3.1 is-builtin-module: 3.2.1 @@ -2466,7 +2552,7 @@ packages: rollup: 2.79.1 dev: true - /@rollup/pluginutils/3.1.0_rollup@2.79.1: + /@rollup/pluginutils@3.1.0(rollup@2.79.1): resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} engines: {node: '>= 8.0.0'} peerDependencies: @@ -2478,27 +2564,27 @@ packages: rollup: 2.79.1 dev: true - /@sinclair/typebox/0.25.24: + /@sinclair/typebox@0.25.24: resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} dev: true - /@sinonjs/commons/2.0.0: + /@sinonjs/commons@2.0.0: resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} dependencies: type-detect: 4.0.8 dev: true - /@sinonjs/fake-timers/10.0.2: + /@sinonjs/fake-timers@10.0.2: resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} dependencies: '@sinonjs/commons': 2.0.0 dev: true - /@socket.io/component-emitter/3.1.0: + /@socket.io/component-emitter@3.1.0: resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} dev: true - /@swc/core-darwin-arm64/1.3.49: + /@swc/core-darwin-arm64@1.3.49: resolution: {integrity: sha512-g7aIfXh6uPHmhLXdjXQq5t3HAyS/EdvujasW1DIS5k8UqOBaSoCcSGtLIjzcLv3KujqNfYcm118E+12H0nY6fQ==} engines: {node: '>=10'} cpu: [arm64] @@ -2507,7 +2593,7 @@ packages: dev: true optional: true - /@swc/core-darwin-x64/1.3.49: + /@swc/core-darwin-x64@1.3.49: resolution: {integrity: sha512-eSIxVX0YDw40Bre5sAx2BV3DzdIGzmQvCf2yiBvLqiiL6GC0mmuDeWbUCAzdUX6fJ6FUVEBMUVqNOc9oJ2/d5w==} engines: {node: '>=10'} cpu: [x64] @@ -2516,7 +2602,7 @@ packages: dev: true optional: true - /@swc/core-linux-arm-gnueabihf/1.3.49: + /@swc/core-linux-arm-gnueabihf@1.3.49: resolution: {integrity: sha512-8mj3IcRVr/OJY0mVITz6Z5osNAMJK5GiKDaZ+3QejPLbl6aiu4sH4GmTHDRN14RnaVXOpecsGcUoQmNoNa3u3w==} engines: {node: '>=10'} cpu: [arm] @@ -2525,7 +2611,7 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-gnu/1.3.49: + /@swc/core-linux-arm64-gnu@1.3.49: resolution: {integrity: sha512-Rmg9xw6tmpOpf6GKKjpHQGmjfHzqSths5ebI2ahrHlhekzZF2HYmPkVw4bHda8Bja6mbaw8FVBgBHjPU8mMeDA==} engines: {node: '>=10'} cpu: [arm64] @@ -2534,7 +2620,7 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-musl/1.3.49: + /@swc/core-linux-arm64-musl@1.3.49: resolution: {integrity: sha512-nlKPYMogAI3Aak6Mlkag8/2AlHAZ/DpH7RjhfMazsaGhD/sQOmYdyY9Al69ejpa419YJuREeeeLoojFlSsd30g==} engines: {node: '>=10'} cpu: [arm64] @@ -2543,7 +2629,7 @@ packages: dev: true optional: true - /@swc/core-linux-x64-gnu/1.3.49: + /@swc/core-linux-x64-gnu@1.3.49: resolution: {integrity: sha512-QOyeJQ6NVi73SJcizbwvIZTiGA/N+BxX9liRrvibumaQmRh8fWjJiLNsv3ODSHeuonak7E8Bf7a7NnSTyu48Mw==} engines: {node: '>=10'} cpu: [x64] @@ -2552,7 +2638,7 @@ packages: dev: true optional: true - /@swc/core-linux-x64-musl/1.3.49: + /@swc/core-linux-x64-musl@1.3.49: resolution: {integrity: sha512-WlDMz+SOpYC9O/ZBUw1oiyWI7HyUCMlf/HS8Fy/kRI3eGoGCUxVTCJ1mP57GdQr4Wg32Y/ZpO2KSNQFWnT8mAw==} engines: {node: '>=10'} cpu: [x64] @@ -2561,7 +2647,7 @@ packages: dev: true optional: true - /@swc/core-win32-arm64-msvc/1.3.49: + /@swc/core-win32-arm64-msvc@1.3.49: resolution: {integrity: sha512-41LZOeI94Za3twib8KOIjnHYAZ+nkBFmboaREsFR1760S7jiMVywqWX8nFZvn/CXj15Fjjgdgyuig+zMREwXwQ==} engines: {node: '>=10'} cpu: [arm64] @@ -2570,7 +2656,7 @@ packages: dev: true optional: true - /@swc/core-win32-ia32-msvc/1.3.49: + /@swc/core-win32-ia32-msvc@1.3.49: resolution: {integrity: sha512-IdqLPoMKssyAoOCZdNXmnAd6/uyx+Hb9KSfZUHepZaNfwMy6J5XXrOsbYs3v53FH8MtekUUdV+mMX4me9bcv9w==} engines: {node: '>=10'} cpu: [ia32] @@ -2579,7 +2665,7 @@ packages: dev: true optional: true - /@swc/core-win32-x64-msvc/1.3.49: + /@swc/core-win32-x64-msvc@1.3.49: resolution: {integrity: sha512-7Fqjo5pS3uIohhSbYSaR0+e/bJdxmQb4oG97FIh5qvlCCGQaQ9UiaEeYy4uK0Ad+Menum1IXCAEiG7RHcl6Eyw==} engines: {node: '>=10'} cpu: [x64] @@ -2588,7 +2674,7 @@ packages: dev: true optional: true - /@swc/core/1.3.49: + /@swc/core@1.3.49: resolution: {integrity: sha512-br44ZHOfE9YyRGcORSLkHFQHTvhwRcaithBJ1Q5y5iMGpLbH0Wai3GN49L60RvmGwxNJfWzT+E7+rNNR7ewKgA==} engines: {node: '>=10'} requiresBuild: true @@ -2610,7 +2696,7 @@ packages: '@swc/core-win32-x64-msvc': 1.3.49 dev: true - /@swc/jest/0.2.24_@swc+core@1.3.49: + /@swc/jest@0.2.24(@swc/core@1.3.49): resolution: {integrity: sha512-fwgxQbM1wXzyKzl1+IW0aGrRvAA8k0Y3NxFhKigbPjOJ4mCKnWEcNX9HQS3gshflcxq8YKhadabGUVfdwjCr6Q==} engines: {npm: '>= 7.0.0'} peerDependencies: @@ -2621,34 +2707,34 @@ packages: jsonc-parser: 3.2.0 dev: true - /@tootallnate/once/2.0.0: + /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} dev: true - /@tsconfig/node10/1.0.9: + /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true - /@tsconfig/node12/1.0.11: + /@tsconfig/node12@1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} dev: true - /@tsconfig/node14/1.0.3: + /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} dev: true - /@tsconfig/node16/1.0.3: + /@tsconfig/node16@1.0.3: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true - /@types/accepts/1.3.5: + /@types/accepts@1.3.5: resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==} dependencies: '@types/node': 18.15.11 dev: true - /@types/babel__core/7.20.0: + /@types/babel__core@7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: '@babel/parser': 7.21.4 @@ -2658,56 +2744,56 @@ packages: '@types/babel__traverse': 7.18.3 dev: true - /@types/babel__generator/7.6.4: + /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: '@babel/types': 7.21.4 dev: true - /@types/babel__template/7.4.1: + /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: '@babel/parser': 7.21.4 '@babel/types': 7.21.4 dev: true - /@types/babel__traverse/7.18.3: + /@types/babel__traverse@7.18.3: resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: '@babel/types': 7.21.4 dev: true - /@types/body-parser/1.19.2: + /@types/body-parser@1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 '@types/node': 18.15.11 dev: true - /@types/command-line-args/5.2.0: + /@types/command-line-args@5.2.0: resolution: {integrity: sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==} dev: true - /@types/connect/3.4.35: + /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: '@types/node': 18.15.11 dev: true - /@types/content-disposition/0.5.5: + /@types/content-disposition@0.5.5: resolution: {integrity: sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==} dev: true - /@types/conventional-commits-parser/3.0.3: + /@types/conventional-commits-parser@3.0.3: resolution: {integrity: sha512-aoUKfRQYvGMH+spFpOTX9jO4nZoz9/BKp4hlHPxL3Cj2r2Xj+jEcwlXtFIyZr5uL8bh1nbWynDEYaAota+XqPg==} dependencies: '@types/node': 18.15.11 dev: true - /@types/cookie/0.4.1: + /@types/cookie@0.4.1: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} - /@types/cookies/0.7.7: + /@types/cookies@0.7.7: resolution: {integrity: sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==} dependencies: '@types/connect': 3.4.35 @@ -2716,41 +2802,41 @@ packages: '@types/node': 18.15.11 dev: true - /@types/cors/2.8.13: + /@types/cors@2.8.13: resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==} dependencies: '@types/node': 18.15.11 dev: true - /@types/debug/4.1.7: + /@types/debug@4.1.7: resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} dependencies: '@types/ms': 0.7.31 dev: true - /@types/eslint-scope/3.7.4: + /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: '@types/eslint': 8.37.0 '@types/estree': 1.0.0 dev: true - /@types/eslint/8.37.0: + /@types/eslint@8.37.0: resolution: {integrity: sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==} dependencies: '@types/estree': 1.0.0 '@types/json-schema': 7.0.11 dev: true - /@types/estree/0.0.39: + /@types/estree@0.0.39: resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} dev: true - /@types/estree/1.0.0: + /@types/estree@1.0.0: resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} dev: true - /@types/express-serve-static-core/4.17.33: + /@types/express-serve-static-core@4.17.33: resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} dependencies: '@types/node': 18.15.11 @@ -2758,7 +2844,7 @@ packages: '@types/range-parser': 1.2.4 dev: true - /@types/express/4.17.17: + /@types/express@4.17.17: resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} dependencies: '@types/body-parser': 1.19.2 @@ -2767,72 +2853,72 @@ packages: '@types/serve-static': 1.15.1 dev: true - /@types/fs-extra/9.0.13: + /@types/fs-extra@9.0.13: resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} dependencies: '@types/node': 18.15.11 dev: true - /@types/glob/7.2.0: + /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 '@types/node': 18.15.11 dev: true - /@types/glob/8.1.0: + /@types/glob@8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} dependencies: '@types/minimatch': 5.1.2 '@types/node': 18.15.11 dev: true - /@types/graceful-fs/4.1.6: + /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: '@types/node': 18.15.11 dev: true - /@types/http-assert/1.5.3: + /@types/http-assert@1.5.3: resolution: {integrity: sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==} dev: true - /@types/http-errors/2.0.1: + /@types/http-errors@2.0.1: resolution: {integrity: sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==} dev: true - /@types/issue-parser/3.0.1: + /@types/issue-parser@3.0.1: resolution: {integrity: sha512-cdggbeJIxWoIB8CB57BvenONrQZcBuEf2uddxMRNIy2jgdcnSxnY71tQcNrxdqTG4VmQP5fdLLE9E+jCnMK0Fg==} dev: true - /@types/istanbul-lib-coverage/2.0.4: + /@types/istanbul-lib-coverage@2.0.4: resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} dev: true - /@types/istanbul-lib-report/3.0.0: + /@types/istanbul-lib-report@3.0.0: resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} dependencies: '@types/istanbul-lib-coverage': 2.0.4 dev: true - /@types/istanbul-reports/3.0.1: + /@types/istanbul-reports@3.0.1: resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} dependencies: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest/29.5.0: + /@types/jest@29.5.0: resolution: {integrity: sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg==} dependencies: expect: 29.5.0 pretty-format: 29.5.0 dev: true - /@types/js-levenshtein/1.1.1: + /@types/js-levenshtein@1.1.1: resolution: {integrity: sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==} dev: false - /@types/jsdom/20.0.1: + /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: '@types/node': 18.15.11 @@ -2840,25 +2926,25 @@ packages: parse5: 7.1.2 dev: true - /@types/json-bigint/1.0.1: + /@types/json-bigint@1.0.1: resolution: {integrity: sha512-zpchZLNsNuzJHi6v64UBoFWAvQlPhch7XAi36FkH6tL1bbbmimIF+cS7vwkzY4u5RaSWMoflQfu+TshMPPw8uw==} dev: true - /@types/json-schema/7.0.11: + /@types/json-schema@7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true - /@types/keygrip/1.0.2: + /@types/keygrip@1.0.2: resolution: {integrity: sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==} dev: true - /@types/koa-compose/3.2.5: + /@types/koa-compose@3.2.5: resolution: {integrity: sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==} dependencies: '@types/koa': 2.13.6 dev: true - /@types/koa/2.13.6: + /@types/koa@2.13.6: resolution: {integrity: sha512-diYUfp/GqfWBAiwxHtYJ/FQYIXhlEhlyaU7lB/bWQrx4Il9lCET5UwpFy3StOAohfsxxvEQ11qIJgT1j2tfBvw==} dependencies: '@types/accepts': 1.3.5 @@ -2871,137 +2957,137 @@ packages: '@types/node': 18.15.11 dev: true - /@types/mime/3.0.1: + /@types/mime@3.0.1: resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} dev: true - /@types/minimatch/5.1.2: + /@types/minimatch@5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true - /@types/minimist/1.2.2: + /@types/minimist@1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true - /@types/ms/0.7.31: + /@types/ms@0.7.31: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} dev: true - /@types/mustache/4.2.2: + /@types/mustache@4.2.2: resolution: {integrity: sha512-MUSpfpW0yZbTgjekDbH0shMYBUD+X/uJJJMm9LXN1d5yjl5lCY1vN/eWKD6D1tOtjA6206K0zcIPnUaFMurdNA==} dev: true - /@types/node-fetch/2.6.3: + /@types/node-fetch@2.6.3: resolution: {integrity: sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==} dependencies: '@types/node': 18.15.11 form-data: 3.0.1 dev: true - /@types/node/16.18.23: + /@types/node@16.18.23: resolution: {integrity: sha512-XAMpaw1s1+6zM+jn2tmw8MyaRDIJfXxqmIQIS0HfoGYPuf7dUWeiUKopwq13KFX9lEp1+THGtlaaYx39Nxr58g==} dev: true - /@types/node/18.15.11: + /@types/node@18.15.11: resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} dev: true - /@types/normalize-package-data/2.4.1: + /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true - /@types/parse-json/4.0.0: + /@types/parse-json@4.0.0: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} dev: true - /@types/parse5/6.0.3: + /@types/parse5@6.0.3: resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} dev: true - /@types/prettier/2.7.2: + /@types/prettier@2.7.2: resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} dev: true - /@types/puppeteer/5.4.7: + /@types/puppeteer@5.4.7: resolution: {integrity: sha512-JdGWZZYL0vKapXF4oQTC5hLVNfOgdPrqeZ1BiQnGk5cB7HeE91EWUiTdVSdQPobRN8rIcdffjiOgCYJ/S8QrnQ==} dependencies: '@types/node': 18.15.11 dev: true - /@types/qs/6.9.7: + /@types/qs@6.9.7: resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} dev: true - /@types/range-parser/1.2.4: + /@types/range-parser@1.2.4: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} dev: true - /@types/rc/1.2.1: + /@types/rc@1.2.1: resolution: {integrity: sha512-+TRLFmHLnpoV0uw4O/PzqMbPT6bhQM0q2KO0l+R7M3sHYRndPpNL6kv8p7Ee9ZxgQ6noYB18/t+heQi7eijOHA==} dependencies: '@types/minimist': 1.2.2 dev: true - /@types/registry-auth-token/4.2.1: + /@types/registry-auth-token@4.2.1: resolution: {integrity: sha512-VtTUcUaJGiJtlBKYwwFIOSvrcnuKmpPGO+x56XijNZnaDpnzKh2VwoTw5hewrOMW2BgjoU+uFbVAvSCW2FpWmA==} dev: true - /@types/resolve/1.17.1: + /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: '@types/node': 18.15.11 dev: true - /@types/semver/7.3.13: + /@types/semver@7.3.13: resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} dev: true - /@types/serve-static/1.15.1: + /@types/serve-static@1.15.1: resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} dependencies: '@types/mime': 3.0.1 '@types/node': 18.15.11 dev: true - /@types/stack-utils/2.0.1: + /@types/stack-utils@2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} dev: true - /@types/statuses/2.0.1: + /@types/statuses@2.0.1: resolution: {integrity: sha512-vVRgv7WXbhIZzILgr58b4Ki2uqpN/dlVCUBWCMkPbMDlV1CrQrgCl5hnIoUlMrgymGcTmdfVqbs1yWj/IRIRtQ==} dev: false - /@types/tough-cookie/4.0.2: + /@types/tough-cookie@4.0.2: resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} dev: true - /@types/uuid/8.3.4: + /@types/uuid@8.3.4: resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} dev: true - /@types/ws/7.4.7: + /@types/ws@7.4.7: resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} dependencies: '@types/node': 18.15.11 dev: true - /@types/yargs-parser/21.0.0: + /@types/yargs-parser@21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true - /@types/yargs/16.0.5: + /@types/yargs@16.0.5: resolution: {integrity: sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==} dependencies: '@types/yargs-parser': 21.0.0 dev: true - /@types/yargs/17.0.24: + /@types/yargs@17.0.24: resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} dependencies: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin/5.58.0_ug56riyzsilszklzuxgwlsssqe: + /@typescript-eslint/eslint-plugin@5.58.0(@typescript-eslint/parser@5.58.0)(eslint@7.32.0)(typescript@5.0.4): resolution: {integrity: sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3013,23 +3099,23 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.5.0 - '@typescript-eslint/parser': 5.58.0_cgdknpc562nnyruteofhkegnom + '@typescript-eslint/parser': 5.58.0(eslint@7.32.0)(typescript@5.0.4) '@typescript-eslint/scope-manager': 5.58.0 - '@typescript-eslint/type-utils': 5.58.0_cgdknpc562nnyruteofhkegnom - '@typescript-eslint/utils': 5.58.0_cgdknpc562nnyruteofhkegnom - debug: 4.3.4 + '@typescript-eslint/type-utils': 5.58.0(eslint@7.32.0)(typescript@5.0.4) + '@typescript-eslint/utils': 5.58.0(eslint@7.32.0)(typescript@5.0.4) + debug: 4.3.4(supports-color@6.1.0) eslint: 7.32.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 semver: 7.4.0 - tsutils: 3.21.0_typescript@5.0.4 + tsutils: 3.21.0(typescript@5.0.4) typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser/5.58.0_cgdknpc562nnyruteofhkegnom: + /@typescript-eslint/parser@5.58.0(eslint@7.32.0)(typescript@5.0.4): resolution: {integrity: sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3041,15 +3127,15 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.58.0 '@typescript-eslint/types': 5.58.0 - '@typescript-eslint/typescript-estree': 5.58.0_typescript@5.0.4 - debug: 4.3.4 + '@typescript-eslint/typescript-estree': 5.58.0(typescript@5.0.4) + debug: 4.3.4(supports-color@6.1.0) eslint: 7.32.0 typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager/5.58.0: + /@typescript-eslint/scope-manager@5.58.0: resolution: {integrity: sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -3057,7 +3143,7 @@ packages: '@typescript-eslint/visitor-keys': 5.58.0 dev: true - /@typescript-eslint/type-utils/5.58.0_cgdknpc562nnyruteofhkegnom: + /@typescript-eslint/type-utils@5.58.0(eslint@7.32.0)(typescript@5.0.4): resolution: {integrity: sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3067,22 +3153,22 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.58.0_typescript@5.0.4 - '@typescript-eslint/utils': 5.58.0_cgdknpc562nnyruteofhkegnom - debug: 4.3.4 + '@typescript-eslint/typescript-estree': 5.58.0(typescript@5.0.4) + '@typescript-eslint/utils': 5.58.0(eslint@7.32.0)(typescript@5.0.4) + debug: 4.3.4(supports-color@6.1.0) eslint: 7.32.0 - tsutils: 3.21.0_typescript@5.0.4 + tsutils: 3.21.0(typescript@5.0.4) typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types/5.58.0: + /@typescript-eslint/types@5.58.0: resolution: {integrity: sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.58.0_typescript@5.0.4: + /@typescript-eslint/typescript-estree@5.58.0(typescript@5.0.4): resolution: {integrity: sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3093,28 +3179,28 @@ packages: dependencies: '@typescript-eslint/types': 5.58.0 '@typescript-eslint/visitor-keys': 5.58.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) globby: 11.1.0 is-glob: 4.0.3 semver: 7.4.0 - tsutils: 3.21.0_typescript@5.0.4 + tsutils: 3.21.0(typescript@5.0.4) typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils/5.58.0_cgdknpc562nnyruteofhkegnom: + /@typescript-eslint/utils@5.58.0(eslint@7.32.0)(typescript@5.0.4): resolution: {integrity: sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0_eslint@7.32.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@7.32.0) '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 '@typescript-eslint/scope-manager': 5.58.0 '@typescript-eslint/types': 5.58.0 - '@typescript-eslint/typescript-estree': 5.58.0_typescript@5.0.4 + '@typescript-eslint/typescript-estree': 5.58.0(typescript@5.0.4) eslint: 7.32.0 eslint-scope: 5.1.1 semver: 7.4.0 @@ -3123,7 +3209,7 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys/5.58.0: + /@typescript-eslint/visitor-keys@5.58.0: resolution: {integrity: sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -3131,14 +3217,14 @@ packages: eslint-visitor-keys: 3.4.0 dev: true - /@web/config-loader/0.1.3: + /@web/config-loader@0.1.3: resolution: {integrity: sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==} engines: {node: '>=10.0.0'} dependencies: semver: 7.4.0 dev: true - /@web/dev-server-core/0.4.1: + /@web/dev-server-core@0.4.1: resolution: {integrity: sha512-KdYwejXZwIZvb6tYMCqU7yBiEOPfKLQ3V9ezqqEz8DA9V9R3oQWaowckvCpFB9IxxPfS/P8/59OkdzGKQjcIUw==} engines: {node: '>=10.0.0'} dependencies: @@ -3166,11 +3252,11 @@ packages: - utf-8-validate dev: true - /@web/dev-server-rollup/0.4.1: + /@web/dev-server-rollup@0.4.1: resolution: {integrity: sha512-Ebsv7Ovd9MufeH3exvikBJ7GmrZA5OmHnOgaiHcwMJ2eQBJA5/I+/CbRjsLX97ICj/ZwZG//p2ITRz8W3UfSqg==} engines: {node: '>=10.0.0'} dependencies: - '@rollup/plugin-node-resolve': 13.3.0_rollup@2.79.1 + '@rollup/plugin-node-resolve': 13.3.0(rollup@2.79.1) '@web/dev-server-core': 0.4.1 nanocolors: 0.2.13 parse5: 6.0.1 @@ -3182,7 +3268,7 @@ packages: - utf-8-validate dev: true - /@web/dev-server/0.1.38: + /@web/dev-server@0.1.38: resolution: {integrity: sha512-WUq7Zi8KeJ5/UZmmpZ+kzUpUlFlMP/rcreJKYg9Lxiz998KYl4G5Rv24akX0piTuqXG7r6h+zszg8V/hdzjCoA==} engines: {node: '>=10.0.0'} hasBin: true @@ -3200,14 +3286,14 @@ packages: ip: 1.1.8 nanocolors: 0.2.13 open: 8.4.2 - portfinder: 1.0.32 + portfinder: 1.0.32(supports-color@6.1.0) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate dev: true - /@web/parse5-utils/1.3.1: + /@web/parse5-utils@1.3.1: resolution: {integrity: sha512-haCgDchZrAOB9EhBJ5XqiIjBMsS/exsM5Ru7sCSyNkXVEJWskyyKuKMFk66BonnIGMPpDtqDrTUfYEis5Zi3XA==} engines: {node: '>=10.0.0'} dependencies: @@ -3215,26 +3301,26 @@ packages: parse5: 6.0.1 dev: true - /@webassemblyjs/ast/1.11.1: + /@webassemblyjs/ast@1.11.1: resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} dependencies: '@webassemblyjs/helper-numbers': 1.11.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.1 dev: true - /@webassemblyjs/floating-point-hex-parser/1.11.1: + /@webassemblyjs/floating-point-hex-parser@1.11.1: resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==} dev: true - /@webassemblyjs/helper-api-error/1.11.1: + /@webassemblyjs/helper-api-error@1.11.1: resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==} dev: true - /@webassemblyjs/helper-buffer/1.11.1: + /@webassemblyjs/helper-buffer@1.11.1: resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==} dev: true - /@webassemblyjs/helper-numbers/1.11.1: + /@webassemblyjs/helper-numbers@1.11.1: resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==} dependencies: '@webassemblyjs/floating-point-hex-parser': 1.11.1 @@ -3242,11 +3328,11 @@ packages: '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/helper-wasm-bytecode/1.11.1: + /@webassemblyjs/helper-wasm-bytecode@1.11.1: resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==} dev: true - /@webassemblyjs/helper-wasm-section/1.11.1: + /@webassemblyjs/helper-wasm-section@1.11.1: resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3255,23 +3341,23 @@ packages: '@webassemblyjs/wasm-gen': 1.11.1 dev: true - /@webassemblyjs/ieee754/1.11.1: + /@webassemblyjs/ieee754@1.11.1: resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==} dependencies: '@xtuc/ieee754': 1.2.0 dev: true - /@webassemblyjs/leb128/1.11.1: + /@webassemblyjs/leb128@1.11.1: resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==} dependencies: '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/utf8/1.11.1: + /@webassemblyjs/utf8@1.11.1: resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==} dev: true - /@webassemblyjs/wasm-edit/1.11.1: + /@webassemblyjs/wasm-edit@1.11.1: resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3284,7 +3370,7 @@ packages: '@webassemblyjs/wast-printer': 1.11.1 dev: true - /@webassemblyjs/wasm-gen/1.11.1: + /@webassemblyjs/wasm-gen@1.11.1: resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3294,7 +3380,7 @@ packages: '@webassemblyjs/utf8': 1.11.1 dev: true - /@webassemblyjs/wasm-opt/1.11.1: + /@webassemblyjs/wasm-opt@1.11.1: resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3303,7 +3389,7 @@ packages: '@webassemblyjs/wasm-parser': 1.11.1 dev: true - /@webassemblyjs/wasm-parser/1.11.1: + /@webassemblyjs/wasm-parser@1.11.1: resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3314,22 +3400,22 @@ packages: '@webassemblyjs/utf8': 1.11.1 dev: true - /@webassemblyjs/wast-printer/1.11.1: + /@webassemblyjs/wast-printer@1.11.1: resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==} dependencies: '@webassemblyjs/ast': 1.11.1 '@xtuc/long': 4.2.2 dev: true - /@xtuc/ieee754/1.2.0: + /@xtuc/ieee754@1.2.0: resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} dev: true - /@xtuc/long/4.2.2: + /@xtuc/long@4.2.2: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true - /JSONStream/1.3.5: + /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true dependencies: @@ -3337,11 +3423,11 @@ packages: through: 2.3.8 dev: true - /abab/2.0.6: + /abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} dev: true - /accepts/1.3.8: + /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} dependencies: @@ -3349,14 +3435,14 @@ packages: negotiator: 0.6.3 dev: true - /acorn-globals/7.0.1: + /acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: acorn: 8.8.2 acorn-walk: 8.2.0 dev: true - /acorn-import-assertions/1.8.0_acorn@8.8.2: + /acorn-import-assertions@1.8.0(acorn@8.8.2): resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} peerDependencies: acorn: ^8 @@ -3364,7 +3450,7 @@ packages: acorn: 8.8.2 dev: true - /acorn-jsx/5.3.2_acorn@7.4.1: + /acorn-jsx@5.3.2(acorn@7.4.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -3372,33 +3458,33 @@ packages: acorn: 7.4.1 dev: true - /acorn-walk/8.2.0: + /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} dev: true - /acorn/7.4.1: + /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /acorn/8.8.2: + /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /agent-base/6.0.2: + /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) transitivePeerDependencies: - supports-color dev: true - /aggregate-error/3.1.0: + /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} dependencies: @@ -3406,7 +3492,7 @@ packages: indent-string: 4.0.0 dev: true - /ajv-errors/1.0.1_ajv@6.12.6: + /ajv-errors@1.0.1(ajv@6.12.6): resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==} peerDependencies: ajv: '>=5.0.0' @@ -3414,7 +3500,7 @@ packages: ajv: 6.12.6 dev: true - /ajv-keywords/3.5.2_ajv@6.12.6: + /ajv-keywords@3.5.2(ajv@6.12.6): resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: ajv: ^6.9.1 @@ -3422,7 +3508,7 @@ packages: ajv: 6.12.6 dev: true - /ajv/6.12.6: + /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 @@ -3431,7 +3517,7 @@ packages: uri-js: 4.4.1 dev: true - /ajv/8.12.0: + /ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} dependencies: fast-deep-equal: 3.1.3 @@ -3440,97 +3526,97 @@ packages: uri-js: 4.4.1 dev: true - /ansi-colors/3.2.4: + /ansi-colors@3.2.4: resolution: {integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==} engines: {node: '>=6'} dev: true - /ansi-colors/4.1.3: + /ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} dev: true - /ansi-escapes/4.3.2: + /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} dependencies: type-fest: 0.21.3 - /ansi-html-community/0.0.8: + /ansi-html-community@0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} engines: {'0': node >= 0.8.0} hasBin: true dev: true - /ansi-regex/2.1.1: + /ansi-regex@2.1.1: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} engines: {node: '>=0.10.0'} dev: true - /ansi-regex/4.1.1: + /ansi-regex@4.1.1: resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} engines: {node: '>=6'} dev: true - /ansi-regex/5.0.1: + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - /ansi-regex/6.0.1: + /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} dev: true - /ansi-styles/3.2.1: + /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} dependencies: color-convert: 1.9.3 dev: true - /ansi-styles/4.3.0: + /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - /ansi-styles/5.2.0: + /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} dev: true - /ansi-styles/6.2.1: + /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} dev: true - /any-promise/1.3.0: + /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} dev: true - /anymatch/3.1.3: + /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - /arg/4.1.3: + /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true - /argparse/1.0.10: + /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 dev: true - /argparse/2.0.1: + /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true optional: true - /args/5.0.3: + /args@5.0.3: resolution: {integrity: sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==} engines: {node: '>= 6.0.0'} dependencies: @@ -3540,77 +3626,77 @@ packages: mri: 1.1.4 dev: true - /argv-formatter/1.0.0: + /argv-formatter@1.0.0: resolution: {integrity: sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==} dev: true - /arr-diff/4.0.0: + /arr-diff@4.0.0: resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} engines: {node: '>=0.10.0'} dev: true - /arr-flatten/1.1.0: + /arr-flatten@1.1.0: resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} engines: {node: '>=0.10.0'} dev: true - /arr-union/3.1.0: + /arr-union@3.1.0: resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} engines: {node: '>=0.10.0'} dev: true - /array-back/3.1.0: + /array-back@3.1.0: resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} engines: {node: '>=6'} dev: true - /array-back/6.2.2: + /array-back@6.2.2: resolution: {integrity: sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==} engines: {node: '>=12.17'} dev: true - /array-buffer-byte-length/1.0.0: + /array-buffer-byte-length@1.0.0: resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: call-bind: 1.0.2 is-array-buffer: 3.0.2 dev: true - /array-flatten/1.1.1: + /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: true - /array-flatten/2.1.2: + /array-flatten@2.1.2: resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} dev: true - /array-ify/1.0.0: + /array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} dev: true - /array-union/1.0.2: + /array-union@1.0.2: resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} engines: {node: '>=0.10.0'} dependencies: array-uniq: 1.0.3 dev: true - /array-union/2.1.0: + /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} dev: true - /array-uniq/1.0.3: + /array-uniq@1.0.3: resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} engines: {node: '>=0.10.0'} dev: true - /array-unique/0.3.2: + /array-unique@0.3.2: resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} engines: {node: '>=0.10.0'} dev: true - /array.prototype.reduce/1.0.5: + /array.prototype.reduce@1.0.5: resolution: {integrity: sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==} engines: {node: '>= 0.4'} dependencies: @@ -3621,85 +3707,85 @@ packages: is-string: 1.0.7 dev: true - /arrify/1.0.1: + /arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} dev: true - /assign-symbols/1.0.0: + /assign-symbols@1.0.0: resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} engines: {node: '>=0.10.0'} dev: true - /astral-regex/2.0.0: + /astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} dev: true - /async-limiter/1.0.1: + /async-limiter@1.0.1: resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} dev: true - /async/2.6.4: + /async@2.6.4: resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} dependencies: lodash: 4.17.21 dev: true - /asynckit/0.4.0: + /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true - /at-least-node/1.0.0: + /at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} dev: true - /atob/2.1.2: + /atob@2.1.2: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} engines: {node: '>= 4.5.0'} hasBin: true dev: true - /atomic-sleep/1.0.0: + /atomic-sleep@1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} dev: true - /available-typed-arrays/1.0.5: + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} dev: true - /babel-helper-evaluate-path/0.5.0: + /babel-helper-evaluate-path@0.5.0: resolution: {integrity: sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==} dev: true - /babel-helper-flip-expressions/0.4.3: + /babel-helper-flip-expressions@0.4.3: resolution: {integrity: sha512-rSrkRW4YQ2ETCWww9gbsWk4N0x1BOtln349Tk0dlCS90oT68WMLyGR7WvaMp3eAnsVrCqdUtC19lo1avyGPejA==} dev: true - /babel-helper-is-nodes-equiv/0.0.1: + /babel-helper-is-nodes-equiv@0.0.1: resolution: {integrity: sha512-ri/nsMFVRqXn7IyT5qW4/hIAGQxuYUFHa3qsxmPtbk6spZQcYlyDogfVpNm2XYOslH/ULS4VEJGUqQX5u7ACQw==} dev: true - /babel-helper-is-void-0/0.4.3: + /babel-helper-is-void-0@0.4.3: resolution: {integrity: sha512-07rBV0xPRM3TM5NVJEOQEkECX3qnHDjaIbFvWYPv+T1ajpUiVLiqTfC+MmiZxY5KOL/Ec08vJdJD9kZiP9UkUg==} dev: true - /babel-helper-mark-eval-scopes/0.4.3: + /babel-helper-mark-eval-scopes@0.4.3: resolution: {integrity: sha512-+d/mXPP33bhgHkdVOiPkmYoeXJ+rXRWi7OdhwpyseIqOS8CmzHQXHUp/+/Qr8baXsT0kjGpMHHofHs6C3cskdA==} dev: true - /babel-helper-remove-or-void/0.4.3: + /babel-helper-remove-or-void@0.4.3: resolution: {integrity: sha512-eYNceYtcGKpifHDir62gHJadVXdg9fAhuZEXiRQnJJ4Yi4oUTpqpNY//1pM4nVyjjDMPYaC2xSf0I+9IqVzwdA==} dev: true - /babel-helper-to-multiple-sequence-expressions/0.5.0: + /babel-helper-to-multiple-sequence-expressions@0.5.0: resolution: {integrity: sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==} dev: true - /babel-jest/29.5.0_@babel+core@7.21.4: + /babel-jest@29.5.0(@babel/core@7.21.4): resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -3709,7 +3795,7 @@ packages: '@jest/transform': 29.5.0 '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.5.0_@babel+core@7.21.4 + babel-preset-jest: 29.5.0(@babel/core@7.21.4) chalk: 4.1.1 graceful-fs: 4.2.11 slash: 3.0.0 @@ -3717,7 +3803,7 @@ packages: - supports-color dev: true - /babel-loader/8.3.0_c3tfwv7p35clwcmkb5fnkshzei: + /babel-loader@8.3.0(@babel/core@7.21.4)(webpack@5.79.0): resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} engines: {node: '>= 8.9'} peerDependencies: @@ -3729,10 +3815,10 @@ packages: loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.79.0_57233mj27fjz7synoeubptyy7e + webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) dev: true - /babel-minify/0.5.2: + /babel-minify@0.5.2: resolution: {integrity: sha512-H1ExfmvTxKWQZYcty1My6XRhoZm04/5MNb2DdZsC08r7y/rowipC0s9sszKA7jgW9mYYDdFnU68XohB+zP35qQ==} hasBin: true dependencies: @@ -3747,7 +3833,7 @@ packages: - supports-color dev: true - /babel-plugin-istanbul/6.1.1: + /babel-plugin-istanbul@6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: @@ -3760,7 +3846,7 @@ packages: - supports-color dev: true - /babel-plugin-jest-hoist/29.5.0: + /babel-plugin-jest-hoist@29.5.0: resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3770,17 +3856,17 @@ packages: '@types/babel__traverse': 7.18.3 dev: true - /babel-plugin-minify-builtins/0.5.0: + /babel-plugin-minify-builtins@0.5.0: resolution: {integrity: sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==} dev: true - /babel-plugin-minify-constant-folding/0.5.0: + /babel-plugin-minify-constant-folding@0.5.0: resolution: {integrity: sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==} dependencies: babel-helper-evaluate-path: 0.5.0 dev: true - /babel-plugin-minify-dead-code-elimination/0.5.2: + /babel-plugin-minify-dead-code-elimination@0.5.2: resolution: {integrity: sha512-krq9Lwi0QIzyAlcNBXTL4usqUvevB4BzktdEsb8srcXC1AaYqRJiAQw6vdKdJSaXbz6snBvziGr6ch/aoRCfpA==} dependencies: babel-helper-evaluate-path: 0.5.0 @@ -3789,38 +3875,38 @@ packages: lodash: 4.17.21 dev: true - /babel-plugin-minify-flip-comparisons/0.4.3: + /babel-plugin-minify-flip-comparisons@0.4.3: resolution: {integrity: sha512-8hNwgLVeJzpeLVOVArag2DfTkbKodzOHU7+gAZ8mGBFGPQHK6uXVpg3jh5I/F6gfi5Q5usWU2OKcstn1YbAV7A==} dependencies: babel-helper-is-void-0: 0.4.3 dev: true - /babel-plugin-minify-guarded-expressions/0.4.4: + /babel-plugin-minify-guarded-expressions@0.4.4: resolution: {integrity: sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==} dependencies: babel-helper-evaluate-path: 0.5.0 babel-helper-flip-expressions: 0.4.3 dev: true - /babel-plugin-minify-infinity/0.4.3: + /babel-plugin-minify-infinity@0.4.3: resolution: {integrity: sha512-X0ictxCk8y+NvIf+bZ1HJPbVZKMlPku3lgYxPmIp62Dp8wdtbMLSekczty3MzvUOlrk5xzWYpBpQprXUjDRyMA==} dev: true - /babel-plugin-minify-mangle-names/0.5.1: + /babel-plugin-minify-mangle-names@0.5.1: resolution: {integrity: sha512-8KMichAOae2FHlipjNDTo2wz97MdEb2Q0jrn4NIRXzHH7SJ3c5TaNNBkeTHbk9WUsMnqpNUx949ugM9NFWewzw==} dependencies: babel-helper-mark-eval-scopes: 0.4.3 dev: true - /babel-plugin-minify-numeric-literals/0.4.3: + /babel-plugin-minify-numeric-literals@0.4.3: resolution: {integrity: sha512-5D54hvs9YVuCknfWywq0eaYDt7qYxlNwCqW9Ipm/kYeS9gYhJd0Rr/Pm2WhHKJ8DC6aIlDdqSBODSthabLSX3A==} dev: true - /babel-plugin-minify-replace/0.5.0: + /babel-plugin-minify-replace@0.5.0: resolution: {integrity: sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==} dev: true - /babel-plugin-minify-simplify/0.5.1: + /babel-plugin-minify-simplify@0.5.1: resolution: {integrity: sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==} dependencies: babel-helper-evaluate-path: 0.5.0 @@ -3829,117 +3915,117 @@ packages: babel-helper-to-multiple-sequence-expressions: 0.5.0 dev: true - /babel-plugin-minify-type-constructors/0.4.3: + /babel-plugin-minify-type-constructors@0.4.3: resolution: {integrity: sha512-4ADB0irJ/6BeXWHubjCJmrPbzhxDgjphBMjIjxCc25n4NGJ00NsYqwYt+F/OvE9RXx8KaSW7cJvp+iZX436tnQ==} dependencies: babel-helper-is-void-0: 0.4.3 dev: true - /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.21.4: + /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.21.4): resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.21.4 '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.4 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.21.4: + /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.4): resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.4 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) core-js-compat: 3.30.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.21.4: + /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.21.4): resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.4 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) transitivePeerDependencies: - supports-color dev: true - /babel-plugin-transform-inline-consecutive-adds/0.4.3: + /babel-plugin-transform-inline-consecutive-adds@0.4.3: resolution: {integrity: sha512-8D104wbzzI5RlxeVPYeQb9QsUyepiH1rAO5hpPpQ6NPRgQLpIVwkS/Nbx944pm4K8Z+rx7CgjPsFACz/VCBN0Q==} dev: true - /babel-plugin-transform-member-expression-literals/6.9.4: + /babel-plugin-transform-member-expression-literals@6.9.4: resolution: {integrity: sha512-Xq9/Rarpj+bjOZSl1nBbZYETsNEDDJSrb6Plb1sS3/36FukWFLLRysgecva5KZECjUJTrJoQqjJgtWToaflk5Q==} dev: true - /babel-plugin-transform-merge-sibling-variables/6.9.5: + /babel-plugin-transform-merge-sibling-variables@6.9.5: resolution: {integrity: sha512-xj/KrWi6/uP+DrD844h66Qh2cZN++iugEIgH8QcIxhmZZPNP6VpOE9b4gP2FFW39xDAY43kCmYMM6U0QNKN8fw==} dev: true - /babel-plugin-transform-minify-booleans/6.9.4: + /babel-plugin-transform-minify-booleans@6.9.4: resolution: {integrity: sha512-9pW9ePng6DZpzGPalcrULuhSCcauGAbn8AeU3bE34HcDkGm8Ldt0ysjGkyb64f0K3T5ilV4mriayOVv5fg0ASA==} dev: true - /babel-plugin-transform-property-literals/6.9.4: + /babel-plugin-transform-property-literals@6.9.4: resolution: {integrity: sha512-Pf8JHTjTPxecqVyL6KSwD/hxGpoTZjiEgV7nCx0KFQsJYM0nuuoCajbg09KRmZWeZbJ5NGTySABYv8b/hY1eEA==} dependencies: esutils: 2.0.3 dev: true - /babel-plugin-transform-regexp-constructors/0.4.3: + /babel-plugin-transform-regexp-constructors@0.4.3: resolution: {integrity: sha512-JjymDyEyRNhAoNFp09y/xGwYVYzT2nWTGrBrWaL6eCg2m+B24qH2jR0AA8V8GzKJTgC8NW6joJmc6nabvWBD/g==} dev: true - /babel-plugin-transform-remove-console/6.9.4: + /babel-plugin-transform-remove-console@6.9.4: resolution: {integrity: sha512-88blrUrMX3SPiGkT1GnvVY8E/7A+k6oj3MNvUtTIxJflFzXTw1bHkuJ/y039ouhFMp2prRn5cQGzokViYi1dsg==} dev: true - /babel-plugin-transform-remove-debugger/6.9.4: + /babel-plugin-transform-remove-debugger@6.9.4: resolution: {integrity: sha512-Kd+eTBYlXfwoFzisburVwrngsrz4xh9I0ppoJnU/qlLysxVBRgI4Pj+dk3X8F5tDiehp3hhP8oarRMT9v2Z3lw==} dev: true - /babel-plugin-transform-remove-undefined/0.5.0: + /babel-plugin-transform-remove-undefined@0.5.0: resolution: {integrity: sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==} dependencies: babel-helper-evaluate-path: 0.5.0 dev: true - /babel-plugin-transform-simplify-comparison-operators/6.9.4: + /babel-plugin-transform-simplify-comparison-operators@6.9.4: resolution: {integrity: sha512-GLInxhGAQWJ9YIdjwF6dAFlmh4U+kN8pL6Big7nkDzHoZcaDQOtBm28atEhQJq6m9GpAovbiGEShKqXv4BSp0A==} dev: true - /babel-plugin-transform-undefined-to-void/6.9.4: + /babel-plugin-transform-undefined-to-void@6.9.4: resolution: {integrity: sha512-D2UbwxawEY1xVc9svYAUZQM2xarwSNXue2qDIx6CeV2EuMGaes/0su78zlIDIAgE7BvnMw4UpmSo9fDy+znghg==} dev: true - /babel-preset-current-node-syntax/1.0.1_@babel+core@7.21.4: + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.21.4): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.21.4 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.4 - '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.4 - '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.21.4 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.4 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.4 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.4 - dev: true - - /babel-preset-jest/29.5.0_@babel+core@7.21.4: + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.4) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.21.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.4) + dev: true + + /babel-preset-jest@29.5.0(@babel/core@7.21.4): resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -3947,10 +4033,10 @@ packages: dependencies: '@babel/core': 7.21.4 babel-plugin-jest-hoist: 29.5.0 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.4 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.4) dev: true - /babel-preset-minify/0.5.2: + /babel-preset-minify@0.5.2: resolution: {integrity: sha512-v4GL+kk0TfovbRIKZnC3HPbu2cAGmPAby7BsOmuPdMJfHV+4FVdsGXTH/OOGQRKYdjemBuL1+MsE6mobobhe9w==} dependencies: babel-plugin-minify-builtins: 0.5.0 @@ -3978,11 +4064,19 @@ packages: lodash: 4.17.21 dev: true - /balanced-match/1.0.2: + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /base/0.11.2: + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + /base64id@2.0.0: + resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} + engines: {node: ^4.5.0 || >= 5.9} + dev: true + + /base@0.11.2: resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} engines: {node: '>=0.10.0'} dependencies: @@ -3995,44 +4089,36 @@ packages: pascalcase: 0.1.1 dev: true - /base64-js/1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - /base64id/2.0.0: - resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} - engines: {node: ^4.5.0 || >= 5.9} - dev: true - - /batch/0.6.1: + /batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} dev: true - /big.js/5.2.2: + /big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: true - /bignumber.js/9.1.1: + /bignumber.js@9.1.1: resolution: {integrity: sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==} dev: true - /binary-extensions/2.2.0: + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - /bl/4.1.0: + /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - /body-parser/1.20.1: + /body-parser@1.20.1(supports-color@6.1.0): resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 2.6.9 + debug: 2.6.9(supports-color@6.1.0) depd: 2.0.0 destroy: 1.2.0 http-errors: 2.0.0 @@ -4046,27 +4132,7 @@ packages: - supports-color dev: true - /body-parser/1.20.1_supports-color@6.1.0: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9_supports-color@6.1.0 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.1 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /bonjour/3.5.0: + /bonjour@3.5.0: resolution: {integrity: sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==} dependencies: array-flatten: 2.1.2 @@ -4077,20 +4143,20 @@ packages: multicast-dns-service-types: 1.1.0 dev: true - /brace-expansion/1.1.11: + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 dev: true - /brace-expansion/2.0.1: + /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 dev: true - /braces/2.3.2_supports-color@6.1.0: + /braces@2.3.2(supports-color@6.1.0): resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} engines: {node: '>=0.10.0'} dependencies: @@ -4100,7 +4166,7 @@ packages: fill-range: 4.0.0 isobject: 3.0.1 repeat-element: 1.1.4 - snapdragon: 0.8.2_supports-color@6.1.0 + snapdragon: 0.8.2(supports-color@6.1.0) snapdragon-node: 2.1.1 split-string: 3.1.0 to-regex: 3.0.2 @@ -4108,13 +4174,13 @@ packages: - supports-color dev: true - /braces/3.0.2: + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - /browserslist/4.21.5: + /browserslist@4.21.5: resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -4122,35 +4188,35 @@ packages: caniuse-lite: 1.0.30001478 electron-to-chromium: 1.4.361 node-releases: 2.0.10 - update-browserslist-db: 1.0.10_browserslist@4.21.5 + update-browserslist-db: 1.0.10(browserslist@4.21.5) dev: true - /bser/2.1.1: + /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 dev: true - /buffer-from/1.1.2: + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true - /buffer-indexof/1.1.1: + /buffer-indexof@1.1.1: resolution: {integrity: sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==} dev: true - /buffer/5.7.1: + /buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - /builtin-modules/3.3.0: + /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} dev: true - /bundle-require/4.0.1_esbuild@0.17.16: + /bundle-require@4.0.1(esbuild@0.17.16): resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: @@ -4160,29 +4226,29 @@ packages: load-tsconfig: 0.2.5 dev: true - /busboy/1.6.0: + /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} dependencies: streamsearch: 1.1.0 dev: true - /bytes/3.0.0: + /bytes@3.0.0: resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} engines: {node: '>= 0.8'} dev: true - /bytes/3.1.2: + /bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} dev: true - /cac/6.7.14: + /cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} dev: true - /cache-base/1.0.1: + /cache-base@1.0.1: resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} engines: {node: '>=0.10.0'} dependencies: @@ -4197,7 +4263,7 @@ packages: unset-value: 1.0.0 dev: true - /cache-content-type/1.0.1: + /cache-content-type@1.0.1: resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} engines: {node: '>= 6.0.0'} dependencies: @@ -4205,24 +4271,24 @@ packages: ylru: 1.3.2 dev: true - /cachedir/2.3.0: + /cachedir@2.3.0: resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==} engines: {node: '>=6'} dev: true - /call-bind/1.0.2: + /call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 get-intrinsic: 1.2.0 dev: true - /callsites/3.1.0: + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} dev: true - /camelcase-keys/6.2.2: + /camelcase-keys@6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} engines: {node: '>=8'} dependencies: @@ -4231,38 +4297,38 @@ packages: quick-lru: 4.0.1 dev: true - /camelcase/4.1.0: + /camelcase@4.1.0: resolution: {integrity: sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==} engines: {node: '>=4'} dev: true - /camelcase/5.0.0: + /camelcase@5.0.0: resolution: {integrity: sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==} engines: {node: '>=6'} dev: true - /camelcase/5.3.1: + /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} dev: true - /camelcase/6.3.0: + /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} dev: true - /caniuse-lite/1.0.30001478: + /caniuse-lite@1.0.30001478: resolution: {integrity: sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw==} dev: true - /chalk-template/0.4.0: + /chalk-template@0.4.0: resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} engines: {node: '>=12'} dependencies: chalk: 4.1.2 dev: true - /chalk/2.4.2: + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} dependencies: @@ -4271,14 +4337,14 @@ packages: supports-color: 5.5.0 dev: true - /chalk/4.1.1: + /chalk@4.1.1: resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==} engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - /chalk/4.1.2: + /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} dependencies: @@ -4286,20 +4352,20 @@ packages: supports-color: 7.2.0 dev: true - /chalk/5.2.0: + /chalk@5.2.0: resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true - /char-regex/1.0.2: + /char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} dev: true - /chardet/0.7.0: + /chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - /chokidar/3.4.1: + /chokidar@3.4.1: resolution: {integrity: sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==} engines: {node: '>= 8.10.0'} dependencies: @@ -4313,21 +4379,21 @@ packages: optionalDependencies: fsevents: 2.1.3 - /chrome-trace-event/1.0.3: + /chrome-trace-event@1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} dev: true - /ci-info/3.8.0: + /ci-info@3.8.0: resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} dev: true - /cjs-module-lexer/1.2.2: + /cjs-module-lexer@1.2.2: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} dev: true - /class-utils/0.3.6: + /class-utils@0.3.6: resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} engines: {node: '>=0.10.0'} dependencies: @@ -4337,22 +4403,22 @@ packages: static-extend: 0.1.2 dev: true - /clean-stack/2.2.0: + /clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} dev: true - /cli-cursor/3.1.0: + /cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 - /cli-spinners/2.8.0: + /cli-spinners@2.8.0: resolution: {integrity: sha512-/eG5sJcvEIwxcdYM86k5tPwn0MUzkX5YY3eImTGpJOZgVe4SdTMY14vQpcxgBzJ0wXwAYrS8E+c3uHeK4JNyzQ==} engines: {node: '>=6'} - /cli-truncate/2.1.0: + /cli-truncate@2.1.0: resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} engines: {node: '>=8'} dependencies: @@ -4360,7 +4426,7 @@ packages: string-width: 4.2.3 dev: true - /cli-truncate/3.1.0: + /cli-truncate@3.1.0: resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: @@ -4368,11 +4434,11 @@ packages: string-width: 5.1.2 dev: true - /cli-width/3.0.0: + /cli-width@3.0.0: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} - /cliui/5.0.0: + /cliui@5.0.0: resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} dependencies: string-width: 3.1.0 @@ -4380,7 +4446,7 @@ packages: wrap-ansi: 5.1.0 dev: true - /cliui/8.0.1: + /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} dependencies: @@ -4388,7 +4454,7 @@ packages: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - /clone-deep/4.0.1: + /clone-deep@4.0.1: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} engines: {node: '>=6'} dependencies: @@ -4397,25 +4463,25 @@ packages: shallow-clone: 3.0.1 dev: true - /clone/1.0.4: + /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} - /clone/2.1.2: + /clone@2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} dev: true - /co/4.6.0: + /co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} dev: true - /collect-v8-coverage/1.0.1: + /collect-v8-coverage@1.0.1: resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} dev: true - /collection-visit/1.0.0: + /collection-visit@1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} dependencies: @@ -4423,37 +4489,37 @@ packages: object-visit: 1.0.1 dev: true - /color-convert/1.9.3: + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 dev: true - /color-convert/2.0.1: + /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - /color-name/1.1.3: + /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} dev: true - /color-name/1.1.4: + /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - /colorette/2.0.19: + /colorette@2.0.19: resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} dev: true - /combined-stream/1.0.8: + /combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 dev: true - /command-line-args/5.2.1: + /command-line-args@5.2.1: resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} engines: {node: '>=4.0.0'} dependencies: @@ -4463,7 +4529,7 @@ packages: typical: 4.0.0 dev: true - /command-line-usage/7.0.1: + /command-line-usage@7.0.1: resolution: {integrity: sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==} engines: {node: '>=12.20.0'} dependencies: @@ -4473,48 +4539,27 @@ packages: typical: 7.1.1 dev: true - /commander/10.0.0: + /commander@10.0.0: resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==} engines: {node: '>=14'} dev: true - /commander/2.20.3: + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true - /commander/4.1.1: + /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} dev: true - /commitizen/4.3.0: - resolution: {integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==} - engines: {node: '>= 12'} - hasBin: true - dependencies: - cachedir: 2.3.0 - cz-conventional-changelog: 3.3.0_@swc+core@1.3.49 - dedent: 0.7.0 - detect-indent: 6.1.0 - find-node-modules: 2.1.3 - find-root: 1.1.0 - fs-extra: 9.1.0 - glob: 7.2.3 - inquirer: 8.2.5 - is-utf8: 0.2.1 - lodash: 4.17.21 - minimist: 1.2.7 - strip-bom: 4.0.0 - strip-json-comments: 3.1.1 - dev: true - - /commitizen/4.3.0_@swc+core@1.3.49: + /commitizen@4.3.0(@swc/core@1.3.49): resolution: {integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==} engines: {node: '>= 12'} hasBin: true dependencies: cachedir: 2.3.0 - cz-conventional-changelog: 3.3.0_@swc+core@1.3.49 + cz-conventional-changelog: 3.3.0(@swc/core@1.3.49) dedent: 0.7.0 detect-indent: 6.1.0 find-node-modules: 2.1.3 @@ -4532,36 +4577,36 @@ packages: - '@swc/wasm' dev: true - /commondir/1.0.1: + /commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: true - /compare-func/2.0.0: + /compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} dependencies: array-ify: 1.0.0 dot-prop: 5.3.0 dev: true - /component-emitter/1.3.0: + /component-emitter@1.3.0: resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} dev: true - /compressible/2.0.18: + /compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 dev: true - /compression/1.7.4_supports-color@6.1.0: + /compression@1.7.4(supports-color@6.1.0): resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} engines: {node: '>= 0.8.0'} dependencies: accepts: 1.3.8 bytes: 3.0.0 compressible: 2.0.18 - debug: 2.6.9_supports-color@6.1.0 + debug: 2.6.9(supports-color@6.1.0) on-headers: 1.0.2 safe-buffer: 5.1.2 vary: 1.1.2 @@ -4569,28 +4614,28 @@ packages: - supports-color dev: true - /concat-map/0.0.1: + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /connect-history-api-fallback/1.6.0: + /connect-history-api-fallback@1.6.0: resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==} engines: {node: '>=0.8'} dev: true - /content-disposition/0.5.4: + /content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} dependencies: safe-buffer: 5.2.1 dev: true - /content-type/1.0.5: + /content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} dev: true - /conventional-changelog-angular/5.0.13: + /conventional-changelog-angular@5.0.13: resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==} engines: {node: '>=10'} dependencies: @@ -4598,7 +4643,7 @@ packages: q: 1.5.1 dev: true - /conventional-changelog-conventionalcommits/4.6.3: + /conventional-changelog-conventionalcommits@4.6.3: resolution: {integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==} engines: {node: '>=10'} dependencies: @@ -4607,11 +4652,11 @@ packages: q: 1.5.1 dev: true - /conventional-commit-types/3.0.0: + /conventional-commit-types@3.0.0: resolution: {integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==} dev: true - /conventional-commits-parser/3.2.4: + /conventional-commits-parser@3.2.4: resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==} engines: {node: '>=10'} hasBin: true @@ -4624,28 +4669,28 @@ packages: through2: 4.0.2 dev: true - /convert-source-map/1.9.0: + /convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} dev: true - /convert-source-map/2.0.0: + /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true - /cookie-signature/1.0.6: + /cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} dev: true - /cookie/0.4.2: + /cookie@0.4.2: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} dev: true - /cookie/0.5.0: + /cookie@0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} - /cookies/0.8.0: + /cookies@0.8.0: resolution: {integrity: sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==} engines: {node: '>= 0.8'} dependencies: @@ -4653,22 +4698,22 @@ packages: keygrip: 1.1.0 dev: true - /copy-descriptor/0.1.1: + /copy-descriptor@0.1.1: resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} engines: {node: '>=0.10.0'} dev: true - /core-js-compat/3.30.0: + /core-js-compat@3.30.0: resolution: {integrity: sha512-P5A2h/9mRYZFIAP+5Ab8ns6083IyVpSclU74UNvbGVQ8VM7n3n3/g2yF3AkKQ9NXz2O+ioxLbEWKnDtgsFamhg==} dependencies: browserslist: 4.21.5 dev: true - /core-util-is/1.0.3: + /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /cors/2.8.5: + /cors@2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} dependencies: @@ -4676,23 +4721,24 @@ packages: vary: 1.1.2 dev: true - /cosmiconfig-typescript-loader/2.0.2_faublg25f7qpbcz6w4cw6yyzse: + /cosmiconfig-typescript-loader@2.0.2(@swc/core@1.3.49)(@types/node@18.15.11)(cosmiconfig@7.1.0)(typescript@4.9.5): resolution: {integrity: sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@types/node': '*' + cosmiconfig: '>=7' typescript: '>=3' dependencies: '@types/node': 18.15.11 cosmiconfig: 7.1.0 - ts-node: 10.9.1_faublg25f7qpbcz6w4cw6yyzse + ts-node: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true - /cosmiconfig-typescript-loader/4.3.0_zulaepqzabcjiyzbkdbfeduf6u: + /cosmiconfig-typescript-loader@4.3.0(@types/node@18.15.11)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@5.0.4): resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==} engines: {node: '>=12', npm: '>=6'} peerDependencies: @@ -4703,12 +4749,12 @@ packages: dependencies: '@types/node': 18.15.11 cosmiconfig: 8.1.3 - ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e + ts-node: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4) typescript: 5.0.4 dev: true optional: true - /cosmiconfig/7.1.0: + /cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} dependencies: @@ -4719,7 +4765,7 @@ packages: yaml: 1.10.2 dev: true - /cosmiconfig/8.1.3: + /cosmiconfig@8.1.3: resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==} engines: {node: '>=14'} dependencies: @@ -4730,11 +4776,11 @@ packages: dev: true optional: true - /create-require/1.1.1: + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true - /cross-env/7.0.3: + /cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} hasBin: true @@ -4742,7 +4788,7 @@ packages: cross-spawn: 7.0.3 dev: true - /cross-fetch/3.1.5: + /cross-fetch@3.1.5: resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} dependencies: node-fetch: 2.6.7 @@ -4750,7 +4796,7 @@ packages: - encoding dev: true - /cross-spawn/6.0.5: + /cross-spawn@6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} dependencies: @@ -4761,7 +4807,7 @@ packages: which: 1.3.1 dev: true - /cross-spawn/7.0.3: + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} dependencies: @@ -4770,44 +4816,44 @@ packages: which: 2.0.2 dev: true - /cssom/0.3.8: + /cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} dev: true - /cssom/0.5.0: + /cssom@0.5.0: resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} dev: true - /cssstyle/2.3.0: + /cssstyle@2.3.0: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} dependencies: cssom: 0.3.8 dev: true - /cz-conventional-changelog/3.3.0_@swc+core@1.3.49: + /cz-conventional-changelog@3.3.0(@swc/core@1.3.49): resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==} engines: {node: '>= 10'} dependencies: chalk: 2.4.2 - commitizen: 4.3.0 + commitizen: 4.3.0(@swc/core@1.3.49) conventional-commit-types: 3.0.0 lodash.map: 4.6.0 longest: 2.0.1 word-wrap: 1.2.3 optionalDependencies: - '@commitlint/load': 17.5.0_@swc+core@1.3.49 + '@commitlint/load': 17.5.0(@swc/core@1.3.49) transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true - /dargs/7.0.0: + /dargs@7.0.0: resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} engines: {node: '>=8'} dev: true - /data-urls/3.0.2: + /data-urls@3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} dependencies: @@ -4816,26 +4862,15 @@ packages: whatwg-url: 11.0.0 dev: true - /dateformat/4.6.3: + /dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} dev: true - /debounce/1.2.1: + /debounce@1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} dev: true - /debug/2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.0.0 - dev: true - - /debug/2.6.9_supports-color@6.1.0: + /debug@2.6.9(supports-color@6.1.0): resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: supports-color: '*' @@ -4847,18 +4882,7 @@ packages: supports-color: 6.1.0 dev: true - /debug/3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - dev: true - - /debug/3.2.7_supports-color@6.1.0: + /debug@3.2.7(supports-color@6.1.0): resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' @@ -4870,19 +4894,7 @@ packages: supports-color: 6.1.0 dev: true - /debug/4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /debug/4.3.4_supports-color@6.1.0: + /debug@4.3.4(supports-color@6.1.0): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -4895,7 +4907,7 @@ packages: supports-color: 6.1.0 dev: true - /decamelize-keys/1.1.1: + /decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} engines: {node: '>=0.10.0'} dependencies: @@ -4903,29 +4915,29 @@ packages: map-obj: 1.0.1 dev: true - /decamelize/1.2.0: + /decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} dev: true - /decimal.js/10.4.3: + /decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} dev: true - /decode-uri-component/0.2.2: + /decode-uri-component@0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} dev: true - /dedent/0.7.0: + /dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true - /deep-equal/1.0.1: + /deep-equal@1.0.1: resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} dev: true - /deep-equal/1.1.1: + /deep-equal@1.1.1: resolution: {integrity: sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==} dependencies: is-arguments: 1.1.1 @@ -4936,21 +4948,21 @@ packages: regexp.prototype.flags: 1.4.3 dev: true - /deep-extend/0.6.0: + /deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} dev: true - /deep-is/0.1.4: + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /deepmerge/4.3.1: + /deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} dev: true - /default-gateway/4.2.0: + /default-gateway@4.2.0: resolution: {integrity: sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==} engines: {node: '>=6'} dependencies: @@ -4958,17 +4970,17 @@ packages: ip-regex: 2.1.0 dev: true - /defaults/1.0.4: + /defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 - /define-lazy-prop/2.0.0: + /define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} dev: true - /define-properties/1.2.0: + /define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} dependencies: @@ -4976,21 +4988,21 @@ packages: object-keys: 1.1.1 dev: true - /define-property/0.2.5: + /define-property@0.2.5: resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} engines: {node: '>=0.10.0'} dependencies: is-descriptor: 0.1.6 dev: true - /define-property/1.0.0: + /define-property@1.0.0: resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} engines: {node: '>=0.10.0'} dependencies: is-descriptor: 1.0.2 dev: true - /define-property/2.0.2: + /define-property@2.0.2: resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} engines: {node: '>=0.10.0'} dependencies: @@ -4998,7 +5010,7 @@ packages: isobject: 3.0.1 dev: true - /del/4.1.1: + /del@4.1.1: resolution: {integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==} engines: {node: '>=6'} dependencies: @@ -5011,111 +5023,111 @@ packages: rimraf: 2.7.1 dev: true - /delayed-stream/1.0.0: + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} dev: true - /delegates/1.0.0: + /delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} dev: true - /depd/1.1.2: + /depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} dev: true - /depd/2.0.0: + /depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} dev: true - /destroy/1.2.0: + /destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dev: true - /detect-file/1.0.0: + /detect-file@1.0.0: resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} engines: {node: '>=0.10.0'} dev: true - /detect-indent/6.1.0: + /detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} dev: true - /detect-newline/3.1.0: + /detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} dev: true - /detect-node/2.1.0: + /detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} dev: true - /diff-sequences/29.4.3: + /diff-sequences@29.4.3: resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /diff/4.0.2: + /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} dev: true - /dir-glob/3.0.1: + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} dependencies: path-type: 4.0.0 dev: true - /dns-equal/1.0.0: + /dns-equal@1.0.0: resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} dev: true - /dns-packet/1.3.4: + /dns-packet@1.3.4: resolution: {integrity: sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==} dependencies: ip: 1.1.8 safe-buffer: 5.2.1 dev: true - /dns-txt/2.0.2: + /dns-txt@2.0.2: resolution: {integrity: sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==} dependencies: buffer-indexof: 1.1.1 dev: true - /doctrine/3.0.0: + /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 dev: true - /domexception/4.0.0: + /domexception@4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} dependencies: webidl-conversions: 7.0.0 dev: true - /dot-prop/5.3.0: + /dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} dependencies: is-obj: 2.0.0 dev: true - /duplexer2/0.1.4: + /duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: readable-stream: 2.3.8 dev: true - /duplexify/4.1.2: + /duplexify@4.1.2: resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} dependencies: end-of-stream: 1.4.4 @@ -5124,56 +5136,56 @@ packages: stream-shift: 1.0.1 dev: true - /eastasianwidth/0.2.0: + /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /ee-first/1.1.1: + /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true - /electron-to-chromium/1.4.361: + /electron-to-chromium@1.4.361: resolution: {integrity: sha512-VocVwjPp05HUXzf3xmL0boRn5b0iyqC7amtDww84Jb1QJNPBc7F69gJyEeXRoriLBC4a5pSyckdllrXAg4mmRA==} dev: true - /emittery/0.13.1: + /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} dev: true - /emoji-regex/7.0.3: + /emoji-regex@7.0.3: resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} dev: true - /emoji-regex/8.0.0: + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - /emoji-regex/9.2.2: + /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true - /emojis-list/3.0.0: + /emojis-list@3.0.0: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} engines: {node: '>= 4'} dev: true - /encodeurl/1.0.2: + /encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} dev: true - /end-of-stream/1.4.4: + /end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 dev: true - /engine.io-parser/5.0.6: + /engine.io-parser@5.0.6: resolution: {integrity: sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==} engines: {node: '>=10.0.0'} dev: true - /engine.io/6.4.1: + /engine.io@6.4.1: resolution: {integrity: sha512-JFYQurD/nbsA5BSPmbaOSLa3tSVj8L6o4srSwXXY3NqE+gGUNmmPTbhn8tjzcCtSqhFgIeqef81ngny8JM25hw==} engines: {node: '>=10.0.0'} dependencies: @@ -5184,7 +5196,7 @@ packages: base64id: 2.0.0 cookie: 0.4.2 cors: 2.8.5 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) engine.io-parser: 5.0.6 ws: 8.11.0 transitivePeerDependencies: @@ -5193,7 +5205,7 @@ packages: - utf-8-validate dev: true - /enhanced-resolve/5.12.0: + /enhanced-resolve@5.12.0: resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} engines: {node: '>=10.13.0'} dependencies: @@ -5201,32 +5213,32 @@ packages: tapable: 2.2.1 dev: true - /enquirer/2.3.6: + /enquirer@2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} dependencies: ansi-colors: 4.1.3 dev: true - /entities/4.4.0: + /entities@4.4.0: resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} engines: {node: '>=0.12'} dev: true - /errno/0.1.8: + /errno@0.1.8: resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} hasBin: true dependencies: prr: 1.0.1 dev: true - /error-ex/1.3.2: + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 dev: true - /es-abstract/1.21.2: + /es-abstract@1.21.2: resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} engines: {node: '>= 0.4'} dependencies: @@ -5266,15 +5278,15 @@ packages: which-typed-array: 1.1.9 dev: true - /es-array-method-boxes-properly/1.0.0: + /es-array-method-boxes-properly@1.0.0: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} dev: true - /es-module-lexer/1.2.1: + /es-module-lexer@1.2.1: resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==} dev: true - /es-set-tostringtag/2.0.1: + /es-set-tostringtag@2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} dependencies: @@ -5283,7 +5295,7 @@ packages: has-tostringtag: 1.0.0 dev: true - /es-to-primitive/1.2.1: + /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} dependencies: @@ -5292,7 +5304,7 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild-loader/2.21.0_webpack@5.79.0: + /esbuild-loader@2.21.0(webpack@5.79.0): resolution: {integrity: sha512-k7ijTkCT43YBSZ6+fBCW1Gin7s46RrJ0VQaM8qA7lq7W+OLsGgtLyFV8470FzYi/4TeDexniTBTPTwZUnXXR5g==} peerDependencies: webpack: ^4.40.0 || ^5.0.0 @@ -5302,11 +5314,11 @@ packages: json5: 2.2.3 loader-utils: 2.0.4 tapable: 2.2.1 - webpack: 5.79.0_57233mj27fjz7synoeubptyy7e + webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) webpack-sources: 1.4.3 dev: true - /esbuild/0.16.17: + /esbuild@0.16.17: resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==} engines: {node: '>=12'} hasBin: true @@ -5336,7 +5348,7 @@ packages: '@esbuild/win32-x64': 0.16.17 dev: true - /esbuild/0.17.16: + /esbuild@0.17.16: resolution: {integrity: sha512-aeSuUKr9aFVY9Dc8ETVELGgkj4urg5isYx8pLf4wlGgB0vTFjxJQdHnNH6Shmx4vYYrOTLCHtRI5i1XZ9l2Zcg==} engines: {node: '>=12'} hasBin: true @@ -5366,29 +5378,29 @@ packages: '@esbuild/win32-x64': 0.17.16 dev: true - /escalade/3.1.1: + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} - /escape-html/1.0.3: + /escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} dev: true - /escape-string-regexp/1.0.5: + /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - /escape-string-regexp/2.0.0: + /escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} dev: true - /escape-string-regexp/4.0.0: + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} dev: true - /escodegen/2.0.0: + /escodegen@2.0.0: resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} engines: {node: '>=6.0'} hasBin: true @@ -5401,7 +5413,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-prettier/8.8.0_eslint@7.32.0: + /eslint-config-prettier@8.8.0(eslint@7.32.0): resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} hasBin: true peerDependencies: @@ -5410,7 +5422,7 @@ packages: eslint: 7.32.0 dev: true - /eslint-plugin-prettier/3.4.1_mouiu7tdcm2dtderipseaggmee: + /eslint-plugin-prettier@3.4.1(eslint-config-prettier@8.8.0)(eslint@7.32.0)(prettier@2.8.7): resolution: {integrity: sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==} engines: {node: '>=6.0.0'} peerDependencies: @@ -5422,12 +5434,12 @@ packages: optional: true dependencies: eslint: 7.32.0 - eslint-config-prettier: 8.8.0_eslint@7.32.0 + eslint-config-prettier: 8.8.0(eslint@7.32.0) prettier: 2.8.7 prettier-linter-helpers: 1.0.0 dev: true - /eslint-scope/5.1.1: + /eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} dependencies: @@ -5435,29 +5447,29 @@ packages: estraverse: 4.3.0 dev: true - /eslint-utils/2.1.0: + /eslint-utils@2.1.0: resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} engines: {node: '>=6'} dependencies: eslint-visitor-keys: 1.3.0 dev: true - /eslint-visitor-keys/1.3.0: + /eslint-visitor-keys@1.3.0: resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} engines: {node: '>=4'} dev: true - /eslint-visitor-keys/2.1.0: + /eslint-visitor-keys@2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} dev: true - /eslint-visitor-keys/3.4.0: + /eslint-visitor-keys@3.4.0: resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint/7.32.0: + /eslint@7.32.0: resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} engines: {node: ^10.12.0 || >=12.0.0} hasBin: true @@ -5468,7 +5480,7 @@ packages: ajv: 6.12.6 chalk: 4.1.1 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) doctrine: 3.0.0 enquirer: 2.3.6 escape-string-regexp: 4.0.0 @@ -5506,74 +5518,74 @@ packages: - supports-color dev: true - /espree/7.3.1: + /espree@7.3.1: resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: acorn: 7.4.1 - acorn-jsx: 5.3.2_acorn@7.4.1 + acorn-jsx: 5.3.2(acorn@7.4.1) eslint-visitor-keys: 1.3.0 dev: true - /esprima/4.0.1: + /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true dev: true - /esquery/1.5.0: + /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 dev: true - /esrecurse/4.3.0: + /esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 dev: true - /estraverse/4.3.0: + /estraverse@4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} dev: true - /estraverse/5.3.0: + /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} dev: true - /estree-walker/1.0.1: + /estree-walker@1.0.1: resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} dev: true - /esutils/2.0.3: + /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} dev: true - /etag/1.8.1: + /etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} dev: true - /eventemitter3/4.0.7: + /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} dev: true - /events/3.3.0: + /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} dev: true - /eventsource/2.0.2: + /eventsource@2.0.2: resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==} engines: {node: '>=12.0.0'} dev: true - /execa/1.0.0: + /execa@1.0.0: resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} engines: {node: '>=6'} dependencies: @@ -5586,7 +5598,7 @@ packages: strip-eof: 1.0.0 dev: true - /execa/5.1.1: + /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} dependencies: @@ -5601,7 +5613,7 @@ packages: strip-final-newline: 2.0.0 dev: true - /execa/7.1.1: + /execa@7.1.1: resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==} engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} dependencies: @@ -5616,34 +5628,34 @@ packages: strip-final-newline: 3.0.0 dev: true - /exit/0.1.2: + /exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} dev: true - /expand-brackets/2.1.4_supports-color@6.1.0: + /expand-brackets@2.1.4(supports-color@6.1.0): resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} engines: {node: '>=0.10.0'} dependencies: - debug: 2.6.9_supports-color@6.1.0 + debug: 2.6.9(supports-color@6.1.0) define-property: 0.2.5 extend-shallow: 2.0.1 posix-character-classes: 0.1.1 regex-not: 1.0.2 - snapdragon: 0.8.2_supports-color@6.1.0 + snapdragon: 0.8.2(supports-color@6.1.0) to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true - /expand-tilde/2.0.2: + /expand-tilde@2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} dependencies: homedir-polyfill: 1.0.3 dev: true - /expect/29.5.0: + /expect@29.5.0: resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -5654,62 +5666,23 @@ packages: jest-util: 29.5.0 dev: true - /express/4.18.2: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} - engines: {node: '>= 0.10.0'} - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.1 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.5.0 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.2.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.11.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /express/4.18.2_supports-color@6.1.0: + /express@4.18.2(supports-color@6.1.0): resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} engines: {node: '>= 0.10.0'} dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.1_supports-color@6.1.0 + body-parser: 1.20.1(supports-color@6.1.0) content-disposition: 0.5.4 content-type: 1.0.5 cookie: 0.5.0 cookie-signature: 1.0.6 - debug: 2.6.9_supports-color@6.1.0 + debug: 2.6.9(supports-color@6.1.0) depd: 2.0.0 encodeurl: 1.0.2 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.2.0_supports-color@6.1.0 + finalhandler: 1.2.0(supports-color@6.1.0) fresh: 0.5.2 http-errors: 2.0.0 merge-descriptors: 1.0.1 @@ -5721,8 +5694,8 @@ packages: qs: 6.11.0 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.18.0_supports-color@6.1.0 - serve-static: 1.15.0_supports-color@6.1.0 + send: 0.18.0(supports-color@6.1.0) + serve-static: 1.15.0(supports-color@6.1.0) setprototypeof: 1.2.0 statuses: 2.0.1 type-is: 1.6.18 @@ -5732,14 +5705,14 @@ packages: - supports-color dev: true - /extend-shallow/2.0.1: + /extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} dependencies: is-extendable: 0.1.1 dev: true - /extend-shallow/3.0.2: + /extend-shallow@3.0.2: resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} engines: {node: '>=0.10.0'} dependencies: @@ -5747,7 +5720,7 @@ packages: is-extendable: 1.0.1 dev: true - /external-editor/3.1.0: + /external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} dependencies: @@ -5755,31 +5728,31 @@ packages: iconv-lite: 0.4.24 tmp: 0.0.33 - /extglob/2.0.4_supports-color@6.1.0: + /extglob@2.0.4(supports-color@6.1.0): resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} engines: {node: '>=0.10.0'} dependencies: array-unique: 0.3.2 define-property: 1.0.0 - expand-brackets: 2.1.4_supports-color@6.1.0 + expand-brackets: 2.1.4(supports-color@6.1.0) extend-shallow: 2.0.1 fragment-cache: 0.2.1 regex-not: 1.0.2 - snapdragon: 0.8.2_supports-color@6.1.0 + snapdragon: 0.8.2(supports-color@6.1.0) to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true - /fast-deep-equal/3.1.3: + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-diff/1.2.0: + /fast-diff@1.2.0: resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} dev: true - /fast-glob/3.2.12: + /fast-glob@3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} engines: {node: '>=8.6.0'} dependencies: @@ -5790,56 +5763,56 @@ packages: micromatch: 4.0.5 dev: true - /fast-json-stable-stringify/2.1.0: + /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true - /fast-levenshtein/2.0.6: + /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fast-redact/3.1.2: + /fast-redact@3.1.2: resolution: {integrity: sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==} engines: {node: '>=6'} dev: true - /fast-safe-stringify/2.1.1: + /fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true - /fastq/1.15.0: + /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 dev: true - /faye-websocket/0.11.4: + /faye-websocket@0.11.4: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} engines: {node: '>=0.8.0'} dependencies: websocket-driver: 0.7.4 dev: true - /fb-watchman/2.0.2: + /fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 dev: true - /figures/3.2.0: + /figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} dependencies: escape-string-regexp: 1.0.5 - /file-entry-cache/6.0.1: + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.0.4 dev: true - /fill-range/4.0.0: + /fill-range@4.0.0: resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} engines: {node: '>=0.10.0'} dependencies: @@ -5849,32 +5822,17 @@ packages: to-regex-range: 2.1.1 dev: true - /fill-range/7.0.1: + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - /finalhandler/1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /finalhandler/1.2.0_supports-color@6.1.0: + /finalhandler@1.2.0(supports-color@6.1.0): resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} engines: {node: '>= 0.8'} dependencies: - debug: 2.6.9_supports-color@6.1.0 + debug: 2.6.9(supports-color@6.1.0) encodeurl: 1.0.2 escape-html: 1.0.3 on-finished: 2.4.1 @@ -5885,7 +5843,7 @@ packages: - supports-color dev: true - /find-cache-dir/3.3.2: + /find-cache-dir@3.3.2: resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} engines: {node: '>=8'} dependencies: @@ -5894,32 +5852,32 @@ packages: pkg-dir: 4.2.0 dev: true - /find-node-modules/2.1.3: + /find-node-modules@2.1.3: resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==} dependencies: findup-sync: 4.0.0 merge: 2.1.1 dev: true - /find-replace/3.0.0: + /find-replace@3.0.0: resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} engines: {node: '>=4.0.0'} dependencies: array-back: 3.1.0 dev: true - /find-root/1.1.0: + /find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} dev: true - /find-up/3.0.0: + /find-up@3.0.0: resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} engines: {node: '>=6'} dependencies: locate-path: 3.0.0 dev: true - /find-up/4.1.0: + /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} dependencies: @@ -5927,7 +5885,7 @@ packages: path-exists: 4.0.0 dev: true - /find-up/5.0.0: + /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} dependencies: @@ -5935,7 +5893,7 @@ packages: path-exists: 4.0.0 dev: true - /findup-sync/4.0.0: + /findup-sync@4.0.0: resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==} engines: {node: '>= 8'} dependencies: @@ -5945,7 +5903,7 @@ packages: resolve-dir: 1.0.1 dev: true - /flat-cache/3.0.4: + /flat-cache@3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: @@ -5953,11 +5911,11 @@ packages: rimraf: 3.0.2 dev: true - /flatted/3.2.7: + /flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true - /follow-redirects/1.15.2_debug@4.3.4: + /follow-redirects@1.15.2(debug@4.3.4): resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} engines: {node: '>=4.0'} peerDependencies: @@ -5966,21 +5924,21 @@ packages: debug: optional: true dependencies: - debug: 4.3.4_supports-color@6.1.0 + debug: 4.3.4(supports-color@6.1.0) dev: true - /for-each/0.3.3: + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 dev: true - /for-in/1.0.2: + /for-in@1.0.2: resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} engines: {node: '>=0.10.0'} dev: true - /form-data/3.0.1: + /form-data@3.0.1: resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} engines: {node: '>= 6'} dependencies: @@ -5989,7 +5947,7 @@ packages: mime-types: 2.1.35 dev: true - /form-data/4.0.0: + /form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} dependencies: @@ -5998,7 +5956,7 @@ packages: mime-types: 2.1.35 dev: true - /formdata-node/4.4.1: + /formdata-node@4.4.1: resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} engines: {node: '>= 12.20'} dependencies: @@ -6006,24 +5964,24 @@ packages: web-streams-polyfill: 4.0.0-beta.3 dev: false - /forwarded/0.2.0: + /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} dev: true - /fragment-cache/0.2.1: + /fragment-cache@0.2.1: resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} engines: {node: '>=0.10.0'} dependencies: map-cache: 0.2.2 dev: true - /fresh/0.5.2: + /fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} dev: true - /fs-extra/10.1.0: + /fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} dependencies: @@ -6032,7 +5990,7 @@ packages: universalify: 2.0.0 dev: true - /fs-extra/9.1.0: + /fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} dependencies: @@ -6042,26 +6000,26 @@ packages: universalify: 2.0.0 dev: true - /fs-monkey/1.0.3: + /fs-monkey@1.0.3: resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} dev: true - /fs-readdir-recursive/1.1.0: + /fs-readdir-recursive@1.1.0: resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} dev: true - /fs-teardown/0.3.2: + /fs-teardown@0.3.2: resolution: {integrity: sha512-5xJQGMsGjHdZJ5yw/eyZEkAIHYwQQA6T34PfXUCl5JOeizfLWnz3gBEVfEidgrnnYZKTBW3L7aPrB3aI8f0Vqw==} dependencies: fs-extra: 10.1.0 outvariant: 1.4.0 dev: true - /fs.realpath/1.0.0: + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /fsevents/2.1.3: + /fsevents@2.1.3: resolution: {integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] @@ -6069,7 +6027,7 @@ packages: requiresBuild: true optional: true - /fsevents/2.3.2: + /fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] @@ -6077,11 +6035,11 @@ packages: dev: true optional: true - /function-bind/1.1.1: + /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true - /function.prototype.name/1.1.5: + /function.prototype.name@1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} engines: {node: '>= 0.4'} dependencies: @@ -6091,24 +6049,24 @@ packages: functions-have-names: 1.2.3 dev: true - /functional-red-black-tree/1.0.1: + /functional-red-black-tree@1.0.1: resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} dev: true - /functions-have-names/1.2.3: + /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true - /gensync/1.0.0-beta.2: + /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} dev: true - /get-caller-file/2.0.5: + /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - /get-intrinsic/1.2.0: + /get-intrinsic@1.2.0: resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} dependencies: function-bind: 1.1.1 @@ -6116,24 +6074,24 @@ packages: has-symbols: 1.0.3 dev: true - /get-package-type/0.1.0: + /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} dev: true - /get-stream/4.1.0: + /get-stream@4.1.0: resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} engines: {node: '>=6'} dependencies: pump: 3.0.0 dev: true - /get-stream/6.0.1: + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} dev: true - /get-symbol-description/1.0.0: + /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: @@ -6141,12 +6099,12 @@ packages: get-intrinsic: 1.2.0 dev: true - /get-value/2.0.6: + /get-value@2.0.6: resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} engines: {node: '>=0.10.0'} dev: true - /git-log-parser/1.2.0: + /git-log-parser@1.2.0: resolution: {integrity: sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==} dependencies: argv-formatter: 1.0.0 @@ -6157,7 +6115,7 @@ packages: traverse: 0.6.7 dev: true - /git-raw-commits/2.0.11: + /git-raw-commits@2.0.11: resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} engines: {node: '>=10'} hasBin: true @@ -6169,17 +6127,17 @@ packages: through2: 4.0.2 dev: true - /glob-parent/5.1.2: + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - /glob-to-regexp/0.4.1: + /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob/7.1.6: + /glob@7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} dependencies: fs.realpath: 1.0.0 @@ -6190,7 +6148,7 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob/7.2.3: + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 @@ -6201,7 +6159,7 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob/9.3.5: + /glob@9.3.5: resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} engines: {node: '>=16 || 14 >=14.17'} dependencies: @@ -6211,14 +6169,14 @@ packages: path-scurry: 1.6.4 dev: true - /global-dirs/0.1.1: + /global-dirs@0.1.1: resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} engines: {node: '>=4'} dependencies: ini: 1.3.8 dev: true - /global-modules/1.0.0: + /global-modules@1.0.0: resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} engines: {node: '>=0.10.0'} dependencies: @@ -6227,7 +6185,7 @@ packages: resolve-dir: 1.0.1 dev: true - /global-prefix/1.0.2: + /global-prefix@1.0.2: resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} engines: {node: '>=0.10.0'} dependencies: @@ -6238,26 +6196,26 @@ packages: which: 1.3.1 dev: true - /globals/11.12.0: + /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} dev: true - /globals/13.20.0: + /globals@13.20.0: resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true - /globalthis/1.0.3: + /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.0 dev: true - /globby/11.1.0: + /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} dependencies: @@ -6269,7 +6227,7 @@ packages: slash: 3.0.0 dev: true - /globby/6.1.0: + /globby@6.1.0: resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} engines: {node: '>=0.10.0'} dependencies: @@ -6280,71 +6238,71 @@ packages: pinkie-promise: 2.0.1 dev: true - /gopd/1.0.1: + /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.0 dev: true - /graceful-fs/4.2.11: + /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true - /grapheme-splitter/1.0.4: + /grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true - /graphql/16.6.0: + /graphql@16.6.0: resolution: {integrity: sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} dev: false - /handle-thing/2.0.1: + /handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} dev: true - /hard-rejection/2.1.0: + /hard-rejection@2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} dev: true - /has-bigints/1.0.2: + /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true - /has-flag/3.0.0: + /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} dev: true - /has-flag/4.0.0: + /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-property-descriptors/1.0.0: + /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: get-intrinsic: 1.2.0 dev: true - /has-proto/1.0.1: + /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} dev: true - /has-symbols/1.0.3: + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: true - /has-tostringtag/1.0.0: + /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /has-value/0.3.1: + /has-value@0.3.1: resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} engines: {node: '>=0.10.0'} dependencies: @@ -6353,7 +6311,7 @@ packages: isobject: 2.1.0 dev: true - /has-value/1.0.0: + /has-value@1.0.0: resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} engines: {node: '>=0.10.0'} dependencies: @@ -6362,12 +6320,12 @@ packages: isobject: 3.0.1 dev: true - /has-values/0.1.4: + /has-values@0.1.4: resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} engines: {node: '>=0.10.0'} dev: true - /has-values/1.0.0: + /has-values@1.0.0: resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} engines: {node: '>=0.10.0'} dependencies: @@ -6375,35 +6333,35 @@ packages: kind-of: 4.0.0 dev: true - /has/1.0.3: + /has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 dev: true - /headers-polyfill/3.1.2: + /headers-polyfill@3.1.2: resolution: {integrity: sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==} - /homedir-polyfill/1.0.3: + /homedir-polyfill@1.0.3: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} dependencies: parse-passwd: 1.0.0 dev: true - /hosted-git-info/2.8.9: + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true - /hosted-git-info/4.1.0: + /hosted-git-info@4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} dependencies: lru-cache: 6.0.0 dev: true - /hpack.js/2.1.6: + /hpack.js@2.1.6: resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} dependencies: inherits: 2.0.4 @@ -6412,22 +6370,22 @@ packages: wbuf: 1.7.3 dev: true - /html-encoding-sniffer/3.0.0: + /html-encoding-sniffer@3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} dependencies: whatwg-encoding: 2.0.0 dev: true - /html-entities/1.4.0: + /html-entities@1.4.0: resolution: {integrity: sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==} dev: true - /html-escaper/2.0.2: + /html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - /http-assert/1.5.0: + /http-assert@1.5.0: resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} engines: {node: '>= 0.8'} dependencies: @@ -6435,11 +6393,11 @@ packages: http-errors: 1.8.1 dev: true - /http-deceiver/1.2.7: + /http-deceiver@1.2.7: resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} dev: true - /http-errors/1.6.3: + /http-errors@1.6.3: resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} engines: {node: '>= 0.6'} dependencies: @@ -6449,7 +6407,7 @@ packages: statuses: 1.5.0 dev: true - /http-errors/1.8.1: + /http-errors@1.8.1: resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} engines: {node: '>= 0.6'} dependencies: @@ -6460,7 +6418,7 @@ packages: toidentifier: 1.0.1 dev: true - /http-errors/2.0.0: + /http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} dependencies: @@ -6471,92 +6429,92 @@ packages: toidentifier: 1.0.1 dev: true - /http-parser-js/0.5.8: + /http-parser-js@0.5.8: resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} dev: true - /http-proxy-agent/5.0.0: + /http-proxy-agent@5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) transitivePeerDependencies: - supports-color dev: true - /http-proxy-middleware/0.19.1_tmpgdztspuwvsxzgjkhoqk7duq: + /http-proxy-middleware@0.19.1(debug@4.3.4)(supports-color@6.1.0): resolution: {integrity: sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==} engines: {node: '>=4.0.0'} dependencies: - http-proxy: 1.18.1_debug@4.3.4 + http-proxy: 1.18.1(debug@4.3.4) is-glob: 4.0.3 lodash: 4.17.21 - micromatch: 3.1.10_supports-color@6.1.0 + micromatch: 3.1.10(supports-color@6.1.0) transitivePeerDependencies: - debug - supports-color dev: true - /http-proxy/1.18.1_debug@4.3.4: + /http-proxy@1.18.1(debug@4.3.4): resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.2_debug@4.3.4 + follow-redirects: 1.15.2(debug@4.3.4) requires-port: 1.0.0 transitivePeerDependencies: - debug dev: true - /https-proxy-agent/5.0.1: + /https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) transitivePeerDependencies: - supports-color dev: true - /human-signals/2.1.0: + /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} dev: true - /human-signals/4.3.1: + /human-signals@4.3.1: resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} engines: {node: '>=14.18.0'} dev: true - /iconv-lite/0.4.24: + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 - /iconv-lite/0.6.3: + /iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 dev: true - /ieee754/1.2.1: + /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - /ignore/4.0.6: + /ignore@4.0.6: resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} engines: {node: '>= 4'} dev: true - /ignore/5.2.4: + /ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} dev: true - /import-fresh/3.3.0: + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} dependencies: @@ -6564,7 +6522,7 @@ packages: resolve-from: 4.0.0 dev: true - /import-local/2.0.0: + /import-local@2.0.0: resolution: {integrity: sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==} engines: {node: '>=6'} hasBin: true @@ -6573,7 +6531,7 @@ packages: resolve-cwd: 2.0.0 dev: true - /import-local/3.1.0: + /import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} hasBin: true @@ -6582,35 +6540,35 @@ packages: resolve-cwd: 3.0.0 dev: true - /imurmurhash/0.1.4: + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} dev: true - /indent-string/4.0.0: + /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} dev: true - /inflight/1.0.6: + /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true - /inherits/2.0.3: + /inherits@2.0.3: resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} dev: true - /inherits/2.0.4: + /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /ini/1.3.8: + /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true - /inquirer/8.2.5: + /inquirer@8.2.5: resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} engines: {node: '>=12.0.0'} dependencies: @@ -6630,7 +6588,7 @@ packages: through: 2.3.8 wrap-ansi: 7.0.0 - /internal-ip/4.3.0: + /internal-ip@4.3.0: resolution: {integrity: sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==} engines: {node: '>=6'} dependencies: @@ -6638,7 +6596,7 @@ packages: ipaddr.js: 1.9.1 dev: true - /internal-slot/1.0.5: + /internal-slot@1.0.5: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} dependencies: @@ -6647,40 +6605,40 @@ packages: side-channel: 1.0.4 dev: true - /ip-regex/2.1.0: + /ip-regex@2.1.0: resolution: {integrity: sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==} engines: {node: '>=4'} dev: true - /ip/1.1.8: + /ip@1.1.8: resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==} dev: true - /ipaddr.js/1.9.1: + /ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} dev: true - /is-absolute-url/3.0.3: + /is-absolute-url@3.0.3: resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} engines: {node: '>=8'} dev: true - /is-accessor-descriptor/0.1.6: + /is-accessor-descriptor@0.1.6: resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /is-accessor-descriptor/1.0.0: + /is-accessor-descriptor@1.0.0: resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} engines: {node: '>=0.10.0'} dependencies: kind-of: 6.0.3 dev: true - /is-arguments/1.1.1: + /is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: @@ -6688,7 +6646,7 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-array-buffer/3.0.2: + /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: call-bind: 1.0.2 @@ -6696,23 +6654,23 @@ packages: is-typed-array: 1.1.10 dev: true - /is-arrayish/0.2.1: + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true - /is-bigint/1.0.4: + /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 dev: true - /is-binary-path/2.1.0: + /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 - /is-boolean-object/1.1.2: + /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: @@ -6720,50 +6678,50 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-buffer/1.1.6: + /is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: true - /is-builtin-module/3.2.1: + /is-builtin-module@3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} dependencies: builtin-modules: 3.3.0 dev: true - /is-callable/1.2.7: + /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} dev: true - /is-core-module/2.12.0: + /is-core-module@2.12.0: resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} dependencies: has: 1.0.3 dev: true - /is-data-descriptor/0.1.4: + /is-data-descriptor@0.1.4: resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /is-data-descriptor/1.0.0: + /is-data-descriptor@1.0.0: resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} engines: {node: '>=0.10.0'} dependencies: kind-of: 6.0.3 dev: true - /is-date-object/1.0.5: + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-descriptor/0.1.6: + /is-descriptor@0.1.6: resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} engines: {node: '>=0.10.0'} dependencies: @@ -6772,7 +6730,7 @@ packages: kind-of: 5.1.0 dev: true - /is-descriptor/1.0.2: + /is-descriptor@1.0.2: resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==} engines: {node: '>=0.10.0'} dependencies: @@ -6781,136 +6739,136 @@ packages: kind-of: 6.0.3 dev: true - /is-docker/2.2.1: + /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true dev: true - /is-extendable/0.1.1: + /is-extendable@0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} dev: true - /is-extendable/1.0.1: + /is-extendable@1.0.1: resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} engines: {node: '>=0.10.0'} dependencies: is-plain-object: 2.0.4 dev: true - /is-extglob/2.1.1: + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - /is-fullwidth-code-point/2.0.0: + /is-fullwidth-code-point@2.0.0: resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} engines: {node: '>=4'} dev: true - /is-fullwidth-code-point/3.0.0: + /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - /is-fullwidth-code-point/4.0.0: + /is-fullwidth-code-point@4.0.0: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} dev: true - /is-generator-fn/2.1.0: + /is-generator-fn@2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} dev: true - /is-generator-function/1.0.10: + /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-glob/4.0.3: + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - /is-interactive/1.0.0: + /is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} - /is-module/1.0.0: + /is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} dev: true - /is-negative-zero/2.0.2: + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} dev: true - /is-node-process/1.2.0: + /is-node-process@1.2.0: resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} dev: false - /is-number-object/1.0.7: + /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-number/3.0.0: + /is-number@3.0.0: resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /is-number/7.0.0: + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - /is-obj/2.0.0: + /is-obj@2.0.0: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} dev: true - /is-path-cwd/2.2.0: + /is-path-cwd@2.2.0: resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} engines: {node: '>=6'} dev: true - /is-path-in-cwd/2.1.0: + /is-path-in-cwd@2.1.0: resolution: {integrity: sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==} engines: {node: '>=6'} dependencies: is-path-inside: 2.1.0 dev: true - /is-path-inside/2.1.0: + /is-path-inside@2.1.0: resolution: {integrity: sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==} engines: {node: '>=6'} dependencies: path-is-inside: 1.0.2 dev: true - /is-plain-obj/1.1.0: + /is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} dev: true - /is-plain-object/2.0.4: + /is-plain-object@2.0.4: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true - /is-potential-custom-element-name/1.0.1: + /is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true - /is-regex/1.1.4: + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: @@ -6918,49 +6876,49 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-shared-array-buffer/1.0.2: + /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.2 dev: true - /is-stream/1.1.0: + /is-stream@1.1.0: resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} engines: {node: '>=0.10.0'} dev: true - /is-stream/2.0.1: + /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} dev: true - /is-stream/3.0.0: + /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /is-string/1.0.7: + /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-symbol/1.0.4: + /is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /is-text-path/1.0.1: + /is-text-path@1.0.1: resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} engines: {node: '>=0.10.0'} dependencies: text-extensions: 1.9.0 dev: true - /is-typed-array/1.1.10: + /is-typed-array@1.1.10: resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} engines: {node: '>= 0.4'} dependencies: @@ -6971,63 +6929,63 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-unicode-supported/0.1.0: + /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} - /is-utf8/0.2.1: + /is-utf8@0.2.1: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} dev: true - /is-weakref/1.0.2: + /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 dev: true - /is-windows/1.0.2: + /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} dev: true - /is-wsl/1.1.0: + /is-wsl@1.1.0: resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} engines: {node: '>=4'} dev: true - /is-wsl/2.2.0: + /is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} dependencies: is-docker: 2.2.1 dev: true - /isarray/1.0.0: + /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true - /isbinaryfile/5.0.0: + /isbinaryfile@5.0.0: resolution: {integrity: sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==} engines: {node: '>= 14.0.0'} dev: true - /isexe/2.0.0: + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /isobject/2.1.0: + /isobject@2.1.0: resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} engines: {node: '>=0.10.0'} dependencies: isarray: 1.0.0 dev: true - /isobject/3.0.1: + /isobject@3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} dev: true - /issue-parser/6.0.0: + /issue-parser@6.0.0: resolution: {integrity: sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==} engines: {node: '>=10.13'} dependencies: @@ -7038,12 +6996,12 @@ packages: lodash.uniqby: 4.7.0 dev: true - /istanbul-lib-coverage/3.2.0: + /istanbul-lib-coverage@3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} dev: true - /istanbul-lib-instrument/5.2.1: + /istanbul-lib-instrument@5.2.1: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: @@ -7056,7 +7014,7 @@ packages: - supports-color dev: true - /istanbul-lib-report/3.0.0: + /istanbul-lib-report@3.0.0: resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} engines: {node: '>=8'} dependencies: @@ -7065,18 +7023,18 @@ packages: supports-color: 7.2.0 dev: true - /istanbul-lib-source-maps/4.0.1: + /istanbul-lib-source-maps@4.0.1: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) istanbul-lib-coverage: 3.2.0 source-map: 0.6.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-reports/3.1.5: + /istanbul-reports@3.1.5: resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} engines: {node: '>=8'} dependencies: @@ -7084,7 +7042,7 @@ packages: istanbul-lib-report: 3.0.0 dev: true - /jest-changed-files/29.5.0: + /jest-changed-files@29.5.0: resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7092,7 +7050,7 @@ packages: p-limit: 3.1.0 dev: true - /jest-circus/29.5.0: + /jest-circus@29.5.0: resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7120,7 +7078,7 @@ packages: - supports-color dev: true - /jest-cli/29.5.0_rrli7kzx2akox3oq6aahu3rvje: + /jest-cli@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -7130,14 +7088,14 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.5.0_ts-node@10.9.1 + '@jest/core': 29.5.0(ts-node@10.9.1) '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 chalk: 4.1.1 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.5.0_rrli7kzx2akox3oq6aahu3rvje + jest-config: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) jest-util: 29.5.0 jest-validate: 29.5.0 prompts: 2.4.2 @@ -7148,7 +7106,7 @@ packages: - ts-node dev: true - /jest-config/29.5.0_rrli7kzx2akox3oq6aahu3rvje: + /jest-config@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -7164,7 +7122,7 @@ packages: '@jest/test-sequencer': 29.5.0 '@jest/types': 29.5.0 '@types/node': 18.15.11 - babel-jest: 29.5.0_@babel+core@7.21.4 + babel-jest: 29.5.0(@babel/core@7.21.4) chalk: 4.1.1 ci-info: 3.8.0 deepmerge: 4.3.1 @@ -7183,12 +7141,12 @@ packages: pretty-format: 29.5.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e + ts-node: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4) transitivePeerDependencies: - supports-color dev: true - /jest-diff/29.5.0: + /jest-diff@29.5.0: resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7198,14 +7156,14 @@ packages: pretty-format: 29.5.0 dev: true - /jest-docblock/29.4.3: + /jest-docblock@29.4.3: resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 dev: true - /jest-each/29.5.0: + /jest-each@29.5.0: resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7216,7 +7174,7 @@ packages: pretty-format: 29.5.0 dev: true - /jest-environment-jsdom/29.5.0: + /jest-environment-jsdom@29.5.0: resolution: {integrity: sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -7239,7 +7197,7 @@ packages: - utf-8-validate dev: true - /jest-environment-node/29.5.0: + /jest-environment-node@29.5.0: resolution: {integrity: sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7251,12 +7209,12 @@ packages: jest-util: 29.5.0 dev: true - /jest-get-type/29.4.3: + /jest-get-type@29.4.3: resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-haste-map/29.5.0: + /jest-haste-map@29.5.0: resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7275,7 +7233,7 @@ packages: fsevents: 2.3.2 dev: true - /jest-leak-detector/29.5.0: + /jest-leak-detector@29.5.0: resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7283,7 +7241,7 @@ packages: pretty-format: 29.5.0 dev: true - /jest-matcher-utils/29.5.0: + /jest-matcher-utils@29.5.0: resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7293,7 +7251,7 @@ packages: pretty-format: 29.5.0 dev: true - /jest-message-util/29.5.0: + /jest-message-util@29.5.0: resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7308,7 +7266,7 @@ packages: stack-utils: 2.0.6 dev: true - /jest-mock/29.5.0: + /jest-mock@29.5.0: resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7317,7 +7275,7 @@ packages: jest-util: 29.5.0 dev: true - /jest-pnp-resolver/1.2.3_jest-resolve@29.5.0: + /jest-pnp-resolver@1.2.3(jest-resolve@29.5.0): resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: @@ -7329,12 +7287,12 @@ packages: jest-resolve: 29.5.0 dev: true - /jest-regex-util/29.4.3: + /jest-regex-util@29.4.3: resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-resolve-dependencies/29.5.0: + /jest-resolve-dependencies@29.5.0: resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7344,14 +7302,14 @@ packages: - supports-color dev: true - /jest-resolve/29.5.0: + /jest-resolve@29.5.0: resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.1 graceful-fs: 4.2.11 jest-haste-map: 29.5.0 - jest-pnp-resolver: 1.2.3_jest-resolve@29.5.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.5.0) jest-util: 29.5.0 jest-validate: 29.5.0 resolve: 1.22.2 @@ -7359,7 +7317,7 @@ packages: slash: 3.0.0 dev: true - /jest-runner/29.5.0: + /jest-runner@29.5.0: resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7388,7 +7346,7 @@ packages: - supports-color dev: true - /jest-runtime/29.5.0: + /jest-runtime@29.5.0: resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7418,14 +7376,14 @@ packages: - supports-color dev: true - /jest-snapshot/29.5.0: + /jest-snapshot@29.5.0: resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.21.4 '@babel/generator': 7.21.4 - '@babel/plugin-syntax-jsx': 7.21.4_@babel+core@7.21.4 - '@babel/plugin-syntax-typescript': 7.21.4_@babel+core@7.21.4 + '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.4) + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.4) '@babel/traverse': 7.21.4 '@babel/types': 7.21.4 '@jest/expect-utils': 29.5.0 @@ -7433,7 +7391,7 @@ packages: '@jest/types': 29.5.0 '@types/babel__traverse': 7.18.3 '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.4 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.4) chalk: 4.1.1 expect: 29.5.0 graceful-fs: 4.2.11 @@ -7449,7 +7407,7 @@ packages: - supports-color dev: true - /jest-util/29.5.0: + /jest-util@29.5.0: resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7461,7 +7419,7 @@ packages: picomatch: 2.3.1 dev: true - /jest-validate/29.5.0: + /jest-validate@29.5.0: resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7473,7 +7431,7 @@ packages: pretty-format: 29.5.0 dev: true - /jest-watcher/29.5.0: + /jest-watcher@29.5.0: resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7487,7 +7445,7 @@ packages: string-length: 4.0.2 dev: true - /jest-worker/27.5.1: + /jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: @@ -7496,7 +7454,7 @@ packages: supports-color: 8.1.1 dev: true - /jest-worker/29.5.0: + /jest-worker@29.5.0: resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7506,7 +7464,7 @@ packages: supports-color: 8.1.1 dev: true - /jest/29.5.0_rrli7kzx2akox3oq6aahu3rvje: + /jest@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -7516,31 +7474,31 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.5.0_ts-node@10.9.1 + '@jest/core': 29.5.0(ts-node@10.9.1) '@jest/types': 29.5.0 import-local: 3.1.0 - jest-cli: 29.5.0_rrli7kzx2akox3oq6aahu3rvje + jest-cli: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: true - /joycon/3.1.1: + /joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} dev: true - /js-levenshtein/1.1.6: + /js-levenshtein@1.1.6: resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} engines: {node: '>=0.10.0'} dev: false - /js-tokens/4.0.0: + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true - /js-yaml/3.14.1: + /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true dependencies: @@ -7548,7 +7506,7 @@ packages: esprima: 4.0.1 dev: true - /js-yaml/4.1.0: + /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: @@ -7556,7 +7514,7 @@ packages: dev: true optional: true - /jsdom/20.0.3: + /jsdom@20.0.3: resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} engines: {node: '>=14'} peerDependencies: @@ -7597,50 +7555,50 @@ packages: - utf-8-validate dev: true - /jsesc/0.5.0: + /jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true dev: true - /jsesc/2.5.2: + /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true dev: true - /json-bigint/1.0.0: + /json-bigint@1.0.0: resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} dependencies: bignumber.js: 9.1.1 dev: true - /json-parse-even-better-errors/2.3.1: + /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true - /json-schema-traverse/0.4.1: + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true - /json-schema-traverse/1.0.0: + /json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: true - /json-stable-stringify-without-jsonify/1.0.1: + /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true - /json5/2.2.3: + /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true dev: true - /jsonc-parser/3.2.0: + /jsonc-parser@3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} dev: true - /jsonfile/6.1.0: + /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.0 @@ -7648,56 +7606,56 @@ packages: graceful-fs: 4.2.11 dev: true - /jsonparse/1.3.1: + /jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} dev: true - /keygrip/1.1.0: + /keygrip@1.1.0: resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} engines: {node: '>= 0.6'} dependencies: tsscmp: 1.0.6 dev: true - /killable/1.0.1: + /killable@1.0.1: resolution: {integrity: sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==} dev: true - /kind-of/3.2.2: + /kind-of@3.2.2: resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} engines: {node: '>=0.10.0'} dependencies: is-buffer: 1.1.6 dev: true - /kind-of/4.0.0: + /kind-of@4.0.0: resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} engines: {node: '>=0.10.0'} dependencies: is-buffer: 1.1.6 dev: true - /kind-of/5.1.0: + /kind-of@5.1.0: resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} engines: {node: '>=0.10.0'} dev: true - /kind-of/6.0.3: + /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} dev: true - /kleur/3.0.3: + /kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} dev: true - /koa-compose/4.1.0: + /koa-compose@4.1.0: resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} dev: true - /koa-convert/2.0.0: + /koa-convert@2.0.0: resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} engines: {node: '>= 10'} dependencies: @@ -7705,34 +7663,34 @@ packages: koa-compose: 4.1.0 dev: true - /koa-etag/4.0.0: + /koa-etag@4.0.0: resolution: {integrity: sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==} dependencies: etag: 1.8.1 dev: true - /koa-send/5.0.1: + /koa-send@5.0.1: resolution: {integrity: sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==} engines: {node: '>= 8'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) http-errors: 1.8.1 resolve-path: 1.4.0 transitivePeerDependencies: - supports-color dev: true - /koa-static/5.0.0: + /koa-static@5.0.0: resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==} engines: {node: '>= 7.6.0'} dependencies: - debug: 3.2.7 + debug: 3.2.7(supports-color@6.1.0) koa-send: 5.0.1 transitivePeerDependencies: - supports-color dev: true - /koa/2.14.2: + /koa@2.14.2: resolution: {integrity: sha512-VFI2bpJaodz6P7x2uyLiX6RLYpZmOJqNmoCst/Yyd7hQlszyPwG/I9CQJ63nOtKSxpt5M7NH67V6nJL2BwCl7g==} engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} dependencies: @@ -7741,7 +7699,7 @@ packages: content-disposition: 0.5.4 content-type: 1.0.5 cookies: 0.8.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) delegates: 1.0.0 depd: 2.0.0 destroy: 1.2.0 @@ -7763,17 +7721,17 @@ packages: - supports-color dev: true - /leven/2.1.0: + /leven@2.1.0: resolution: {integrity: sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==} engines: {node: '>=0.10.0'} dev: true - /leven/3.1.0: + /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} dev: true - /levn/0.3.0: + /levn@0.3.0: resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} engines: {node: '>= 0.8.0'} dependencies: @@ -7781,7 +7739,7 @@ packages: type-check: 0.3.2 dev: true - /levn/0.4.1: + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} dependencies: @@ -7789,16 +7747,16 @@ packages: type-check: 0.4.0 dev: true - /lilconfig/2.1.0: + /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} dev: true - /lines-and-columns/1.2.4: + /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true - /lint-staged/13.2.1: + /lint-staged@13.2.1: resolution: {integrity: sha512-8gfzinVXoPfga5Dz/ZOn8I2GOhf81Wvs+KwbEXQn/oWZAvCVS2PivrXfVbFJc93zD16uC0neS47RXHIjXKYZQw==} engines: {node: ^14.13.1 || >=16.0.0} hasBin: true @@ -7806,7 +7764,7 @@ packages: chalk: 5.2.0 cli-truncate: 3.1.0 commander: 10.0.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) execa: 7.1.1 lilconfig: 2.1.0 listr2: 5.0.8 @@ -7821,7 +7779,7 @@ packages: - supports-color dev: true - /listr2/5.0.8: + /listr2@5.0.8: resolution: {integrity: sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==} engines: {node: ^14.13.1 || >=16.0.0} peerDependencies: @@ -7840,17 +7798,17 @@ packages: wrap-ansi: 7.0.0 dev: true - /load-tsconfig/0.2.5: + /load-tsconfig@0.2.5: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /loader-runner/4.3.0: + /loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} dev: true - /loader-utils/2.0.4: + /loader-utils@2.0.4: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} engines: {node: '>=8.9.0'} dependencies: @@ -7859,7 +7817,7 @@ packages: json5: 2.2.3 dev: true - /locate-path/3.0.0: + /locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} dependencies: @@ -7867,89 +7825,89 @@ packages: path-exists: 3.0.0 dev: true - /locate-path/5.0.0: + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} dependencies: p-locate: 4.1.0 dev: true - /locate-path/6.0.0: + /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} dependencies: p-locate: 5.0.0 dev: true - /lodash.assignwith/4.2.0: + /lodash.assignwith@4.2.0: resolution: {integrity: sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==} dev: true - /lodash.camelcase/4.3.0: + /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true - /lodash.capitalize/4.2.1: + /lodash.capitalize@4.2.1: resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} dev: true - /lodash.debounce/4.0.8: + /lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: true - /lodash.escaperegexp/4.1.2: + /lodash.escaperegexp@4.1.2: resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} dev: true - /lodash.isplainobject/4.0.6: + /lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} dev: true - /lodash.isstring/4.0.1: + /lodash.isstring@4.0.1: resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} dev: true - /lodash.map/4.6.0: + /lodash.map@4.6.0: resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==} dev: true - /lodash.merge/4.6.2: + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true - /lodash.mergewith/4.6.2: + /lodash.mergewith@4.6.2: resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} dev: true optional: true - /lodash.sortby/4.7.0: + /lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} dev: true - /lodash.truncate/4.4.2: + /lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} dev: true - /lodash.uniq/4.5.0: + /lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} dev: true optional: true - /lodash.uniqby/4.7.0: + /lodash.uniqby@4.7.0: resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} dev: true - /lodash/4.17.21: + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - /log-symbols/4.1.0: + /log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} dependencies: chalk: 4.1.1 is-unicode-supported: 0.1.0 - /log-update/4.0.0: + /log-update@4.0.0: resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} engines: {node: '>=10'} dependencies: @@ -7959,93 +7917,93 @@ packages: wrap-ansi: 6.2.0 dev: true - /loglevel/1.8.1: + /loglevel@1.8.1: resolution: {integrity: sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==} engines: {node: '>= 0.6.0'} dev: true - /longest/2.0.1: + /longest@2.0.1: resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==} engines: {node: '>=0.10.0'} dev: true - /lru-cache/5.1.1: + /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 dev: true - /lru-cache/6.0.0: + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 dev: true - /lru-cache/9.0.1: + /lru-cache@9.0.1: resolution: {integrity: sha512-C8QsKIN1UIXeOs3iWmiZ1lQY+EnKDojWd37fXy1aSbJvH4iSma1uy2OWuoB3m4SYRli5+CUjDv3Dij5DVoetmg==} engines: {node: 14 || >=16.14} dev: true - /make-dir/3.1.0: + /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} dependencies: semver: 6.3.0 dev: true - /make-error/1.3.6: + /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /makeerror/1.0.12: + /makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: tmpl: 1.0.5 dev: true - /map-cache/0.2.2: + /map-cache@0.2.2: resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} engines: {node: '>=0.10.0'} dev: true - /map-obj/1.0.1: + /map-obj@1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} dev: true - /map-obj/4.3.0: + /map-obj@4.3.0: resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} engines: {node: '>=8'} dev: true - /map-visit/1.0.0: + /map-visit@1.0.0: resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} engines: {node: '>=0.10.0'} dependencies: object-visit: 1.0.1 dev: true - /media-typer/0.3.0: + /media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} dev: true - /memfs/3.5.0: + /memfs@3.5.0: resolution: {integrity: sha512-yK6o8xVJlQerz57kvPROwTMgx5WtGwC2ZxDtOUsnGl49rHjYkfQoPNZPCKH73VdLE1BwBu/+Fx/NL8NYMUw2aA==} engines: {node: '>= 4.0.0'} dependencies: fs-monkey: 1.0.3 dev: true - /memory-fs/0.4.1: + /memory-fs@0.4.1: resolution: {integrity: sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==} dependencies: errno: 0.1.8 readable-stream: 2.3.8 dev: true - /meow/8.1.2: + /meow@8.1.2: resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} engines: {node: '>=10'} dependencies: @@ -8062,50 +8020,50 @@ packages: yargs-parser: 20.2.9 dev: true - /merge-descriptors/1.0.1: + /merge-descriptors@1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} dev: true - /merge-stream/2.0.0: + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true - /merge/2.1.1: - resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} - dev: true - - /merge2/1.4.1: + /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} dev: true - /methods/1.1.2: + /merge@2.1.1: + resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} + dev: true + + /methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} dev: true - /micromatch/3.1.10_supports-color@6.1.0: + /micromatch@3.1.10(supports-color@6.1.0): resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} engines: {node: '>=0.10.0'} dependencies: arr-diff: 4.0.0 array-unique: 0.3.2 - braces: 2.3.2_supports-color@6.1.0 + braces: 2.3.2(supports-color@6.1.0) define-property: 2.0.2 extend-shallow: 3.0.2 - extglob: 2.0.4_supports-color@6.1.0 + extglob: 2.0.4(supports-color@6.1.0) fragment-cache: 0.2.1 kind-of: 6.0.3 - nanomatch: 1.2.13_supports-color@6.1.0 + nanomatch: 1.2.13(supports-color@6.1.0) object.pick: 1.3.0 regex-not: 1.0.2 - snapdragon: 0.8.2_supports-color@6.1.0 + snapdragon: 0.8.2(supports-color@6.1.0) to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true - /micromatch/4.0.5: + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: @@ -8113,62 +8071,62 @@ packages: picomatch: 2.3.1 dev: true - /mime-db/1.52.0: + /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} dev: true - /mime-types/2.1.35: + /mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 dev: true - /mime/1.6.0: + /mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} hasBin: true dev: true - /mime/2.6.0: + /mime@2.6.0: resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} engines: {node: '>=4.0.0'} hasBin: true dev: true - /mimic-fn/2.1.0: + /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - /mimic-fn/4.0.0: + /mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} dev: true - /min-indent/1.0.1: + /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} dev: true - /minimalistic-assert/1.0.1: + /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} dev: true - /minimatch/3.1.2: + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 dev: true - /minimatch/8.0.4: + /minimatch@8.0.4: resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 dev: true - /minimist-options/4.1.0: + /minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} dependencies: @@ -8177,25 +8135,25 @@ packages: kind-of: 6.0.3 dev: true - /minimist/1.2.7: + /minimist@1.2.7: resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} dev: true - /minimist/1.2.8: + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /minipass/4.2.8: + /minipass@4.2.8: resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} engines: {node: '>=8'} dev: true - /minipass/5.0.0: + /minipass@5.0.0: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} dev: true - /mixin-deep/1.3.2: + /mixin-deep@1.3.2: resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} engines: {node: '>=0.10.0'} dependencies: @@ -8203,35 +8161,35 @@ packages: is-extendable: 1.0.1 dev: true - /mkdirp/0.5.6: + /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true dependencies: minimist: 1.2.8 dev: true - /mri/1.1.4: + /mri@1.1.4: resolution: {integrity: sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==} engines: {node: '>=4'} dev: true - /ms/2.0.0: + /ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: true - /ms/2.1.2: + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true - /ms/2.1.3: + /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true - /multicast-dns-service-types/1.1.0: + /multicast-dns-service-types@1.1.0: resolution: {integrity: sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==} dev: true - /multicast-dns/6.2.3: + /multicast-dns@6.2.3: resolution: {integrity: sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==} hasBin: true dependencies: @@ -8239,15 +8197,15 @@ packages: thunky: 1.1.0 dev: true - /mustache/4.2.0: + /mustache@4.2.0: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true dev: true - /mute-stream/0.0.8: + /mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - /mz/2.7.0: + /mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: any-promise: 1.3.0 @@ -8255,11 +8213,11 @@ packages: thenify-all: 1.6.0 dev: true - /nanocolors/0.2.13: + /nanocolors@0.2.13: resolution: {integrity: sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==} dev: true - /nanomatch/1.2.13_supports-color@6.1.0: + /nanomatch@1.2.13(supports-color@6.1.0): resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} engines: {node: '>=0.10.0'} dependencies: @@ -8272,39 +8230,39 @@ packages: kind-of: 6.0.3 object.pick: 1.3.0 regex-not: 1.0.2 - snapdragon: 0.8.2_supports-color@6.1.0 + snapdragon: 0.8.2(supports-color@6.1.0) to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true - /natural-compare-lite/1.4.0: + /natural-compare-lite@1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} dev: true - /natural-compare/1.4.0: + /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /negotiator/0.6.3: + /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} dev: true - /neo-async/2.6.2: + /neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true - /nice-try/1.0.5: + /nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} dev: true - /node-domexception/1.0.0: + /node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} dev: false - /node-fetch/2.6.7: + /node-fetch@2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} peerDependencies: @@ -8316,7 +8274,7 @@ packages: whatwg-url: 5.0.0 dev: true - /node-fetch/2.6.9: + /node-fetch@2.6.9: resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} engines: {node: 4.x || >=6.0.0} peerDependencies: @@ -8328,20 +8286,20 @@ packages: whatwg-url: 5.0.0 dev: false - /node-forge/0.10.0: + /node-forge@0.10.0: resolution: {integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==} engines: {node: '>= 6.0.0'} dev: true - /node-int64/0.4.0: + /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /node-releases/2.0.10: + /node-releases@2.0.10: resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} dev: true - /normalize-package-data/2.5.0: + /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 @@ -8350,7 +8308,7 @@ packages: validate-npm-package-license: 3.0.4 dev: true - /normalize-package-data/3.0.3: + /normalize-package-data@3.0.3: resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} engines: {node: '>=10'} dependencies: @@ -8360,41 +8318,41 @@ packages: validate-npm-package-license: 3.0.4 dev: true - /normalize-path/3.0.0: + /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - /npm-run-path/2.0.2: + /npm-run-path@2.0.2: resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} engines: {node: '>=4'} dependencies: path-key: 2.0.1 dev: true - /npm-run-path/4.0.1: + /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} dependencies: path-key: 3.1.1 dev: true - /npm-run-path/5.1.0: + /npm-run-path@5.1.0: resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 dev: true - /nwsapi/2.2.4: + /nwsapi@2.2.4: resolution: {integrity: sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==} dev: true - /object-assign/4.1.1: + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} dev: true - /object-copy/0.1.0: + /object-copy@0.1.0: resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} engines: {node: '>=0.10.0'} dependencies: @@ -8403,11 +8361,11 @@ packages: kind-of: 3.2.2 dev: true - /object-inspect/1.12.3: + /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} dev: true - /object-is/1.1.5: + /object-is@1.1.5: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} engines: {node: '>= 0.4'} dependencies: @@ -8415,19 +8373,19 @@ packages: define-properties: 1.2.0 dev: true - /object-keys/1.1.1: + /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} dev: true - /object-visit/1.0.1: + /object-visit@1.0.1: resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true - /object.assign/4.1.4: + /object.assign@4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: @@ -8437,7 +8395,7 @@ packages: object-keys: 1.1.1 dev: true - /object.getownpropertydescriptors/2.1.5: + /object.getownpropertydescriptors@2.1.5: resolution: {integrity: sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==} engines: {node: '>= 0.8'} dependencies: @@ -8447,57 +8405,57 @@ packages: es-abstract: 1.21.2 dev: true - /object.pick/1.3.0: + /object.pick@1.3.0: resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true - /obuf/1.1.2: + /obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} dev: true - /on-exit-leak-free/0.2.0: + /on-exit-leak-free@0.2.0: resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} dev: true - /on-finished/2.4.1: + /on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} dependencies: ee-first: 1.1.1 dev: true - /on-headers/1.0.2: + /on-headers@1.0.2: resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} engines: {node: '>= 0.8'} dev: true - /once/1.4.0: + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 dev: true - /onetime/5.1.2: + /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - /onetime/6.0.0: + /onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 dev: true - /only/0.0.2: + /only@0.0.2: resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} dev: true - /open/8.4.2: + /open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} dependencies: @@ -8506,14 +8464,14 @@ packages: is-wsl: 2.2.0 dev: true - /opn/5.5.0: + /opn@5.5.0: resolution: {integrity: sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==} engines: {node: '>=4'} dependencies: is-wsl: 1.1.0 dev: true - /optionator/0.8.3: + /optionator@0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} dependencies: @@ -8525,7 +8483,7 @@ packages: word-wrap: 1.2.3 dev: true - /optionator/0.9.1: + /optionator@0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} engines: {node: '>= 0.8.0'} dependencies: @@ -8537,7 +8495,7 @@ packages: word-wrap: 1.2.3 dev: true - /ora/5.4.1: + /ora@5.4.1: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} dependencies: @@ -8551,78 +8509,78 @@ packages: strip-ansi: 6.0.1 wcwidth: 1.0.1 - /os-tmpdir/1.0.2: + /os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - /outvariant/1.4.0: + /outvariant@1.4.0: resolution: {integrity: sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==} - /p-finally/1.0.0: + /p-finally@1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} dev: true - /p-limit/2.3.0: + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} dependencies: p-try: 2.2.0 dev: true - /p-limit/3.1.0: + /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 dev: true - /p-locate/3.0.0: + /p-locate@3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} engines: {node: '>=6'} dependencies: p-limit: 2.3.0 dev: true - /p-locate/4.1.0: + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} dependencies: p-limit: 2.3.0 dev: true - /p-locate/5.0.0: + /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} dependencies: p-limit: 3.1.0 dev: true - /p-map/2.1.0: + /p-map@2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} dev: true - /p-map/4.0.0: + /p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} dependencies: aggregate-error: 3.1.0 dev: true - /p-retry/3.0.1: + /p-retry@3.0.1: resolution: {integrity: sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==} engines: {node: '>=6'} dependencies: retry: 0.12.0 dev: true - /p-try/2.2.0: + /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} dev: true - /page-with/0.6.1_57233mj27fjz7synoeubptyy7e: + /page-with@0.6.1(@swc/core@1.3.49)(esbuild@0.17.16): resolution: {integrity: sha512-5J58fSpc8CKonUWCPsh8b2LctFrNSOpXQ8O3tB+/iJvixOQf1qHp4+cDLiIVsl/WiuheXdZTzMcuR0KLQMaWcg==} dependencies: '@open-draft/until': 2.1.0 @@ -8630,14 +8588,14 @@ packages: '@types/express': 4.17.17 '@types/mustache': 4.2.2 '@types/uuid': 8.3.4 - debug: 4.3.4 - express: 4.18.2 + debug: 4.3.4(supports-color@6.1.0) + express: 4.18.2(supports-color@6.1.0) headers-polyfill: 3.1.2 memfs: 3.5.0 mustache: 4.2.0 playwright: 1.32.3 uuid: 8.3.2 - webpack: 5.79.0_57233mj27fjz7synoeubptyy7e + webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) webpack-merge: 5.8.0 transitivePeerDependencies: - '@swc/core' @@ -8647,14 +8605,14 @@ packages: - webpack-cli dev: true - /parent-module/1.0.1: + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} dependencies: callsites: 3.1.0 dev: true - /parse-json/5.2.0: + /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: @@ -8664,70 +8622,70 @@ packages: lines-and-columns: 1.2.4 dev: true - /parse-passwd/1.0.0: + /parse-passwd@1.0.0: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} dev: true - /parse5/6.0.1: + /parse5@6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} dev: true - /parse5/7.1.2: + /parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: entities: 4.4.0 dev: true - /parseurl/1.3.3: + /parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} dev: true - /pascalcase/0.1.1: + /pascalcase@0.1.1: resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} engines: {node: '>=0.10.0'} dev: true - /path-exists/3.0.0: + /path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} dev: true - /path-exists/4.0.0: + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} dev: true - /path-is-absolute/1.0.1: + /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} dev: true - /path-is-inside/1.0.2: + /path-is-inside@1.0.2: resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} dev: true - /path-key/2.0.1: + /path-key@2.0.1: resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} engines: {node: '>=4'} dev: true - /path-key/3.1.1: + /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} dev: true - /path-key/4.0.0: + /path-key@4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} dev: true - /path-parse/1.0.7: + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-scurry/1.6.4: + /path-scurry@1.6.4: resolution: {integrity: sha512-Qp/9IHkdNiXJ3/Kon++At2nVpnhRiPq/aSvQN+H3U1WZbvNRK0RIQK/o4HMqPoXjpuGJUEWpHSs6Mnjxqh3TQg==} engines: {node: '>=16 || 14 >=14.17'} dependencies: @@ -8735,63 +8693,63 @@ packages: minipass: 5.0.0 dev: true - /path-to-regexp/0.1.7: + /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: true - /path-to-regexp/6.2.1: + /path-to-regexp@6.2.1: resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} dev: false - /path-type/4.0.0: + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} dev: true - /picocolors/1.0.0: + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true - /picomatch/2.3.1: + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - /pidtree/0.6.0: + /pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} hasBin: true dev: true - /pify/2.3.0: + /pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} dev: true - /pify/4.0.1: + /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} dev: true - /pinkie-promise/2.0.1: + /pinkie-promise@2.0.1: resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} engines: {node: '>=0.10.0'} dependencies: pinkie: 2.0.4 dev: true - /pinkie/2.0.4: + /pinkie@2.0.4: resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} engines: {node: '>=0.10.0'} dev: true - /pino-abstract-transport/0.5.0: + /pino-abstract-transport@0.5.0: resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} dependencies: duplexify: 4.1.2 split2: 4.2.0 dev: true - /pino-pretty/7.6.1: + /pino-pretty@7.6.1: resolution: {integrity: sha512-H7N6ZYkiyrfwBGW9CSjx0uyO9Q2Lyt73881+OTYk8v3TiTdgN92QHrWlEq/LeWw5XtDP64jeSk3mnc6T+xX9/w==} hasBin: true dependencies: @@ -8810,11 +8768,11 @@ packages: strip-json-comments: 3.1.1 dev: true - /pino-std-serializers/4.0.0: + /pino-std-serializers@4.0.0: resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} dev: true - /pino/7.11.0: + /pino@7.11.0: resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} hasBin: true dependencies: @@ -8831,32 +8789,32 @@ packages: thread-stream: 0.15.2 dev: true - /pirates/4.0.5: + /pirates@4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} dev: true - /pkg-dir/3.0.0: + /pkg-dir@3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} engines: {node: '>=6'} dependencies: find-up: 3.0.0 dev: true - /pkg-dir/4.2.0: + /pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} dependencies: find-up: 4.1.0 dev: true - /playwright-core/1.32.3: + /playwright-core@1.32.3: resolution: {integrity: sha512-SB+cdrnu74ZIn5Ogh/8278ngEh9NEEV0vR4sJFmK04h2iZpybfbqBY0bX6+BLYWVdV12JLLI+JEFtSnYgR+mWg==} engines: {node: '>=14'} hasBin: true dev: true - /playwright/1.32.3: + /playwright@1.32.3: resolution: {integrity: sha512-h/ylpgoj6l/EjkfUDyx8cdOlfzC96itPpPe8BXacFkqpw/YsuxkpPyVbzEq4jw+bAJh5FLgh31Ljg2cR6HV3uw==} engines: {node: '>=14'} hasBin: true @@ -8865,34 +8823,23 @@ packages: playwright-core: 1.32.3 dev: true - /portfinder/1.0.32: + /portfinder@1.0.32(supports-color@6.1.0): resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} dependencies: async: 2.6.4 - debug: 3.2.7 + debug: 3.2.7(supports-color@6.1.0) mkdirp: 0.5.6 transitivePeerDependencies: - supports-color dev: true - /portfinder/1.0.32_supports-color@6.1.0: - resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} - engines: {node: '>= 0.12.0'} - dependencies: - async: 2.6.4 - debug: 3.2.7_supports-color@6.1.0 - mkdirp: 0.5.6 - transitivePeerDependencies: - - supports-color - dev: true - - /posix-character-classes/0.1.1: + /posix-character-classes@0.1.1: resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} engines: {node: '>=0.10.0'} dev: true - /postcss-load-config/3.1.4_ts-node@10.9.1: + /postcss-load-config@3.1.4(ts-node@10.9.1): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -8905,34 +8852,34 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e + ts-node: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4) yaml: 1.10.2 dev: true - /prelude-ls/1.1.2: + /prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} dev: true - /prelude-ls/1.2.1: + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} dev: true - /prettier-linter-helpers/1.0.0: + /prettier-linter-helpers@1.0.0: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} dependencies: fast-diff: 1.2.0 dev: true - /prettier/2.8.7: + /prettier@2.8.7: resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==} engines: {node: '>=10.13.0'} hasBin: true dev: true - /pretty-format/29.5.0: + /pretty-format@29.5.0: resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -8941,20 +8888,20 @@ packages: react-is: 18.2.0 dev: true - /process-nextick-args/2.0.1: + /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true - /process-warning/1.0.0: + /process-warning@1.0.0: resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} dev: true - /progress/2.0.3: + /progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} dev: true - /prompts/2.4.2: + /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} dependencies: @@ -8962,7 +8909,7 @@ packages: sisteransi: 1.0.5 dev: true - /proxy-addr/2.0.7: + /proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} dependencies: @@ -8970,81 +8917,81 @@ packages: ipaddr.js: 1.9.1 dev: true - /prr/1.0.1: + /prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} dev: true - /psl/1.9.0: + /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true - /pump/3.0.0: + /pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 dev: true - /punycode/1.3.2: + /punycode@1.3.2: resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} dev: true - /punycode/2.3.0: + /punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} dev: true - /pure-rand/6.0.1: + /pure-rand@6.0.1: resolution: {integrity: sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==} dev: true - /q/1.5.1: + /q@1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} dev: true - /qs/6.11.0: + /qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.4 dev: true - /querystring/0.2.0: + /querystring@0.2.0: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. dev: true - /querystringify/2.2.0: + /querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} dev: true - /queue-microtask/1.2.3: + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true - /quick-format-unescaped/4.0.4: + /quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} dev: true - /quick-lru/4.0.1: + /quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} dev: true - /randombytes/2.1.0: + /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 dev: true - /range-parser/1.2.1: + /range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} dev: true - /raw-body/2.5.1: + /raw-body@2.5.1: resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} engines: {node: '>= 0.8'} dependencies: @@ -9054,7 +9001,7 @@ packages: unpipe: 1.0.0 dev: true - /rc/1.2.8: + /rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true dependencies: @@ -9064,11 +9011,11 @@ packages: strip-json-comments: 2.0.1 dev: true - /react-is/18.2.0: + /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true - /read-pkg-up/7.0.1: + /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} dependencies: @@ -9077,7 +9024,7 @@ packages: type-fest: 0.8.1 dev: true - /read-pkg/5.2.0: + /read-pkg@5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} dependencies: @@ -9087,7 +9034,7 @@ packages: type-fest: 0.6.0 dev: true - /readable-stream/2.3.8: + /readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: core-util-is: 1.0.3 @@ -9099,7 +9046,7 @@ packages: util-deprecate: 1.0.2 dev: true - /readable-stream/3.6.2: + /readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} dependencies: @@ -9107,18 +9054,18 @@ packages: string_decoder: 1.3.0 util-deprecate: 1.0.2 - /readdirp/3.4.0: + /readdirp@3.4.0: resolution: {integrity: sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 - /real-require/0.1.0: + /real-require@0.1.0: resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} engines: {node: '>= 12.13.0'} dev: true - /redent/3.0.0: + /redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} dependencies: @@ -9126,28 +9073,28 @@ packages: strip-indent: 3.0.0 dev: true - /regenerate-unicode-properties/10.1.0: + /regenerate-unicode-properties@10.1.0: resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} engines: {node: '>=4'} dependencies: regenerate: 1.4.2 dev: true - /regenerate/1.4.2: + /regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} dev: true - /regenerator-runtime/0.13.11: + /regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} dev: true - /regenerator-transform/0.15.1: + /regenerator-transform@0.15.1: resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} dependencies: '@babel/runtime': 7.21.0 dev: true - /regex-not/1.0.2: + /regex-not@1.0.2: resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} engines: {node: '>=0.10.0'} dependencies: @@ -9155,7 +9102,7 @@ packages: safe-regex: 1.1.0 dev: true - /regexp.prototype.flags/1.4.3: + /regexp.prototype.flags@1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} engines: {node: '>= 0.4'} dependencies: @@ -9164,12 +9111,12 @@ packages: functions-have-names: 1.2.3 dev: true - /regexpp/3.2.0: + /regexpp@3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} dev: true - /regexpu-core/5.3.2: + /regexpu-core@5.3.2: resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} engines: {node: '>=4'} dependencies: @@ -9181,62 +9128,62 @@ packages: unicode-match-property-value-ecmascript: 2.1.0 dev: true - /registry-auth-token/4.2.2: + /registry-auth-token@4.2.2: resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==} engines: {node: '>=6.0.0'} dependencies: rc: 1.2.8 dev: true - /regjsparser/0.9.1: + /regjsparser@0.9.1: resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} hasBin: true dependencies: jsesc: 0.5.0 dev: true - /repeat-element/1.1.4: + /repeat-element@1.1.4: resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} engines: {node: '>=0.10.0'} dev: true - /repeat-string/1.6.1: + /repeat-string@1.6.1: resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} engines: {node: '>=0.10'} dev: true - /require-directory/2.1.1: + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - /require-from-string/2.0.2: + /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} dev: true - /require-main-filename/2.0.0: + /require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true - /requires-port/1.0.0: + /requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: true - /resolve-cwd/2.0.0: + /resolve-cwd@2.0.0: resolution: {integrity: sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==} engines: {node: '>=4'} dependencies: resolve-from: 3.0.0 dev: true - /resolve-cwd/3.0.0: + /resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 dev: true - /resolve-dir/1.0.1: + /resolve-dir@1.0.1: resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} engines: {node: '>=0.10.0'} dependencies: @@ -9244,29 +9191,29 @@ packages: global-modules: 1.0.0 dev: true - /resolve-from/3.0.0: + /resolve-from@3.0.0: resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} engines: {node: '>=4'} dev: true - /resolve-from/4.0.0: + /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} dev: true - /resolve-from/5.0.0: + /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} dev: true - /resolve-global/1.0.0: + /resolve-global@1.0.0: resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} engines: {node: '>=8'} dependencies: global-dirs: 0.1.1 dev: true - /resolve-path/1.4.0: + /resolve-path@1.4.0: resolution: {integrity: sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==} engines: {node: '>= 0.8'} dependencies: @@ -9274,17 +9221,17 @@ packages: path-is-absolute: 1.0.1 dev: true - /resolve-url/0.2.1: + /resolve-url@0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated dev: true - /resolve.exports/2.0.2: + /resolve.exports@2.0.2: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} dev: true - /resolve/1.22.2: + /resolve@1.22.2: resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true dependencies: @@ -9293,47 +9240,47 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /restore-cursor/3.1.0: + /restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - /ret/0.1.15: + /ret@0.1.15: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} dev: true - /retry/0.12.0: + /retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} dev: true - /reusify/1.0.4: + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rfdc/1.3.0: + /rfdc@1.3.0: resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} dev: true - /rimraf/2.7.1: + /rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true dependencies: glob: 7.2.3 dev: true - /rimraf/3.0.2: + /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 dev: true - /rollup/2.79.1: + /rollup@2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} engines: {node: '>=10.0.0'} hasBin: true @@ -9341,7 +9288,7 @@ packages: fsevents: 2.3.2 dev: true - /rollup/3.20.2: + /rollup@3.20.2: resolution: {integrity: sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true @@ -9349,29 +9296,29 @@ packages: fsevents: 2.3.2 dev: true - /run-async/2.4.1: + /run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} - /run-parallel/1.2.0: + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true - /rxjs/7.8.0: + /rxjs@7.8.0: resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: tslib: 2.5.0 - /safe-buffer/5.1.2: + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true - /safe-buffer/5.2.1: + /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - /safe-regex-test/1.0.0: + /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: call-bind: 1.0.2 @@ -9379,79 +9326,79 @@ packages: is-regex: 1.1.4 dev: true - /safe-regex/1.1.0: + /safe-regex@1.1.0: resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} dependencies: ret: 0.1.15 dev: true - /safe-stable-stringify/2.4.3: + /safe-stable-stringify@2.4.3: resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} engines: {node: '>=10'} dev: true - /safer-buffer/2.1.2: + /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - /saxes/6.0.0: + /saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} dependencies: xmlchars: 2.2.0 dev: true - /schema-utils/1.0.0: + /schema-utils@1.0.0: resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==} engines: {node: '>= 4'} dependencies: ajv: 6.12.6 - ajv-errors: 1.0.1_ajv@6.12.6 - ajv-keywords: 3.5.2_ajv@6.12.6 + ajv-errors: 1.0.1(ajv@6.12.6) + ajv-keywords: 3.5.2(ajv@6.12.6) dev: true - /schema-utils/2.7.1: + /schema-utils@2.7.1: resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} engines: {node: '>= 8.9.0'} dependencies: '@types/json-schema': 7.0.11 ajv: 6.12.6 - ajv-keywords: 3.5.2_ajv@6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) dev: true - /schema-utils/3.1.1: + /schema-utils@3.1.1: resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} engines: {node: '>= 10.13.0'} dependencies: '@types/json-schema': 7.0.11 ajv: 6.12.6 - ajv-keywords: 3.5.2_ajv@6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) dev: true - /secure-json-parse/2.7.0: + /secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} dev: true - /select-hose/2.0.0: + /select-hose@2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} dev: true - /selfsigned/1.10.14: + /selfsigned@1.10.14: resolution: {integrity: sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==} dependencies: node-forge: 0.10.0 dev: true - /semver/5.7.1: + /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true dev: true - /semver/6.3.0: + /semver@6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true dev: true - /semver/7.3.7: + /semver@7.3.7: resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} engines: {node: '>=10'} hasBin: true @@ -9459,7 +9406,7 @@ packages: lru-cache: 6.0.0 dev: true - /semver/7.4.0: + /semver@7.4.0: resolution: {integrity: sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==} engines: {node: '>=10'} hasBin: true @@ -9467,32 +9414,11 @@ packages: lru-cache: 6.0.0 dev: true - /send/0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} - 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 - transitivePeerDependencies: - - supports-color - dev: true - - /send/0.18.0_supports-color@6.1.0: + /send@0.18.0(supports-color@6.1.0): resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} dependencies: - debug: 2.6.9_supports-color@6.1.0 + debug: 2.6.9(supports-color@6.1.0) depd: 2.0.0 destroy: 1.2.0 encodeurl: 1.0.2 @@ -9509,19 +9435,19 @@ packages: - supports-color dev: true - /serialize-javascript/6.0.1: + /serialize-javascript@6.0.1: resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} dependencies: randombytes: 2.1.0 dev: true - /serve-index/1.9.1_supports-color@6.1.0: + /serve-index@1.9.1(supports-color@6.1.0): resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} engines: {node: '>= 0.8.0'} dependencies: accepts: 1.3.8 batch: 0.6.1 - debug: 2.6.9_supports-color@6.1.0 + debug: 2.6.9(supports-color@6.1.0) escape-html: 1.0.3 http-errors: 1.6.3 mime-types: 2.1.35 @@ -9530,35 +9456,23 @@ packages: - supports-color dev: true - /serve-static/1.15.0: + /serve-static@1.15.0(supports-color@6.1.0): resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} dependencies: encodeurl: 1.0.2 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.18.0 + send: 0.18.0(supports-color@6.1.0) transitivePeerDependencies: - supports-color dev: true - /serve-static/1.15.0_supports-color@6.1.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} - dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.18.0_supports-color@6.1.0 - transitivePeerDependencies: - - supports-color - dev: true - - /set-blocking/2.0.0: + /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /set-value/2.0.1: + /set-value@2.0.1: resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} engines: {node: '>=0.10.0'} dependencies: @@ -9568,46 +9482,46 @@ packages: split-string: 3.1.0 dev: true - /setprototypeof/1.1.0: + /setprototypeof@1.1.0: resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} dev: true - /setprototypeof/1.2.0: + /setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} dev: true - /shallow-clone/3.0.1: + /shallow-clone@3.0.1: resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} engines: {node: '>=8'} dependencies: kind-of: 6.0.3 dev: true - /shebang-command/1.2.0: + /shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 dev: true - /shebang-command/2.0.0: + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 dev: true - /shebang-regex/1.0.0: + /shebang-regex@1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} dev: true - /shebang-regex/3.0.0: + /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} dev: true - /side-channel/1.0.4: + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 @@ -9615,25 +9529,25 @@ packages: object-inspect: 1.12.3 dev: true - /signal-exit/3.0.7: + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - /simple-git-hooks/2.8.1: + /simple-git-hooks@2.8.1: resolution: {integrity: sha512-DYpcVR1AGtSfFUNzlBdHrQGPsOhuuEJ/FkmPOOlFysP60AHd3nsEpkGq/QEOdtUyT1Qhk7w9oLmFoMG+75BDog==} hasBin: true requiresBuild: true dev: true - /sisteransi/1.0.5: + /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: true - /slash/3.0.0: + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} dev: true - /slice-ansi/3.0.0: + /slice-ansi@3.0.0: resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} engines: {node: '>=8'} dependencies: @@ -9642,7 +9556,7 @@ packages: is-fullwidth-code-point: 3.0.0 dev: true - /slice-ansi/4.0.0: + /slice-ansi@4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} dependencies: @@ -9651,7 +9565,7 @@ packages: is-fullwidth-code-point: 3.0.0 dev: true - /slice-ansi/5.0.0: + /slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} dependencies: @@ -9659,7 +9573,7 @@ packages: is-fullwidth-code-point: 4.0.0 dev: true - /snapdragon-node/2.1.1: + /snapdragon-node@2.1.1: resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} engines: {node: '>=0.10.0'} dependencies: @@ -9668,19 +9582,19 @@ packages: snapdragon-util: 3.0.1 dev: true - /snapdragon-util/3.0.1: + /snapdragon-util@3.0.1: resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /snapdragon/0.8.2_supports-color@6.1.0: + /snapdragon@0.8.2(supports-color@6.1.0): resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} engines: {node: '>=0.10.0'} dependencies: base: 0.11.2 - debug: 2.6.9_supports-color@6.1.0 + debug: 2.6.9(supports-color@6.1.0) define-property: 0.2.5 extend-shallow: 2.0.1 map-cache: 0.2.2 @@ -9691,7 +9605,7 @@ packages: - supports-color dev: true - /socket.io-adapter/2.5.2: + /socket.io-adapter@2.5.2: resolution: {integrity: sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==} dependencies: ws: 8.11.0 @@ -9700,23 +9614,23 @@ packages: - utf-8-validate dev: true - /socket.io-parser/4.2.2: + /socket.io-parser@4.2.2: resolution: {integrity: sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==} engines: {node: '>=10.0.0'} dependencies: '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) transitivePeerDependencies: - supports-color dev: true - /socket.io/4.6.1: + /socket.io@4.6.1: resolution: {integrity: sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==} engines: {node: '>=10.0.0'} dependencies: accepts: 1.3.8 base64id: 2.0.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) engine.io: 6.4.1 socket.io-adapter: 2.5.2 socket.io-parser: 4.2.2 @@ -9726,11 +9640,11 @@ packages: - utf-8-validate dev: true - /sockjs-client/1.6.1_supports-color@6.1.0: + /sockjs-client@1.6.1(supports-color@6.1.0): resolution: {integrity: sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==} engines: {node: '>=12'} dependencies: - debug: 3.2.7_supports-color@6.1.0 + debug: 3.2.7(supports-color@6.1.0) eventsource: 2.0.2 faye-websocket: 0.11.4 inherits: 2.0.4 @@ -9739,7 +9653,7 @@ packages: - supports-color dev: true - /sockjs/0.3.24: + /sockjs@0.3.24: resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} dependencies: faye-websocket: 0.11.4 @@ -9747,17 +9661,17 @@ packages: websocket-driver: 0.7.4 dev: true - /sonic-boom/2.8.0: + /sonic-boom@2.8.0: resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} dependencies: atomic-sleep: 1.0.0 dev: true - /source-list-map/2.0.1: + /source-list-map@2.0.1: resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} dev: true - /source-map-resolve/0.5.3: + /source-map-resolve@0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} deprecated: See https://github.com/lydell/source-map-resolve#deprecated dependencies: @@ -9768,72 +9682,72 @@ packages: urix: 0.1.0 dev: true - /source-map-support/0.5.13: + /source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: true - /source-map-support/0.5.21: + /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: true - /source-map-url/0.4.1: + /source-map-url@0.4.1: resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} deprecated: See https://github.com/lydell/source-map-url#deprecated dev: true - /source-map/0.5.7: + /source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} dev: true - /source-map/0.6.1: + /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} dev: true - /source-map/0.8.0-beta.0: + /source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} dependencies: whatwg-url: 7.1.0 dev: true - /spawn-error-forwarder/1.0.0: + /spawn-error-forwarder@1.0.0: resolution: {integrity: sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==} dev: true - /spdx-correct/3.2.0: + /spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.13 dev: true - /spdx-exceptions/2.3.0: + /spdx-exceptions@2.3.0: resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} dev: true - /spdx-expression-parse/3.0.1: + /spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 spdx-license-ids: 3.0.13 dev: true - /spdx-license-ids/3.0.13: + /spdx-license-ids@3.0.13: resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} dev: true - /spdy-transport/3.0.0_supports-color@6.1.0: + /spdy-transport@3.0.0(supports-color@6.1.0): resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: - debug: 4.3.4_supports-color@6.1.0 + debug: 4.3.4(supports-color@6.1.0) detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -9843,55 +9757,55 @@ packages: - supports-color dev: true - /spdy/4.0.2_supports-color@6.1.0: + /spdy@4.0.2(supports-color@6.1.0): resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} dependencies: - debug: 4.3.4_supports-color@6.1.0 + debug: 4.3.4(supports-color@6.1.0) handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 - spdy-transport: 3.0.0_supports-color@6.1.0 + spdy-transport: 3.0.0(supports-color@6.1.0) transitivePeerDependencies: - supports-color dev: true - /split-string/3.1.0: + /split-string@3.1.0: resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} engines: {node: '>=0.10.0'} dependencies: extend-shallow: 3.0.2 dev: true - /split2/1.0.0: + /split2@1.0.0: resolution: {integrity: sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==} dependencies: through2: 2.0.5 dev: true - /split2/3.2.2: + /split2@3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: readable-stream: 3.6.2 dev: true - /split2/4.2.0: + /split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} dev: true - /sprintf-js/1.0.3: + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true - /stack-utils/2.0.6: + /stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 dev: true - /static-extend/0.1.2: + /static-extend@0.1.2: resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} engines: {node: '>=0.10.0'} dependencies: @@ -9899,46 +9813,46 @@ packages: object-copy: 0.1.0 dev: true - /statuses/1.5.0: + /statuses@1.5.0: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} dev: true - /statuses/2.0.1: + /statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - /stream-combiner2/1.1.1: + /stream-combiner2@1.1.1: resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} dependencies: duplexer2: 0.1.4 readable-stream: 2.3.8 dev: true - /stream-read-all/3.0.1: + /stream-read-all@3.0.1: resolution: {integrity: sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==} engines: {node: '>=10'} dev: true - /stream-shift/1.0.1: + /stream-shift@1.0.1: resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} dev: true - /streamsearch/1.1.0: + /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} dev: true - /strict-event-emitter/0.5.0: + /strict-event-emitter@0.5.0: resolution: {integrity: sha512-sqnMpVJLSB3daNO6FcvsEk4Mq5IJeAwDeH80DP1S8+pgxrF6yZnE1+VeapesGled7nEcIkz1Ax87HzaIy+02kA==} dev: false - /string-argv/0.3.1: + /string-argv@0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} engines: {node: '>=0.6.19'} dev: true - /string-length/4.0.2: + /string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} dependencies: @@ -9946,7 +9860,7 @@ packages: strip-ansi: 6.0.1 dev: true - /string-width/3.1.0: + /string-width@3.1.0: resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} engines: {node: '>=6'} dependencies: @@ -9955,7 +9869,7 @@ packages: strip-ansi: 5.2.0 dev: true - /string-width/4.2.3: + /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} dependencies: @@ -9963,7 +9877,7 @@ packages: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string-width/5.1.2: + /string-width@5.1.2: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} dependencies: @@ -9972,7 +9886,7 @@ packages: strip-ansi: 7.0.1 dev: true - /string.prototype.trim/1.2.7: + /string.prototype.trim@1.2.7: resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} engines: {node: '>= 0.4'} dependencies: @@ -9981,7 +9895,7 @@ packages: es-abstract: 1.21.2 dev: true - /string.prototype.trimend/1.0.6: + /string.prototype.trimend@1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 @@ -9989,7 +9903,7 @@ packages: es-abstract: 1.21.2 dev: true - /string.prototype.trimstart/1.0.6: + /string.prototype.trimstart@1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 @@ -9997,82 +9911,82 @@ packages: es-abstract: 1.21.2 dev: true - /string_decoder/1.1.1: + /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 dev: true - /string_decoder/1.3.0: + /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 - /strip-ansi/3.0.1: + /strip-ansi@3.0.1: resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 dev: true - /strip-ansi/5.2.0: + /strip-ansi@5.2.0: resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} engines: {node: '>=6'} dependencies: ansi-regex: 4.1.1 dev: true - /strip-ansi/6.0.1: + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 - /strip-ansi/7.0.1: + /strip-ansi@7.0.1: resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 dev: true - /strip-bom/4.0.0: + /strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} dev: true - /strip-eof/1.0.0: + /strip-eof@1.0.0: resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} engines: {node: '>=0.10.0'} dev: true - /strip-final-newline/2.0.0: + /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} dev: true - /strip-final-newline/3.0.0: + /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} dev: true - /strip-indent/3.0.0: + /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} dependencies: min-indent: 1.0.1 dev: true - /strip-json-comments/2.0.1: + /strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} dev: true - /strip-json-comments/3.1.1: + /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} dev: true - /sucrase/3.32.0: + /sucrase@3.32.0: resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} engines: {node: '>=8'} hasBin: true @@ -10086,43 +10000,43 @@ packages: ts-interface-checker: 0.1.13 dev: true - /supports-color/5.5.0: + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} dependencies: has-flag: 3.0.0 dev: true - /supports-color/6.1.0: + /supports-color@6.1.0: resolution: {integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==} engines: {node: '>=6'} dependencies: has-flag: 3.0.0 dev: true - /supports-color/7.2.0: + /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - /supports-color/8.1.1: + /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 dev: true - /supports-preserve-symlinks-flag/1.0.0: + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true - /symbol-tree/3.2.4: + /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true - /table-layout/3.0.2: + /table-layout@3.0.2: resolution: {integrity: sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==} engines: {node: '>=12.17'} hasBin: true @@ -10136,7 +10050,7 @@ packages: wordwrapjs: 5.1.0 dev: true - /table/6.8.1: + /table@6.8.1: resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} engines: {node: '>=10.0.0'} dependencies: @@ -10147,12 +10061,12 @@ packages: strip-ansi: 6.0.1 dev: true - /tapable/2.2.1: + /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} dev: true - /terser-webpack-plugin/5.3.7_4mbh3ks6vevmq3w4sbjme7looe: + /terser-webpack-plugin@5.3.7(@swc/core@1.3.49)(esbuild@0.17.16)(webpack@5.79.0): resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -10175,10 +10089,10 @@ packages: schema-utils: 3.1.1 serialize-javascript: 6.0.1 terser: 5.16.9 - webpack: 5.79.0_57233mj27fjz7synoeubptyy7e + webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) dev: true - /terser/5.16.9: + /terser@5.16.9: resolution: {integrity: sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg==} engines: {node: '>=10'} hasBin: true @@ -10189,7 +10103,7 @@ packages: source-map-support: 0.5.21 dev: true - /test-exclude/6.0.0: + /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} dependencies: @@ -10198,77 +10112,77 @@ packages: minimatch: 3.1.2 dev: true - /text-extensions/1.9.0: + /text-extensions@1.9.0: resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} engines: {node: '>=0.10'} dev: true - /text-table/0.2.0: + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /thenify-all/1.6.0: + /thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 dev: true - /thenify/3.3.1: + /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 dev: true - /thread-stream/0.15.2: + /thread-stream@0.15.2: resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} dependencies: real-require: 0.1.0 dev: true - /through/2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - - /through2/2.0.5: + /through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: readable-stream: 2.3.8 xtend: 4.0.2 dev: true - /through2/4.0.2: + /through2@4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: readable-stream: 3.6.2 dev: true - /thunky/1.1.0: + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + /thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} dev: true - /tmp/0.0.33: + /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 - /tmpl/1.0.5: + /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true - /to-fast-properties/2.0.0: + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} dev: true - /to-object-path/0.3.0: + /to-object-path@0.3.0: resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /to-regex-range/2.1.1: + /to-regex-range@2.1.1: resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} engines: {node: '>=0.10.0'} dependencies: @@ -10276,13 +10190,13 @@ packages: repeat-string: 1.6.1 dev: true - /to-regex-range/5.0.1: + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - /to-regex/3.0.2: + /to-regex@3.0.2: resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} engines: {node: '>=0.10.0'} dependencies: @@ -10292,12 +10206,12 @@ packages: safe-regex: 1.1.0 dev: true - /toidentifier/1.0.1: + /toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} dev: true - /tough-cookie/4.1.2: + /tough-cookie@4.1.2: resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} engines: {node: '>=6'} dependencies: @@ -10307,41 +10221,41 @@ packages: url-parse: 1.5.10 dev: true - /tr46/0.0.3: + /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - /tr46/1.0.1: + /tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} dependencies: punycode: 2.3.0 dev: true - /tr46/3.0.0: + /tr46@3.0.0: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} dependencies: punycode: 2.3.0 dev: true - /traverse/0.6.7: + /traverse@0.6.7: resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} dev: true - /tree-kill/1.2.2: + /tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true dev: true - /trim-newlines/3.0.1: + /trim-newlines@3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} dev: true - /ts-interface-checker/0.1.13: + /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-node/10.9.1_faublg25f7qpbcz6w4cw6yyzse: + /ts-node@10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@4.9.5): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -10373,7 +10287,7 @@ packages: yn: 3.1.1 dev: true - /ts-node/10.9.1_l7nicavc6cghsvyjdpeszw7e5e: + /ts-node@10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -10405,19 +10319,19 @@ packages: yn: 3.1.1 dev: true - /tslib/1.14.1: + /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib/2.5.0: + /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - /tsscmp/1.0.6: + /tsscmp@1.0.6: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} dev: true - /tsup/6.7.0_kpvxmbmtx6ydv4unklsjw2abeq: + /tsup@6.7.0(@swc/core@1.3.49)(ts-node@10.9.1)(typescript@5.0.4): resolution: {integrity: sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==} engines: {node: '>=14.18'} hasBin: true @@ -10434,15 +10348,15 @@ packages: optional: true dependencies: '@swc/core': 1.3.49 - bundle-require: 4.0.1_esbuild@0.17.16 + bundle-require: 4.0.1(esbuild@0.17.16) cac: 6.7.14 chokidar: 3.4.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) esbuild: 0.17.16 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 3.1.4_ts-node@10.9.1 + postcss-load-config: 3.1.4(ts-node@10.9.1) resolve-from: 5.0.0 rollup: 3.20.2 source-map: 0.8.0-beta.0 @@ -10454,7 +10368,7 @@ packages: - ts-node dev: true - /tsutils/3.21.0_typescript@5.0.4: + /tsutils@3.21.0(typescript@5.0.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: @@ -10464,55 +10378,55 @@ packages: typescript: 5.0.4 dev: true - /type-check/0.3.2: + /type-check@0.3.2: resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 dev: true - /type-check/0.4.0: + /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 dev: true - /type-detect/4.0.8: + /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} dev: true - /type-fest/0.18.1: + /type-fest@0.18.1: resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} engines: {node: '>=10'} dev: true - /type-fest/0.20.2: + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} dev: true - /type-fest/0.21.3: + /type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - /type-fest/0.6.0: + /type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} dev: true - /type-fest/0.8.1: + /type-fest@0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} dev: true - /type-fest/2.19.0: + /type-fest@2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} dev: false - /type-is/1.6.18: + /type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} dependencies: @@ -10520,7 +10434,7 @@ packages: mime-types: 2.1.35 dev: true - /typed-array-length/1.0.4: + /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: call-bind: 1.0.2 @@ -10528,29 +10442,29 @@ packages: is-typed-array: 1.1.10 dev: true - /typescript/4.9.5: + /typescript@4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} hasBin: true dev: true - /typescript/5.0.4: + /typescript@5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} hasBin: true dev: true - /typical/4.0.0: + /typical@4.0.0: resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} engines: {node: '>=8'} dev: true - /typical/7.1.1: + /typical@7.1.1: resolution: {integrity: sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==} engines: {node: '>=12.17'} dev: true - /unbox-primitive/1.0.2: + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: call-bind: 1.0.2 @@ -10559,19 +10473,19 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /undici/5.21.2: + /undici@5.21.2: resolution: {integrity: sha512-f6pTQ9RF4DQtwoWSaC42P/NKlUjvezVvd9r155ohqkwFNRyBKM3f3pcty3ouusefNRyM25XhIQEbeQ46sZDJfQ==} engines: {node: '>=12.18'} dependencies: busboy: 1.6.0 dev: true - /unicode-canonical-property-names-ecmascript/2.0.0: + /unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} dev: true - /unicode-match-property-ecmascript/2.0.0: + /unicode-match-property-ecmascript@2.0.0: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} dependencies: @@ -10579,17 +10493,17 @@ packages: unicode-property-aliases-ecmascript: 2.1.0 dev: true - /unicode-match-property-value-ecmascript/2.1.0: + /unicode-match-property-value-ecmascript@2.1.0: resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} engines: {node: '>=4'} dev: true - /unicode-property-aliases-ecmascript/2.1.0: + /unicode-property-aliases-ecmascript@2.1.0: resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} engines: {node: '>=4'} dev: true - /union-value/1.0.1: + /union-value@1.0.1: resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} engines: {node: '>=0.10.0'} dependencies: @@ -10599,22 +10513,22 @@ packages: set-value: 2.0.1 dev: true - /universalify/0.2.0: + /universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} dev: true - /universalify/2.0.0: + /universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} dev: true - /unpipe/1.0.0: + /unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} dev: true - /unset-value/1.0.0: + /unset-value@1.0.0: resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} engines: {node: '>=0.10.0'} dependencies: @@ -10622,7 +10536,7 @@ packages: isobject: 3.0.1 dev: true - /update-browserslist-db/1.0.10_browserslist@4.21.5: + /update-browserslist-db@1.0.10(browserslist@4.21.5): resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} hasBin: true peerDependencies: @@ -10633,18 +10547,18 @@ packages: picocolors: 1.0.0 dev: true - /uri-js/4.4.1: + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.0 dev: true - /urix/0.1.0: + /urix@0.1.0: resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} deprecated: Please see https://github.com/lydell/urix#deprecated dev: true - /url-loader/4.1.1_webpack@5.79.0: + /url-loader@4.1.1(webpack@5.79.0): resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -10657,32 +10571,32 @@ packages: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.1.1 - webpack: 5.79.0_57233mj27fjz7synoeubptyy7e + webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) dev: true - /url-parse/1.5.10: + /url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} dependencies: querystringify: 2.2.0 requires-port: 1.0.0 dev: true - /url/0.11.0: + /url@0.11.0: resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} dependencies: punycode: 1.3.2 querystring: 0.2.0 dev: true - /use/3.1.1: + /use@3.1.1: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} engines: {node: '>=0.10.0'} dev: true - /util-deprecate/1.0.2: + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - /util.promisify/1.1.1: + /util.promisify@1.1.1: resolution: {integrity: sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==} dependencies: call-bind: 1.0.2 @@ -10692,31 +10606,31 @@ packages: object.getownpropertydescriptors: 2.1.5 dev: true - /utils-merge/1.0.1: + /utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} dev: true - /uuid/3.4.0: + /uuid@3.4.0: resolution: {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. hasBin: true dev: true - /uuid/8.3.2: + /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true dev: true - /v8-compile-cache-lib/3.0.1: + /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /v8-compile-cache/2.3.0: + /v8-compile-cache@2.3.0: resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true - /v8-to-istanbul/9.1.0: + /v8-to-istanbul@9.1.0: resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} dependencies: @@ -10725,32 +10639,32 @@ packages: convert-source-map: 1.9.0 dev: true - /validate-npm-package-license/3.0.4: + /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 dev: true - /vary/1.1.2: + /vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} dev: true - /w3c-xmlserializer/4.0.0: + /w3c-xmlserializer@4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} dependencies: xml-name-validator: 4.0.0 dev: true - /walker/1.0.8: + /walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 dev: true - /watchpack/2.4.0: + /watchpack@2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} dependencies: @@ -10758,35 +10672,35 @@ packages: graceful-fs: 4.2.11 dev: true - /wbuf/1.7.3: + /wbuf@1.7.3: resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} dependencies: minimalistic-assert: 1.0.1 dev: true - /wcwidth/1.0.1: + /wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 - /web-streams-polyfill/4.0.0-beta.3: + /web-streams-polyfill@4.0.0-beta.3: resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} engines: {node: '>= 14'} dev: false - /webidl-conversions/3.0.1: + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - /webidl-conversions/4.0.2: + /webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} dev: true - /webidl-conversions/7.0.0: + /webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} dev: true - /webpack-dev-middleware/3.7.3_webpack@5.79.0: + /webpack-dev-middleware@3.7.3(webpack@5.79.0): resolution: {integrity: sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==} engines: {node: '>= 6'} peerDependencies: @@ -10796,11 +10710,11 @@ packages: mime: 2.6.0 mkdirp: 0.5.6 range-parser: 1.2.1 - webpack: 5.79.0_57233mj27fjz7synoeubptyy7e + webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) webpack-log: 2.0.0 dev: true - /webpack-dev-server/3.11.3_webpack@5.79.0: + /webpack-dev-server@3.11.3(webpack@5.79.0): resolution: {integrity: sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==} engines: {node: '>= 6.11.5'} hasBin: true @@ -10814,13 +10728,13 @@ packages: ansi-html-community: 0.0.8 bonjour: 3.5.0 chokidar: 3.4.1 - compression: 1.7.4_supports-color@6.1.0 + compression: 1.7.4(supports-color@6.1.0) connect-history-api-fallback: 1.6.0 - debug: 4.3.4_supports-color@6.1.0 + debug: 4.3.4(supports-color@6.1.0) del: 4.1.1 - express: 4.18.2_supports-color@6.1.0 + express: 4.18.2(supports-color@6.1.0) html-entities: 1.4.0 - http-proxy-middleware: 0.19.1_tmpgdztspuwvsxzgjkhoqk7duq + http-proxy-middleware: 0.19.1(debug@4.3.4)(supports-color@6.1.0) import-local: 2.0.0 internal-ip: 4.3.0 ip: 1.1.8 @@ -10829,19 +10743,19 @@ packages: loglevel: 1.8.1 opn: 5.5.0 p-retry: 3.0.1 - portfinder: 1.0.32_supports-color@6.1.0 + portfinder: 1.0.32(supports-color@6.1.0) schema-utils: 1.0.0 selfsigned: 1.10.14 semver: 6.3.0 - serve-index: 1.9.1_supports-color@6.1.0 + serve-index: 1.9.1(supports-color@6.1.0) sockjs: 0.3.24 - sockjs-client: 1.6.1_supports-color@6.1.0 - spdy: 4.0.2_supports-color@6.1.0 + sockjs-client: 1.6.1(supports-color@6.1.0) + spdy: 4.0.2(supports-color@6.1.0) strip-ansi: 3.0.1 supports-color: 6.1.0 url: 0.11.0 - webpack: 5.79.0_57233mj27fjz7synoeubptyy7e - webpack-dev-middleware: 3.7.3_webpack@5.79.0 + webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) + webpack-dev-middleware: 3.7.3(webpack@5.79.0) webpack-log: 2.0.0 ws: 6.2.2 yargs: 13.3.2 @@ -10850,16 +10764,16 @@ packages: - utf-8-validate dev: true - /webpack-http-server/0.5.0_57233mj27fjz7synoeubptyy7e: + /webpack-http-server@0.5.0(@swc/core@1.3.49)(esbuild@0.17.16): resolution: {integrity: sha512-kyewxAnzmDuZxe09fn/Bb0PeEnaDxHChYKFVsMy4oeBUs9Cyv2j1uEgzQJ7ljPFexLU8ongUS4i4O+e22CeBZQ==} dependencies: '@types/express': 4.17.17 '@types/mustache': 4.2.2 - express: 4.18.2 + express: 4.18.2(supports-color@6.1.0) memfs: 3.5.0 mustache: 4.2.0 outvariant: 1.4.0 - webpack: 5.79.0_57233mj27fjz7synoeubptyy7e + webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) transitivePeerDependencies: - '@swc/core' - esbuild @@ -10868,7 +10782,7 @@ packages: - webpack-cli dev: true - /webpack-log/2.0.0: + /webpack-log@2.0.0: resolution: {integrity: sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==} engines: {node: '>= 6'} dependencies: @@ -10876,7 +10790,7 @@ packages: uuid: 3.4.0 dev: true - /webpack-merge/5.8.0: + /webpack-merge@5.8.0: resolution: {integrity: sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==} engines: {node: '>=10.0.0'} dependencies: @@ -10884,19 +10798,19 @@ packages: wildcard: 2.0.0 dev: true - /webpack-sources/1.4.3: + /webpack-sources@1.4.3: resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} dependencies: source-list-map: 2.0.1 source-map: 0.6.1 dev: true - /webpack-sources/3.2.3: + /webpack-sources@3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} dev: true - /webpack/5.79.0_57233mj27fjz7synoeubptyy7e: + /webpack@5.79.0(@swc/core@1.3.49)(esbuild@0.17.16): resolution: {integrity: sha512-3mN4rR2Xq+INd6NnYuL9RC9GAmc1ROPKJoHhrZ4pAjdMFEkJJWrsPw8o2JjCIyQyTu7rTXYn4VG6OpyB3CobZg==} engines: {node: '>=10.13.0'} hasBin: true @@ -10912,7 +10826,7 @@ packages: '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 acorn: 8.8.2 - acorn-import-assertions: 1.8.0_acorn@8.8.2 + acorn-import-assertions: 1.8.0(acorn@8.8.2) browserslist: 4.21.5 chrome-trace-event: 1.0.3 enhanced-resolve: 5.12.0 @@ -10927,7 +10841,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.1.1 tapable: 2.2.1 - terser-webpack-plugin: 5.3.7_4mbh3ks6vevmq3w4sbjme7looe + terser-webpack-plugin: 5.3.7(@swc/core@1.3.49)(esbuild@0.17.16)(webpack@5.79.0) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -10936,7 +10850,7 @@ packages: - uglify-js dev: true - /websocket-driver/0.7.4: + /websocket-driver@0.7.4: resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} engines: {node: '>=0.8.0'} dependencies: @@ -10945,24 +10859,24 @@ packages: websocket-extensions: 0.1.4 dev: true - /websocket-extensions/0.1.4: + /websocket-extensions@0.1.4: resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} engines: {node: '>=0.8.0'} dev: true - /whatwg-encoding/2.0.0: + /whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} dependencies: iconv-lite: 0.6.3 dev: true - /whatwg-mimetype/3.0.0: + /whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} dev: true - /whatwg-url/11.0.0: + /whatwg-url@11.0.0: resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} engines: {node: '>=12'} dependencies: @@ -10970,13 +10884,13 @@ packages: webidl-conversions: 7.0.0 dev: true - /whatwg-url/5.0.0: + /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - /whatwg-url/7.1.0: + /whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} dependencies: lodash.sortby: 4.7.0 @@ -10984,7 +10898,7 @@ packages: webidl-conversions: 4.0.2 dev: true - /which-boxed-primitive/1.0.2: + /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 @@ -10994,11 +10908,11 @@ packages: is-symbol: 1.0.4 dev: true - /which-module/2.0.0: + /which-module@2.0.0: resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} dev: true - /which-typed-array/1.1.9: + /which-typed-array@1.1.9: resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} engines: {node: '>= 0.4'} dependencies: @@ -11010,14 +10924,14 @@ packages: is-typed-array: 1.1.10 dev: true - /which/1.3.1: + /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true dependencies: isexe: 2.0.0 dev: true - /which/2.0.2: + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true @@ -11025,21 +10939,21 @@ packages: isexe: 2.0.0 dev: true - /wildcard/2.0.0: + /wildcard@2.0.0: resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==} dev: true - /word-wrap/1.2.3: + /word-wrap@1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true - /wordwrapjs/5.1.0: + /wordwrapjs@5.1.0: resolution: {integrity: sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==} engines: {node: '>=12.17'} dev: true - /wrap-ansi/5.1.0: + /wrap-ansi@5.1.0: resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} engines: {node: '>=6'} dependencies: @@ -11048,7 +10962,7 @@ packages: strip-ansi: 5.2.0 dev: true - /wrap-ansi/6.2.0: + /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} dependencies: @@ -11057,7 +10971,7 @@ packages: strip-ansi: 6.0.1 dev: true - /wrap-ansi/7.0.0: + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} dependencies: @@ -11065,11 +10979,11 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 - /wrappy/1.0.2: + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /write-file-atomic/4.0.2: + /write-file-atomic@4.0.2: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: @@ -11077,7 +10991,7 @@ packages: signal-exit: 3.0.7 dev: true - /ws/6.2.2: + /ws@6.2.2: resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} peerDependencies: bufferutil: ^4.0.1 @@ -11091,7 +11005,7 @@ packages: async-limiter: 1.0.1 dev: true - /ws/7.5.9: + /ws@7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} peerDependencies: @@ -11104,7 +11018,7 @@ packages: optional: true dev: true - /ws/8.11.0: + /ws@8.11.0: resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} engines: {node: '>=10.0.0'} peerDependencies: @@ -11117,7 +11031,7 @@ packages: optional: true dev: true - /ws/8.13.0: + /ws@8.13.0: resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} engines: {node: '>=10.0.0'} peerDependencies: @@ -11130,69 +11044,69 @@ packages: optional: true dev: true - /xml-name-validator/4.0.0: + /xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} dev: true - /xmlchars/2.2.0: + /xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true - /xtend/4.0.2: + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} dev: true - /y18n/4.0.3: + /y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} dev: true - /y18n/5.0.8: + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - /yallist/3.1.1: + /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true - /yallist/4.0.0: + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true - /yaml/1.10.2: + /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} dev: true - /yaml/2.2.1: + /yaml@2.2.1: resolution: {integrity: sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==} engines: {node: '>= 14'} dev: true - /yargs-parser/10.1.0: + /yargs-parser@10.1.0: resolution: {integrity: sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==} dependencies: camelcase: 4.1.0 dev: true - /yargs-parser/13.1.2: + /yargs-parser@13.1.2: resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} dependencies: camelcase: 5.3.1 decamelize: 1.2.0 dev: true - /yargs-parser/20.2.9: + /yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} dev: true - /yargs-parser/21.1.1: + /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - /yargs/13.3.2: + /yargs@13.3.2: resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==} dependencies: cliui: 5.0.0 @@ -11207,7 +11121,7 @@ packages: yargs-parser: 13.1.2 dev: true - /yargs/17.7.1: + /yargs@17.7.1: resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} engines: {node: '>=12'} dependencies: @@ -11219,17 +11133,17 @@ packages: y18n: 5.0.8 yargs-parser: 21.1.1 - /ylru/1.3.2: + /ylru@1.3.2: resolution: {integrity: sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==} engines: {node: '>= 4.0.0'} dev: true - /yn/3.1.1: + /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} dev: true - /yocto-queue/0.1.0: + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true diff --git a/src/core/utils/HttpResponse/decorators.ts b/src/core/utils/HttpResponse/decorators.ts index a8b21c021..7b1bb97cc 100644 --- a/src/core/utils/HttpResponse/decorators.ts +++ b/src/core/utils/HttpResponse/decorators.ts @@ -1,4 +1,4 @@ -import * as statuses from 'statuses' +import statuses from '@bundled-es-modules/statuses' import type { HttpResponseInit } from '../../HttpResponse' const { message } = statuses diff --git a/src/core/utils/request/getRequestCookies.ts b/src/core/utils/request/getRequestCookies.ts index f869803e2..749390ee2 100644 --- a/src/core/utils/request/getRequestCookies.ts +++ b/src/core/utils/request/getRequestCookies.ts @@ -1,4 +1,4 @@ -import * as cookieUtils from '@bundled-es-modules/cookie' +import cookieUtils from '@bundled-es-modules/cookie' import { store } from '@mswjs/cookies' function getAllDocumentCookies() { diff --git a/src/core/utils/request/onUnhandledRequest.ts b/src/core/utils/request/onUnhandledRequest.ts index 73f654fa8..b5260cac2 100644 --- a/src/core/utils/request/onUnhandledRequest.ts +++ b/src/core/utils/request/onUnhandledRequest.ts @@ -1,5 +1,5 @@ // @ts-ignore -import * as jsLevenshtein from 'js-levenshtein' +import jsLevenshtein from '@bundled-es-modules/js-levenshtein' import { RequestHandler, RestHandler, GraphQLHandler } from '../..' import { ParsedGraphQLQuery, @@ -9,7 +9,7 @@ import { getPublicUrlFromRequest } from './getPublicUrlFromRequest' import { isStringEqual } from '../internal/isStringEqual' import { devUtils } from '../internal/devUtils' -const getStringMatchScore = (jsLevenshtein as any).default +const getStringMatchScore = jsLevenshtein const MAX_MATCH_SCORE = 3 const MAX_SUGGESTION_COUNT = 4 From 100a43fdcf779ad2f408cffc5b2ae16a5131f10d Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 29 Apr 2023 12:43:01 +0200 Subject: [PATCH 121/210] fix: annotate "@bundled-es-modules/statuses" --- global.d.ts | 4 +- pnpm-lock.yaml | 3886 +++++++++++++++++++++++++----------------------- 2 files changed, 1995 insertions(+), 1895 deletions(-) diff --git a/global.d.ts b/global.d.ts index ec52ae4cd..e8970504b 100644 --- a/global.d.ts +++ b/global.d.ts @@ -5,6 +5,6 @@ declare module '@bundled-es-modules/cookie' { } declare module '@bundled-es-modules/statuses' { - const source_default: any - export { source_default as default } + import * as statuses from 'statuses' + export default statuses } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ab62dd2ed..516b123c6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,237 +1,165 @@ -lockfileVersion: '6.0' +lockfileVersion: 5.4 overrides: chokidar: 3.4.1 +specifiers: + '@babel/core': ^7.17.2 + '@babel/preset-env': ^7.16.11 + '@bundled-es-modules/cookie': ^2.0.0 + '@bundled-es-modules/js-levenshtein': ^2.0.0 + '@bundled-es-modules/statuses': ^1.0.1 + '@commitlint/cli': ^16.1.0 + '@commitlint/config-conventional': ^16.0.0 + '@mswjs/cookies': ^1.0.0 + '@mswjs/interceptors': ^0.22.12 + '@open-draft/test-server': ^0.4.2 + '@open-draft/until': ^2.1.0 + '@ossjs/release': ^0.4.0 + '@playwright/test': ^1.30.0 + '@swc/core': ^1.3.35 + '@swc/jest': ^0.2.24 + '@types/cookie': ^0.4.1 + '@types/express': ^4.17.17 + '@types/fs-extra': ^9.0.13 + '@types/glob': ^8.1.0 + '@types/jest': ^29.4.0 + '@types/js-levenshtein': ^1.1.1 + '@types/json-bigint': ^1.0.1 + '@types/node': 18.x + '@types/node-fetch': ^2.5.11 + '@types/puppeteer': ^5.4.4 + '@types/statuses': ^2.0.1 + '@typescript-eslint/eslint-plugin': ^5.11.0 + '@typescript-eslint/parser': ^5.11.0 + '@web/dev-server': ^0.1.38 + babel-loader: ^8.2.3 + babel-minify: ^0.5.1 + chokidar: 3.4.1 + commitizen: ^4.2.4 + cross-env: ^7.0.3 + cross-fetch: ^3.1.5 + cz-conventional-changelog: 3.3.0 + esbuild: ^0.17.15 + esbuild-loader: ^2.21.0 + eslint: ^7.30.0 + eslint-config-prettier: ^8.3.0 + eslint-plugin-prettier: ^3.4.0 + express: ^4.18.2 + formdata-node: 4.4.1 + fs-extra: ^10.0.0 + fs-teardown: ^0.3.0 + glob: ^9.3.4 + graphql: ^15.0.0 || ^16.0.0 + headers-polyfill: ^3.1.2 + inquirer: ^8.2.0 + is-node-process: ^1.2.0 + jest: ^29.4.3 + jest-environment-jsdom: ^29.4.3 + js-levenshtein: ^1.1.6 + json-bigint: ^1.0.0 + lint-staged: ^13.0.3 + node-fetch: ^2.6.7 + outvariant: ^1.4.0 + page-with: ^0.6.1 + path-to-regexp: ^6.2.0 + prettier: ^2.7.1 + regenerator-runtime: ^0.13.9 + rimraf: ^3.0.2 + simple-git-hooks: ^2.8.0 + strict-event-emitter: ^0.5.0 + ts-node: ^10.9.1 + tsup: ^6.7.0 + type-fest: ^2.19.0 + typescript: ^5.0.2 + undici: ^5.20.0 + url-loader: ^4.1.1 + webpack: ^5.68.0 + webpack-dev-server: ^3.11.2 + webpack-http-server: ^0.5.0 + yargs: ^17.3.1 + dependencies: - '@bundled-es-modules/cookie': - specifier: ^2.0.0 - version: 2.0.0 - '@bundled-es-modules/js-levenshtein': - specifier: ^2.0.0 - version: 2.0.0 - '@bundled-es-modules/statuses': - specifier: ^1.0.1 - version: 1.0.1 - '@mswjs/cookies': - specifier: ^1.0.0 - version: 1.0.0 - '@mswjs/interceptors': - specifier: ^0.22.12 - version: 0.22.12 - '@open-draft/until': - specifier: ^2.1.0 - version: 2.1.0 - '@types/cookie': - specifier: ^0.4.1 - version: 0.4.1 - '@types/js-levenshtein': - specifier: ^1.1.1 - version: 1.1.1 - '@types/statuses': - specifier: ^2.0.1 - version: 2.0.1 - chokidar: - specifier: 3.4.1 - version: 3.4.1 - formdata-node: - specifier: 4.4.1 - version: 4.4.1 - graphql: - specifier: ^15.0.0 || ^16.0.0 - version: 16.6.0 - headers-polyfill: - specifier: ^3.1.2 - version: 3.1.2 - inquirer: - specifier: ^8.2.0 - version: 8.2.5 - is-node-process: - specifier: ^1.2.0 - version: 1.2.0 - js-levenshtein: - specifier: ^1.1.6 - version: 1.1.6 - node-fetch: - specifier: ^2.6.7 - version: 2.6.9 - outvariant: - specifier: ^1.4.0 - version: 1.4.0 - path-to-regexp: - specifier: ^6.2.0 - version: 6.2.1 - strict-event-emitter: - specifier: ^0.5.0 - version: 0.5.0 - type-fest: - specifier: ^2.19.0 - version: 2.19.0 - yargs: - specifier: ^17.3.1 - version: 17.7.1 + '@bundled-es-modules/cookie': 2.0.0 + '@bundled-es-modules/js-levenshtein': 2.0.0 + '@bundled-es-modules/statuses': 1.0.1 + '@mswjs/cookies': 1.0.0 + '@mswjs/interceptors': 0.22.12 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.4.1 + '@types/js-levenshtein': 1.1.1 + '@types/statuses': 2.0.1 + chokidar: 3.4.1 + formdata-node: 4.4.1 + graphql: 16.6.0 + headers-polyfill: 3.1.2 + inquirer: 8.2.5 + is-node-process: 1.2.0 + js-levenshtein: 1.1.6 + node-fetch: 2.6.9 + outvariant: 1.4.0 + path-to-regexp: 6.2.1 + strict-event-emitter: 0.5.0 + type-fest: 2.19.0 + yargs: 17.7.1 devDependencies: - '@babel/core': - specifier: ^7.17.2 - version: 7.21.4 - '@babel/preset-env': - specifier: ^7.16.11 - version: 7.21.4(@babel/core@7.21.4) - '@commitlint/cli': - specifier: ^16.1.0 - version: 16.3.0(@swc/core@1.3.49) - '@commitlint/config-conventional': - specifier: ^16.0.0 - version: 16.2.4 - '@open-draft/test-server': - specifier: ^0.4.2 - version: 0.4.2 - '@ossjs/release': - specifier: ^0.4.0 - version: 0.4.0 - '@playwright/test': - specifier: ^1.30.0 - version: 1.32.3 - '@swc/core': - specifier: ^1.3.35 - version: 1.3.49 - '@swc/jest': - specifier: ^0.2.24 - version: 0.2.24(@swc/core@1.3.49) - '@types/express': - specifier: ^4.17.17 - version: 4.17.17 - '@types/fs-extra': - specifier: ^9.0.13 - version: 9.0.13 - '@types/glob': - specifier: ^8.1.0 - version: 8.1.0 - '@types/jest': - specifier: ^29.4.0 - version: 29.5.0 - '@types/json-bigint': - specifier: ^1.0.1 - version: 1.0.1 - '@types/node': - specifier: 18.x - version: 18.15.11 - '@types/node-fetch': - specifier: ^2.5.11 - version: 2.6.3 - '@types/puppeteer': - specifier: ^5.4.4 - version: 5.4.7 - '@typescript-eslint/eslint-plugin': - specifier: ^5.11.0 - version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@7.32.0)(typescript@5.0.4) - '@typescript-eslint/parser': - specifier: ^5.11.0 - version: 5.58.0(eslint@7.32.0)(typescript@5.0.4) - '@web/dev-server': - specifier: ^0.1.38 - version: 0.1.38 - babel-loader: - specifier: ^8.2.3 - version: 8.3.0(@babel/core@7.21.4)(webpack@5.79.0) - babel-minify: - specifier: ^0.5.1 - version: 0.5.2 - commitizen: - specifier: ^4.2.4 - version: 4.3.0(@swc/core@1.3.49) - cross-env: - specifier: ^7.0.3 - version: 7.0.3 - cross-fetch: - specifier: ^3.1.5 - version: 3.1.5 - cz-conventional-changelog: - specifier: 3.3.0 - version: 3.3.0(@swc/core@1.3.49) - esbuild: - specifier: ^0.17.15 - version: 0.17.16 - esbuild-loader: - specifier: ^2.21.0 - version: 2.21.0(webpack@5.79.0) - eslint: - specifier: ^7.30.0 - version: 7.32.0 - eslint-config-prettier: - specifier: ^8.3.0 - version: 8.8.0(eslint@7.32.0) - eslint-plugin-prettier: - specifier: ^3.4.0 - version: 3.4.1(eslint-config-prettier@8.8.0)(eslint@7.32.0)(prettier@2.8.7) - express: - specifier: ^4.18.2 - version: 4.18.2(supports-color@6.1.0) - fs-extra: - specifier: ^10.0.0 - version: 10.1.0 - fs-teardown: - specifier: ^0.3.0 - version: 0.3.2 - glob: - specifier: ^9.3.4 - version: 9.3.5 - jest: - specifier: ^29.4.3 - version: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) - jest-environment-jsdom: - specifier: ^29.4.3 - version: 29.5.0 - json-bigint: - specifier: ^1.0.0 - version: 1.0.0 - lint-staged: - specifier: ^13.0.3 - version: 13.2.1 - page-with: - specifier: ^0.6.1 - version: 0.6.1(@swc/core@1.3.49)(esbuild@0.17.16) - prettier: - specifier: ^2.7.1 - version: 2.8.7 - regenerator-runtime: - specifier: ^0.13.9 - version: 0.13.11 - rimraf: - specifier: ^3.0.2 - version: 3.0.2 - simple-git-hooks: - specifier: ^2.8.0 - version: 2.8.1 - ts-node: - specifier: ^10.9.1 - version: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4) - tsup: - specifier: ^6.7.0 - version: 6.7.0(@swc/core@1.3.49)(ts-node@10.9.1)(typescript@5.0.4) - typescript: - specifier: ^5.0.2 - version: 5.0.4 - undici: - specifier: ^5.20.0 - version: 5.21.2 - url-loader: - specifier: ^4.1.1 - version: 4.1.1(webpack@5.79.0) - webpack: - specifier: ^5.68.0 - version: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) - webpack-dev-server: - specifier: ^3.11.2 - version: 3.11.3(webpack@5.79.0) - webpack-http-server: - specifier: ^0.5.0 - version: 0.5.0(@swc/core@1.3.49)(esbuild@0.17.16) + '@babel/core': 7.21.4 + '@babel/preset-env': 7.21.4_@babel+core@7.21.4 + '@commitlint/cli': 16.3.0_@swc+core@1.3.49 + '@commitlint/config-conventional': 16.2.4 + '@open-draft/test-server': 0.4.2 + '@ossjs/release': 0.4.0 + '@playwright/test': 1.32.3 + '@swc/core': 1.3.49 + '@swc/jest': 0.2.24_@swc+core@1.3.49 + '@types/express': 4.17.17 + '@types/fs-extra': 9.0.13 + '@types/glob': 8.1.0 + '@types/jest': 29.5.0 + '@types/json-bigint': 1.0.1 + '@types/node': 18.15.11 + '@types/node-fetch': 2.6.3 + '@types/puppeteer': 5.4.7 + '@typescript-eslint/eslint-plugin': 5.58.0_ug56riyzsilszklzuxgwlsssqe + '@typescript-eslint/parser': 5.58.0_cgdknpc562nnyruteofhkegnom + '@web/dev-server': 0.1.38 + babel-loader: 8.3.0_c3tfwv7p35clwcmkb5fnkshzei + babel-minify: 0.5.2 + commitizen: 4.3.0_@swc+core@1.3.49 + cross-env: 7.0.3 + cross-fetch: 3.1.5 + cz-conventional-changelog: 3.3.0_@swc+core@1.3.49 + esbuild: 0.17.16 + esbuild-loader: 2.21.0_webpack@5.79.0 + eslint: 7.32.0 + eslint-config-prettier: 8.8.0_eslint@7.32.0 + eslint-plugin-prettier: 3.4.1_mouiu7tdcm2dtderipseaggmee + express: 4.18.2 + fs-extra: 10.1.0 + fs-teardown: 0.3.2 + glob: 9.3.5 + jest: 29.5.0_rrli7kzx2akox3oq6aahu3rvje + jest-environment-jsdom: 29.5.0 + json-bigint: 1.0.0 + lint-staged: 13.2.1 + page-with: 0.6.1_57233mj27fjz7synoeubptyy7e + prettier: 2.8.7 + regenerator-runtime: 0.13.11 + rimraf: 3.0.2 + simple-git-hooks: 2.8.1 + ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e + tsup: 6.7.0_kpvxmbmtx6ydv4unklsjw2abeq + typescript: 5.0.4 + undici: 5.21.2 + url-loader: 4.1.1_webpack@5.79.0 + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e + webpack-dev-server: 3.11.3_webpack@5.79.0 + webpack-http-server: 0.5.0_57233mj27fjz7synoeubptyy7e packages: - /@75lb/deep-merge@1.1.1: + /@75lb/deep-merge/1.1.1: resolution: {integrity: sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw==} engines: {node: '>=12.17'} dependencies: @@ -239,7 +167,7 @@ packages: typical: 7.1.1 dev: true - /@ampproject/remapping@2.2.1: + /@ampproject/remapping/2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: @@ -247,32 +175,32 @@ packages: '@jridgewell/trace-mapping': 0.3.18 dev: true - /@babel/code-frame@7.12.11: + /@babel/code-frame/7.12.11: resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} dependencies: '@babel/highlight': 7.18.6 dev: true - /@babel/code-frame@7.21.4: + /@babel/code-frame/7.21.4: resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 dev: true - /@babel/compat-data@7.21.4: + /@babel/compat-data/7.21.4: resolution: {integrity: sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==} engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.21.4: + /@babel/core/7.21.4: resolution: {integrity: sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.21.4 '@babel/generator': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 '@babel/helper-module-transforms': 7.21.2 '@babel/helpers': 7.21.0 '@babel/parser': 7.21.4 @@ -280,7 +208,7 @@ packages: '@babel/traverse': 7.21.4 '@babel/types': 7.21.4 convert-source-map: 1.9.0 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.0 @@ -288,7 +216,7 @@ packages: - supports-color dev: true - /@babel/generator@7.21.4: + /@babel/generator/7.21.4: resolution: {integrity: sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==} engines: {node: '>=6.9.0'} dependencies: @@ -298,14 +226,14 @@ packages: jsesc: 2.5.2 dev: true - /@babel/helper-annotate-as-pure@7.18.6: + /@babel/helper-annotate-as-pure/7.18.6: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-builder-binary-assignment-operator-visitor@7.18.9: + /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9: resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==} engines: {node: '>=6.9.0'} dependencies: @@ -313,7 +241,7 @@ packages: '@babel/types': 7.21.4 dev: true - /@babel/helper-compilation-targets@7.21.4(@babel/core@7.21.4): + /@babel/helper-compilation-targets/7.21.4_@babel+core@7.21.4: resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -327,7 +255,7 @@ packages: semver: 6.3.0 dev: true - /@babel/helper-create-class-features-plugin@7.21.4(@babel/core@7.21.4): + /@babel/helper-create-class-features-plugin/7.21.4_@babel+core@7.21.4: resolution: {integrity: sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -346,7 +274,7 @@ packages: - supports-color dev: true - /@babel/helper-create-regexp-features-plugin@7.21.4(@babel/core@7.21.4): + /@babel/helper-create-regexp-features-plugin/7.21.4_@babel+core@7.21.4: resolution: {integrity: sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -357,15 +285,15 @@ packages: regexpu-core: 5.3.2 dev: true - /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.21.4): + /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.21.4: resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.2 semver: 6.3.0 @@ -373,19 +301,19 @@ packages: - supports-color dev: true - /@babel/helper-environment-visitor@7.18.9: + /@babel/helper-environment-visitor/7.18.9: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-explode-assignable-expression@7.18.6: + /@babel/helper-explode-assignable-expression/7.18.6: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-function-name@7.21.0: + /@babel/helper-function-name/7.21.0: resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} engines: {node: '>=6.9.0'} dependencies: @@ -393,28 +321,28 @@ packages: '@babel/types': 7.21.4 dev: true - /@babel/helper-hoist-variables@7.18.6: + /@babel/helper-hoist-variables/7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-member-expression-to-functions@7.21.0: + /@babel/helper-member-expression-to-functions/7.21.0: resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-module-imports@7.21.4: + /@babel/helper-module-imports/7.21.4: resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-module-transforms@7.21.2: + /@babel/helper-module-transforms/7.21.2: resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} engines: {node: '>=6.9.0'} dependencies: @@ -430,19 +358,19 @@ packages: - supports-color dev: true - /@babel/helper-optimise-call-expression@7.18.6: + /@babel/helper-optimise-call-expression/7.18.6: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-plugin-utils@7.20.2: + /@babel/helper-plugin-utils/7.20.2: resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.21.4): + /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -457,7 +385,7 @@ packages: - supports-color dev: true - /@babel/helper-replace-supers@7.20.7: + /@babel/helper-replace-supers/7.20.7: resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==} engines: {node: '>=6.9.0'} dependencies: @@ -471,43 +399,43 @@ packages: - supports-color dev: true - /@babel/helper-simple-access@7.20.2: + /@babel/helper-simple-access/7.20.2: resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-skip-transparent-expression-wrappers@7.20.0: + /@babel/helper-skip-transparent-expression-wrappers/7.20.0: resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-split-export-declaration@7.18.6: + /@babel/helper-split-export-declaration/7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-string-parser@7.19.4: + /@babel/helper-string-parser/7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-identifier@7.19.1: + /@babel/helper-validator-identifier/7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option@7.21.0: + /@babel/helper-validator-option/7.21.0: resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-wrap-function@7.20.5: + /@babel/helper-wrap-function/7.20.5: resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} engines: {node: '>=6.9.0'} dependencies: @@ -519,7 +447,7 @@ packages: - supports-color dev: true - /@babel/helpers@7.21.0: + /@babel/helpers/7.21.0: resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} engines: {node: '>=6.9.0'} dependencies: @@ -530,7 +458,7 @@ packages: - supports-color dev: true - /@babel/highlight@7.18.6: + /@babel/highlight/7.18.6: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} dependencies: @@ -539,7 +467,7 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser@7.21.4: + /@babel/parser/7.21.4: resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==} engines: {node: '>=6.0.0'} hasBin: true @@ -547,7 +475,7 @@ packages: '@babel/types': 7.21.4 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.21.4): + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -557,7 +485,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.21.4): + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -566,10 +494,10 @@ packages: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.4): + /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -578,40 +506,40 @@ packages: '@babel/core': 7.21.4 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.4 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.21.4): + /@babel/plugin-proposal-class-static-block/7.21.0_@babel+core@7.21.4: resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.4) + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.4 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -619,10 +547,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.21.4): + /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -630,10 +558,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -641,10 +569,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.21.4): + /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} engines: {node: '>=6.9.0'} peerDependencies: @@ -652,10 +580,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -663,10 +591,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -674,10 +602,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.21.4): + /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -685,13 +613,13 @@ packages: dependencies: '@babel/compat-data': 7.21.4 '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -699,10 +627,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.21.4): + /@babel/plugin-proposal-optional-chaining/7.21.0_@babel+core@7.21.4: resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -711,23 +639,23 @@ packages: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.21.4): + /@babel/plugin-proposal-private-property-in-object/7.21.0_@babel+core@7.21.4: resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -735,25 +663,25 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.4) + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.4 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.4): + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.4: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -762,7 +690,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -771,7 +699,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.4): + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.4: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -780,7 +708,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.4): + /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.21.4: resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -790,7 +718,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -799,7 +727,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -808,7 +736,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.21.4): + /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.21.4: resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -818,7 +746,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.21.4): + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.21.4: resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -827,7 +755,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -836,7 +764,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-jsx@7.21.4(@babel/core@7.21.4): + /@babel/plugin-syntax-jsx/7.21.4_@babel+core@7.21.4: resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -846,7 +774,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.4): + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.4: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -855,7 +783,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -864,7 +792,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.4): + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.4: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -873,7 +801,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -882,7 +810,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -891,7 +819,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -900,7 +828,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.4): + /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.21.4: resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -910,7 +838,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.4): + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.4: resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -920,7 +848,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.21.4): + /@babel/plugin-syntax-typescript/7.21.4_@babel+core@7.21.4: resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -930,7 +858,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.21.4): + /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -940,7 +868,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.21.4): + /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -949,12 +877,12 @@ packages: '@babel/core': 7.21.4 '@babel/helper-module-imports': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.4) + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.4 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -964,7 +892,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.4): + /@babel/plugin-transform-block-scoping/7.21.0_@babel+core@7.21.4: resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -974,7 +902,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-classes@7.21.0(@babel/core@7.21.4): + /@babel/plugin-transform-classes/7.21.0_@babel+core@7.21.4: resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -982,7 +910,7 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 @@ -994,7 +922,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.21.4): + /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1005,7 +933,7 @@ packages: '@babel/template': 7.20.7 dev: true - /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.21.4): + /@babel/plugin-transform-destructuring/7.21.3_@babel+core@7.21.4: resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1015,18 +943,18 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.21.4): + /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1036,7 +964,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1047,7 +975,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.21.4): + /@babel/plugin-transform-for-of/7.21.0_@babel+core@7.21.4: resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1057,19 +985,19 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.4): + /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 '@babel/helper-function-name': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.4): + /@babel/plugin-transform-literals/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1079,7 +1007,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1089,7 +1017,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.21.4): + /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.21.4: resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1102,7 +1030,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.21.4): + /@babel/plugin-transform-modules-commonjs/7.21.2_@babel+core@7.21.4: resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1116,7 +1044,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.21.4): + /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.21.4: resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1131,7 +1059,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1144,18 +1072,18 @@ packages: - supports-color dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.21.4): + /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.21.4: resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1165,7 +1093,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1178,7 +1106,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.21.4): + /@babel/plugin-transform-parameters/7.21.3_@babel+core@7.21.4: resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1188,7 +1116,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1198,7 +1126,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.21.4): + /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.21.4: resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1209,7 +1137,7 @@ packages: regenerator-transform: 0.15.1 dev: true - /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1219,7 +1147,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1229,7 +1157,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-spread@7.20.7(@babel/core@7.21.4): + /@babel/plugin-transform-spread/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1240,7 +1168,7 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 dev: true - /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1250,7 +1178,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.21.4): + /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1260,7 +1188,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.21.4): + /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1270,7 +1198,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.21.4): + /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.21.4: resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1280,18 +1208,18 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/preset-env@7.21.4(@babel/core@7.21.4): + /@babel/preset-env/7.21.4_@babel+core@7.21.4: resolution: {integrity: sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1299,109 +1227,109 @@ packages: dependencies: '@babel/compat-data': 7.21.4 '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.4) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.4) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.21.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.4) - '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.4) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.4) - '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.4) - '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.21.4) - '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.4) - '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.4) - '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.21.4) - '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.21.4) - '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.4) - '@babel/preset-modules': 0.1.5(@babel/core@7.21.4) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-class-static-block': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-private-property-in-object': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.4 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.4 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.4 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.21.4 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.4 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.4 + '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-block-scoping': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-transform-classes': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-transform-computed-properties': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-transform-destructuring': 7.21.3_@babel+core@7.21.4 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-for-of': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.21.4 + '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.21.4 + '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.21.4 + '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.21.4 + '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.4 + '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-regenerator': 7.20.5_@babel+core@7.21.4 + '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.21.4 + '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.21.4 + '@babel/preset-modules': 0.1.5_@babel+core@7.21.4 '@babel/types': 7.21.4 - babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.4) - babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.4) - babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.4) + babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.21.4 + babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.21.4 + babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.21.4 core-js-compat: 3.30.0 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules@0.1.5(@babel/core@7.21.4): + /@babel/preset-modules/0.1.5_@babel+core@7.21.4: resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.4 '@babel/types': 7.21.4 esutils: 2.0.3 dev: true - /@babel/regjsgen@0.8.0: + /@babel/regjsgen/0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: true - /@babel/runtime@7.21.0: + /@babel/runtime/7.21.0: resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 dev: true - /@babel/template@7.20.7: + /@babel/template/7.20.7: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} dependencies: @@ -1410,7 +1338,7 @@ packages: '@babel/types': 7.21.4 dev: true - /@babel/traverse@7.21.4: + /@babel/traverse/7.21.4: resolution: {integrity: sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==} engines: {node: '>=6.9.0'} dependencies: @@ -1422,13 +1350,13 @@ packages: '@babel/helper-split-export-declaration': 7.18.6 '@babel/parser': 7.21.4 '@babel/types': 7.21.4 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types@7.21.4: + /@babel/types/7.21.4: resolution: {integrity: sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==} engines: {node: '>=6.9.0'} dependencies: @@ -1437,36 +1365,36 @@ packages: to-fast-properties: 2.0.0 dev: true - /@bcoe/v8-coverage@0.2.3: + /@bcoe/v8-coverage/0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /@bundled-es-modules/cookie@2.0.0: + /@bundled-es-modules/cookie/2.0.0: resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==} dependencies: cookie: 0.5.0 dev: false - /@bundled-es-modules/js-levenshtein@2.0.0: + /@bundled-es-modules/js-levenshtein/2.0.0: resolution: {integrity: sha512-KSVIngpi1QztKcUxXr50ru6JCK3zO2TZuax92MdupxosHAZMJrPWkb9U4tyVg878+IBYbsplW1yEyJE3s10cFg==} dependencies: js-levenshtein: 1.1.6 dev: false - /@bundled-es-modules/statuses@1.0.1: + /@bundled-es-modules/statuses/1.0.1: resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} dependencies: statuses: 2.0.1 dev: false - /@commitlint/cli@16.3.0(@swc/core@1.3.49): + /@commitlint/cli/16.3.0_@swc+core@1.3.49: resolution: {integrity: sha512-P+kvONlfsuTMnxSwWE1H+ZcPMY3STFaHb2kAacsqoIkNx66O0T7sTpBxpxkMrFPyhkJiLJnJWMhk4bbvYD3BMA==} engines: {node: '>=v12'} hasBin: true dependencies: '@commitlint/format': 16.2.1 '@commitlint/lint': 16.2.4 - '@commitlint/load': 16.3.0(@swc/core@1.3.49) + '@commitlint/load': 16.3.0_@swc+core@1.3.49 '@commitlint/read': 16.2.1 '@commitlint/types': 16.2.1 lodash: 4.17.21 @@ -1478,14 +1406,14 @@ packages: - '@swc/wasm' dev: true - /@commitlint/config-conventional@16.2.4: + /@commitlint/config-conventional/16.2.4: resolution: {integrity: sha512-av2UQJa3CuE5P0dzxj/o/B9XVALqYzEViHrMXtDrW9iuflrqCStWBAioijppj9URyz6ONpohJKAtSdgAOE0gkA==} engines: {node: '>=v12'} dependencies: conventional-changelog-conventionalcommits: 4.6.3 dev: true - /@commitlint/config-validator@16.2.1: + /@commitlint/config-validator/16.2.1: resolution: {integrity: sha512-hogSe0WGg7CKmp4IfNbdNES3Rq3UEI4XRPB8JL4EPgo/ORq5nrGTVzxJh78omibNuB8Ho4501Czb1Er1MoDWpw==} engines: {node: '>=v12'} dependencies: @@ -1493,7 +1421,7 @@ packages: ajv: 6.12.6 dev: true - /@commitlint/config-validator@17.4.4: + /@commitlint/config-validator/17.4.4: resolution: {integrity: sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==} engines: {node: '>=v14'} dependencies: @@ -1502,7 +1430,7 @@ packages: dev: true optional: true - /@commitlint/ensure@16.2.1: + /@commitlint/ensure/16.2.1: resolution: {integrity: sha512-/h+lBTgf1r5fhbDNHOViLuej38i3rZqTQnBTk+xEg+ehOwQDXUuissQ5GsYXXqI5uGy+261ew++sT4EA3uBJ+A==} engines: {node: '>=v12'} dependencies: @@ -1510,18 +1438,18 @@ packages: lodash: 4.17.21 dev: true - /@commitlint/execute-rule@16.2.1: + /@commitlint/execute-rule/16.2.1: resolution: {integrity: sha512-oSls82fmUTLM6cl5V3epdVo4gHhbmBFvCvQGHBRdQ50H/690Uq1Dyd7hXMuKITCIdcnr9umyDkr8r5C6HZDF3g==} engines: {node: '>=v12'} dev: true - /@commitlint/execute-rule@17.4.0: + /@commitlint/execute-rule/17.4.0: resolution: {integrity: sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==} engines: {node: '>=v14'} dev: true optional: true - /@commitlint/format@16.2.1: + /@commitlint/format/16.2.1: resolution: {integrity: sha512-Yyio9bdHWmNDRlEJrxHKglamIk3d6hC0NkEUW6Ti6ipEh2g0BAhy8Od6t4vLhdZRa1I2n+gY13foy+tUgk0i1Q==} engines: {node: '>=v12'} dependencies: @@ -1529,7 +1457,7 @@ packages: chalk: 4.1.1 dev: true - /@commitlint/is-ignored@16.2.4: + /@commitlint/is-ignored/16.2.4: resolution: {integrity: sha512-Lxdq9aOAYCOOOjKi58ulbwK/oBiiKz+7Sq0+/SpFIEFwhHkIVugvDvWjh2VRBXmRC/x5lNcjDcYEwS/uYUvlYQ==} engines: {node: '>=v12'} dependencies: @@ -1537,7 +1465,7 @@ packages: semver: 7.3.7 dev: true - /@commitlint/lint@16.2.4: + /@commitlint/lint/16.2.4: resolution: {integrity: sha512-AUDuwOxb2eGqsXbTMON3imUGkc1jRdtXrbbohiLSCSk3jFVXgJLTMaEcr39pR00N8nE9uZ+V2sYaiILByZVmxQ==} engines: {node: '>=v12'} dependencies: @@ -1547,7 +1475,7 @@ packages: '@commitlint/types': 16.2.1 dev: true - /@commitlint/load@16.3.0(@swc/core@1.3.49): + /@commitlint/load/16.3.0_@swc+core@1.3.49: resolution: {integrity: sha512-3tykjV/iwbkv2FU9DG+NZ/JqmP0Nm3b7aDwgCNQhhKV5P74JAuByULkafnhn+zsFGypG1qMtI5u+BZoa9APm0A==} engines: {node: '>=v12'} dependencies: @@ -1558,7 +1486,7 @@ packages: '@types/node': 18.15.11 chalk: 4.1.1 cosmiconfig: 7.1.0 - cosmiconfig-typescript-loader: 2.0.2(@swc/core@1.3.49)(@types/node@18.15.11)(cosmiconfig@7.1.0)(typescript@4.9.5) + cosmiconfig-typescript-loader: 2.0.2_faublg25f7qpbcz6w4cw6yyzse lodash: 4.17.21 resolve-from: 5.0.0 typescript: 4.9.5 @@ -1567,7 +1495,7 @@ packages: - '@swc/wasm' dev: true - /@commitlint/load@17.5.0(@swc/core@1.3.49): + /@commitlint/load/17.5.0_@swc+core@1.3.49: resolution: {integrity: sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q==} engines: {node: '>=v14'} requiresBuild: true @@ -1579,12 +1507,12 @@ packages: '@types/node': 18.15.11 chalk: 4.1.1 cosmiconfig: 8.1.3 - cosmiconfig-typescript-loader: 4.3.0(@types/node@18.15.11)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@5.0.4) + cosmiconfig-typescript-loader: 4.3.0_zulaepqzabcjiyzbkdbfeduf6u lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4) + ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e typescript: 5.0.4 transitivePeerDependencies: - '@swc/core' @@ -1592,12 +1520,12 @@ packages: dev: true optional: true - /@commitlint/message@16.2.1: + /@commitlint/message/16.2.1: resolution: {integrity: sha512-2eWX/47rftViYg7a3axYDdrgwKv32mxbycBJT6OQY/MJM7SUfYNYYvbMFOQFaA4xIVZt7t2Alyqslbl6blVwWw==} engines: {node: '>=v12'} dev: true - /@commitlint/parse@16.2.1: + /@commitlint/parse/16.2.1: resolution: {integrity: sha512-2NP2dDQNL378VZYioLrgGVZhWdnJO4nAxQl5LXwYb08nEcN+cgxHN1dJV8OLJ5uxlGJtDeR8UZZ1mnQ1gSAD/g==} engines: {node: '>=v12'} dependencies: @@ -1606,7 +1534,7 @@ packages: conventional-commits-parser: 3.2.4 dev: true - /@commitlint/read@16.2.1: + /@commitlint/read/16.2.1: resolution: {integrity: sha512-tViXGuaxLTrw2r7PiYMQOFA2fueZxnnt0lkOWqKyxT+n2XdEMGYcI9ID5ndJKXnfPGPppD0w/IItKsIXlZ+alw==} engines: {node: '>=v12'} dependencies: @@ -1616,7 +1544,7 @@ packages: git-raw-commits: 2.0.11 dev: true - /@commitlint/resolve-extends@16.2.1: + /@commitlint/resolve-extends/16.2.1: resolution: {integrity: sha512-NbbCMPKTFf2J805kwfP9EO+vV+XvnaHRcBy6ud5dF35dxMsvdJqke54W3XazXF1ZAxC4a3LBy4i/GNVBAthsEg==} engines: {node: '>=v12'} dependencies: @@ -1628,7 +1556,7 @@ packages: resolve-global: 1.0.0 dev: true - /@commitlint/resolve-extends@17.4.4: + /@commitlint/resolve-extends/17.4.4: resolution: {integrity: sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==} engines: {node: '>=v14'} dependencies: @@ -1641,7 +1569,7 @@ packages: dev: true optional: true - /@commitlint/rules@16.2.4: + /@commitlint/rules/16.2.4: resolution: {integrity: sha512-rK5rNBIN2ZQNQK+I6trRPK3dWa0MtaTN4xnwOma1qxa4d5wQMQJtScwTZjTJeallFxhOgbNOgr48AMHkdounVg==} engines: {node: '>=v12'} dependencies: @@ -1652,26 +1580,26 @@ packages: execa: 5.1.1 dev: true - /@commitlint/to-lines@16.2.1: + /@commitlint/to-lines/16.2.1: resolution: {integrity: sha512-9/VjpYj5j1QeY3eiog1zQWY6axsdWAc0AonUUfyZ7B0MVcRI0R56YsHAfzF6uK/g/WwPZaoe4Lb1QCyDVnpVaQ==} engines: {node: '>=v12'} dev: true - /@commitlint/top-level@16.2.1: + /@commitlint/top-level/16.2.1: resolution: {integrity: sha512-lS6GSieHW9y6ePL73ied71Z9bOKyK+Ib9hTkRsB8oZFAyQZcyRwq2w6nIa6Fngir1QW51oKzzaXfJL94qwImyw==} engines: {node: '>=v12'} dependencies: find-up: 5.0.0 dev: true - /@commitlint/types@16.2.1: + /@commitlint/types/16.2.1: resolution: {integrity: sha512-7/z7pA7BM0i8XvMSBynO7xsB3mVQPUZbVn6zMIlp/a091XJ3qAXRXc+HwLYhiIdzzS5fuxxNIHZMGHVD4HJxdA==} engines: {node: '>=v12'} dependencies: chalk: 4.1.1 dev: true - /@commitlint/types@17.4.4: + /@commitlint/types/17.4.4: resolution: {integrity: sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==} engines: {node: '>=v14'} dependencies: @@ -1679,50 +1607,50 @@ packages: dev: true optional: true - /@cspotcode/source-map-support@0.8.1: + /@cspotcode/source-map-support/0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@esbuild/android-arm64@0.16.17: - resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} + /@esbuild/android-arm/0.16.17: + resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-arm64@0.17.16: - resolution: {integrity: sha512-QX48qmsEZW+gcHgTmAj+x21mwTz8MlYQBnzF6861cNdQGvj2jzzFjqH0EBabrIa/WVZ2CHolwMoqxVryqKt8+Q==} + /@esbuild/android-arm/0.17.16: + resolution: {integrity: sha512-baLqRpLe4JnKrUXLJChoTN0iXZH7El/mu58GE3WIA6/H834k0XWvLRmGLG8y8arTRS9hJJibPnF0tiGhmWeZgw==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-arm@0.16.17: - resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} + /@esbuild/android-arm64/0.16.17: + resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-arm@0.17.16: - resolution: {integrity: sha512-baLqRpLe4JnKrUXLJChoTN0iXZH7El/mu58GE3WIA6/H834k0XWvLRmGLG8y8arTRS9hJJibPnF0tiGhmWeZgw==} + /@esbuild/android-arm64/0.17.16: + resolution: {integrity: sha512-QX48qmsEZW+gcHgTmAj+x21mwTz8MlYQBnzF6861cNdQGvj2jzzFjqH0EBabrIa/WVZ2CHolwMoqxVryqKt8+Q==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-x64@0.16.17: + /@esbuild/android-x64/0.16.17: resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} engines: {node: '>=12'} cpu: [x64] @@ -1731,7 +1659,7 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.17.16: + /@esbuild/android-x64/0.17.16: resolution: {integrity: sha512-G4wfHhrrz99XJgHnzFvB4UwwPxAWZaZBOFXh+JH1Duf1I4vIVfuYY9uVLpx4eiV2D/Jix8LJY+TAdZ3i40tDow==} engines: {node: '>=12'} cpu: [x64] @@ -1740,7 +1668,7 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.16.17: + /@esbuild/darwin-arm64/0.16.17: resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} engines: {node: '>=12'} cpu: [arm64] @@ -1749,7 +1677,7 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.17.16: + /@esbuild/darwin-arm64/0.17.16: resolution: {integrity: sha512-/Ofw8UXZxuzTLsNFmz1+lmarQI6ztMZ9XktvXedTbt3SNWDn0+ODTwxExLYQ/Hod91EZB4vZPQJLoqLF0jvEzA==} engines: {node: '>=12'} cpu: [arm64] @@ -1758,7 +1686,7 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.16.17: + /@esbuild/darwin-x64/0.16.17: resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} engines: {node: '>=12'} cpu: [x64] @@ -1767,7 +1695,7 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.17.16: + /@esbuild/darwin-x64/0.17.16: resolution: {integrity: sha512-SzBQtCV3Pdc9kyizh36Ol+dNVhkDyIrGb/JXZqFq8WL37LIyrXU0gUpADcNV311sCOhvY+f2ivMhb5Tuv8nMOQ==} engines: {node: '>=12'} cpu: [x64] @@ -1776,7 +1704,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.16.17: + /@esbuild/freebsd-arm64/0.16.17: resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} engines: {node: '>=12'} cpu: [arm64] @@ -1785,7 +1713,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.17.16: + /@esbuild/freebsd-arm64/0.17.16: resolution: {integrity: sha512-ZqftdfS1UlLiH1DnS2u3It7l4Bc3AskKeu+paJSfk7RNOMrOxmeFDhLTMQqMxycP1C3oj8vgkAT6xfAuq7ZPRA==} engines: {node: '>=12'} cpu: [arm64] @@ -1794,7 +1722,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.16.17: + /@esbuild/freebsd-x64/0.16.17: resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} engines: {node: '>=12'} cpu: [x64] @@ -1803,7 +1731,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.17.16: + /@esbuild/freebsd-x64/0.17.16: resolution: {integrity: sha512-rHV6zNWW1tjgsu0dKQTX9L0ByiJHHLvQKrWtnz8r0YYJI27FU3Xu48gpK2IBj1uCSYhJ+pEk6Y0Um7U3rIvV8g==} engines: {node: '>=12'} cpu: [x64] @@ -1812,43 +1740,43 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.16.17: - resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} + /@esbuild/linux-arm/0.16.17: + resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-arm64@0.17.16: - resolution: {integrity: sha512-8yoZhGkU6aHu38WpaM4HrRLTFc7/VVD9Q2SvPcmIQIipQt2I/GMTZNdEHXoypbbGao5kggLcxg0iBKjo0SQYKA==} + /@esbuild/linux-arm/0.17.16: + resolution: {integrity: sha512-n4O8oVxbn7nl4+m+ISb0a68/lcJClIbaGAoXwqeubj/D1/oMMuaAXmJVfFlRjJLu/ZvHkxoiFJnmbfp4n8cdSw==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-arm@0.16.17: - resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} + /@esbuild/linux-arm64/0.16.17: + resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-arm@0.17.16: - resolution: {integrity: sha512-n4O8oVxbn7nl4+m+ISb0a68/lcJClIbaGAoXwqeubj/D1/oMMuaAXmJVfFlRjJLu/ZvHkxoiFJnmbfp4n8cdSw==} + /@esbuild/linux-arm64/0.17.16: + resolution: {integrity: sha512-8yoZhGkU6aHu38WpaM4HrRLTFc7/VVD9Q2SvPcmIQIipQt2I/GMTZNdEHXoypbbGao5kggLcxg0iBKjo0SQYKA==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-ia32@0.16.17: + /@esbuild/linux-ia32/0.16.17: resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} engines: {node: '>=12'} cpu: [ia32] @@ -1857,7 +1785,7 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.17.16: + /@esbuild/linux-ia32/0.17.16: resolution: {integrity: sha512-9ZBjlkdaVYxPNO8a7OmzDbOH9FMQ1a58j7Xb21UfRU29KcEEU3VTHk+Cvrft/BNv0gpWJMiiZ/f4w0TqSP0gLA==} engines: {node: '>=12'} cpu: [ia32] @@ -1866,7 +1794,7 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.16.17: + /@esbuild/linux-loong64/0.16.17: resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==} engines: {node: '>=12'} cpu: [loong64] @@ -1875,7 +1803,7 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.17.16: + /@esbuild/linux-loong64/0.17.16: resolution: {integrity: sha512-TIZTRojVBBzdgChY3UOG7BlPhqJz08AL7jdgeeu+kiObWMFzGnQD7BgBBkWRwOtKR1i2TNlO7YK6m4zxVjjPRQ==} engines: {node: '>=12'} cpu: [loong64] @@ -1884,7 +1812,7 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.16.17: + /@esbuild/linux-mips64el/0.16.17: resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} engines: {node: '>=12'} cpu: [mips64el] @@ -1893,7 +1821,7 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.17.16: + /@esbuild/linux-mips64el/0.17.16: resolution: {integrity: sha512-UPeRuFKCCJYpBbIdczKyHLAIU31GEm0dZl1eMrdYeXDH+SJZh/i+2cAmD3A1Wip9pIc5Sc6Kc5cFUrPXtR0XHA==} engines: {node: '>=12'} cpu: [mips64el] @@ -1902,7 +1830,7 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.16.17: + /@esbuild/linux-ppc64/0.16.17: resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} engines: {node: '>=12'} cpu: [ppc64] @@ -1911,7 +1839,7 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.17.16: + /@esbuild/linux-ppc64/0.17.16: resolution: {integrity: sha512-io6yShgIEgVUhExJejJ21xvO5QtrbiSeI7vYUnr7l+v/O9t6IowyhdiYnyivX2X5ysOVHAuyHW+Wyi7DNhdw6Q==} engines: {node: '>=12'} cpu: [ppc64] @@ -1920,7 +1848,7 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.16.17: + /@esbuild/linux-riscv64/0.16.17: resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} engines: {node: '>=12'} cpu: [riscv64] @@ -1929,7 +1857,7 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.17.16: + /@esbuild/linux-riscv64/0.17.16: resolution: {integrity: sha512-WhlGeAHNbSdG/I2gqX2RK2gfgSNwyJuCiFHMc8s3GNEMMHUI109+VMBfhVqRb0ZGzEeRiibi8dItR3ws3Lk+cA==} engines: {node: '>=12'} cpu: [riscv64] @@ -1938,7 +1866,7 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.16.17: + /@esbuild/linux-s390x/0.16.17: resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} engines: {node: '>=12'} cpu: [s390x] @@ -1947,7 +1875,7 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.17.16: + /@esbuild/linux-s390x/0.17.16: resolution: {integrity: sha512-gHRReYsJtViir63bXKoFaQ4pgTyah4ruiMRQ6im9YZuv+gp3UFJkNTY4sFA73YDynmXZA6hi45en4BGhNOJUsw==} engines: {node: '>=12'} cpu: [s390x] @@ -1956,7 +1884,7 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.16.17: + /@esbuild/linux-x64/0.16.17: resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} engines: {node: '>=12'} cpu: [x64] @@ -1965,7 +1893,7 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.17.16: + /@esbuild/linux-x64/0.17.16: resolution: {integrity: sha512-mfiiBkxEbUHvi+v0P+TS7UnA9TeGXR48aK4XHkTj0ZwOijxexgMF01UDFaBX7Q6CQsB0d+MFNv9IiXbIHTNd4g==} engines: {node: '>=12'} cpu: [x64] @@ -1974,7 +1902,7 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.16.17: + /@esbuild/netbsd-x64/0.16.17: resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} engines: {node: '>=12'} cpu: [x64] @@ -1983,7 +1911,7 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.17.16: + /@esbuild/netbsd-x64/0.17.16: resolution: {integrity: sha512-n8zK1YRDGLRZfVcswcDMDM0j2xKYLNXqei217a4GyBxHIuPMGrrVuJ+Ijfpr0Kufcm7C1k/qaIrGy6eG7wvgmA==} engines: {node: '>=12'} cpu: [x64] @@ -1992,7 +1920,7 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.16.17: + /@esbuild/openbsd-x64/0.16.17: resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} engines: {node: '>=12'} cpu: [x64] @@ -2001,7 +1929,7 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.17.16: + /@esbuild/openbsd-x64/0.17.16: resolution: {integrity: sha512-lEEfkfsUbo0xC47eSTBqsItXDSzwzwhKUSsVaVjVji07t8+6KA5INp2rN890dHZeueXJAI8q0tEIfbwVRYf6Ew==} engines: {node: '>=12'} cpu: [x64] @@ -2010,7 +1938,7 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.16.17: + /@esbuild/sunos-x64/0.16.17: resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} engines: {node: '>=12'} cpu: [x64] @@ -2019,7 +1947,7 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.17.16: + /@esbuild/sunos-x64/0.17.16: resolution: {integrity: sha512-jlRjsuvG1fgGwnE8Afs7xYDnGz0dBgTNZfgCK6TlvPH3Z13/P5pi6I57vyLE8qZYLrGVtwcm9UbUx1/mZ8Ukag==} engines: {node: '>=12'} cpu: [x64] @@ -2028,7 +1956,7 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.16.17: + /@esbuild/win32-arm64/0.16.17: resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} engines: {node: '>=12'} cpu: [arm64] @@ -2037,7 +1965,7 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.17.16: + /@esbuild/win32-arm64/0.17.16: resolution: {integrity: sha512-TzoU2qwVe2boOHl/3KNBUv2PNUc38U0TNnzqOAcgPiD/EZxT2s736xfC2dYQbszAwo4MKzzwBV0iHjhfjxMimg==} engines: {node: '>=12'} cpu: [arm64] @@ -2046,7 +1974,7 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.16.17: + /@esbuild/win32-ia32/0.16.17: resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} engines: {node: '>=12'} cpu: [ia32] @@ -2055,7 +1983,7 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.17.16: + /@esbuild/win32-ia32/0.17.16: resolution: {integrity: sha512-B8b7W+oo2yb/3xmwk9Vc99hC9bNolvqjaTZYEfMQhzdpBsjTvZBlXQ/teUE55Ww6sg//wlcDjOaqldOKyigWdA==} engines: {node: '>=12'} cpu: [ia32] @@ -2064,7 +1992,7 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.16.17: + /@esbuild/win32-x64/0.16.17: resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} engines: {node: '>=12'} cpu: [x64] @@ -2073,7 +2001,7 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.17.16: + /@esbuild/win32-x64/0.17.16: resolution: {integrity: sha512-xJ7OH/nanouJO9pf03YsL9NAFQBHd8AqfrQd7Pf5laGyyTt/gToul6QYOA/i5i/q8y9iaM5DQFNTgpi995VkOg==} engines: {node: '>=12'} cpu: [x64] @@ -2082,7 +2010,7 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@7.32.0): + /@eslint-community/eslint-utils/4.4.0_eslint@7.32.0: resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2092,17 +2020,17 @@ packages: eslint-visitor-keys: 3.4.0 dev: true - /@eslint-community/regexpp@4.5.0: + /@eslint-community/regexpp/4.5.0: resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@0.4.3: + /@eslint/eslintrc/0.4.3: resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 espree: 7.3.1 globals: 13.20.0 ignore: 4.0.6 @@ -2114,22 +2042,22 @@ packages: - supports-color dev: true - /@humanwhocodes/config-array@0.5.0: + /@humanwhocodes/config-array/0.5.0: resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: - supports-color dev: true - /@humanwhocodes/object-schema@1.2.1: + /@humanwhocodes/object-schema/1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@istanbuljs/load-nyc-config@1.1.0: + /@istanbuljs/load-nyc-config/1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} dependencies: @@ -2140,12 +2068,12 @@ packages: resolve-from: 5.0.0 dev: true - /@istanbuljs/schema@0.1.3: + /@istanbuljs/schema/0.1.3: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} dev: true - /@jest/console@29.5.0: + /@jest/console/29.5.0: resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2157,7 +2085,7 @@ packages: slash: 3.0.0 dev: true - /@jest/core@29.5.0(ts-node@10.9.1): + /@jest/core/29.5.0_ts-node@10.9.1: resolution: {integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2178,7 +2106,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.5.0 - jest-config: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + jest-config: 29.5.0_rrli7kzx2akox3oq6aahu3rvje jest-haste-map: 29.5.0 jest-message-util: 29.5.0 jest-regex-util: 29.4.3 @@ -2199,14 +2127,14 @@ packages: - ts-node dev: true - /@jest/create-cache-key-function@27.5.1: + /@jest/create-cache-key-function/27.5.1: resolution: {integrity: sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 dev: true - /@jest/environment@29.5.0: + /@jest/environment/29.5.0: resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2216,14 +2144,14 @@ packages: jest-mock: 29.5.0 dev: true - /@jest/expect-utils@29.5.0: + /@jest/expect-utils/29.5.0: resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.3 dev: true - /@jest/expect@29.5.0: + /@jest/expect/29.5.0: resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2233,7 +2161,7 @@ packages: - supports-color dev: true - /@jest/fake-timers@29.5.0: + /@jest/fake-timers/29.5.0: resolution: {integrity: sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2245,7 +2173,7 @@ packages: jest-util: 29.5.0 dev: true - /@jest/globals@29.5.0: + /@jest/globals/29.5.0: resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2257,7 +2185,7 @@ packages: - supports-color dev: true - /@jest/reporters@29.5.0: + /@jest/reporters/29.5.0: resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2294,14 +2222,14 @@ packages: - supports-color dev: true - /@jest/schemas@29.4.3: + /@jest/schemas/29.4.3: resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@sinclair/typebox': 0.25.24 dev: true - /@jest/source-map@29.4.3: + /@jest/source-map/29.4.3: resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2310,7 +2238,7 @@ packages: graceful-fs: 4.2.11 dev: true - /@jest/test-result@29.5.0: + /@jest/test-result/29.5.0: resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2320,7 +2248,7 @@ packages: collect-v8-coverage: 1.0.1 dev: true - /@jest/test-sequencer@29.5.0: + /@jest/test-sequencer/29.5.0: resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2330,7 +2258,7 @@ packages: slash: 3.0.0 dev: true - /@jest/transform@29.5.0: + /@jest/transform/29.5.0: resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2353,7 +2281,7 @@ packages: - supports-color dev: true - /@jest/types@27.5.1: + /@jest/types/27.5.1: resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: @@ -2364,7 +2292,7 @@ packages: chalk: 4.1.1 dev: true - /@jest/types@29.5.0: + /@jest/types/29.5.0: resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2376,7 +2304,7 @@ packages: chalk: 4.1.1 dev: true - /@jridgewell/gen-mapping@0.3.3: + /@jridgewell/gen-mapping/0.3.3: resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} dependencies: @@ -2385,56 +2313,56 @@ packages: '@jridgewell/trace-mapping': 0.3.18 dev: true - /@jridgewell/resolve-uri@3.1.0: + /@jridgewell/resolve-uri/3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/resolve-uri@3.1.1: + /@jridgewell/resolve-uri/3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/set-array@1.1.2: + /@jridgewell/set-array/1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/source-map@0.3.3: + /@jridgewell/source-map/0.3.3: resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} dependencies: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 dev: true - /@jridgewell/sourcemap-codec@1.4.14: + /@jridgewell/sourcemap-codec/1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true - /@jridgewell/sourcemap-codec@1.4.15: + /@jridgewell/sourcemap-codec/1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true - /@jridgewell/trace-mapping@0.3.18: + /@jridgewell/trace-mapping/0.3.18: resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@jridgewell/trace-mapping@0.3.9: + /@jridgewell/trace-mapping/0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /@mswjs/cookies@1.0.0: + /@mswjs/cookies/1.0.0: resolution: {integrity: sha512-TdXoBdI+h/EDTsVLCX/34s4+9U0sWi92qFnIGUEikpMCSKLhBeujovyYVSoORNbYgsBH5ga7/tfxyWcEZAxiYA==} engines: {node: '>=14'} dev: false - /@mswjs/interceptors@0.22.12: + /@mswjs/interceptors/0.22.12: resolution: {integrity: sha512-SHzP8HCsgjpmFI+OXWIYSdDQBnNCmcb3TQOETRMWHaNjXFGt2EwniJWQXMfMRrmgdvyb8izGGhFArrBAx+2KSg==} engines: {node: '>=18'} dependencies: @@ -2446,7 +2374,7 @@ packages: strict-event-emitter: 0.5.0 dev: false - /@nodelib/fs.scandir@2.1.5: + /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} dependencies: @@ -2454,12 +2382,12 @@ packages: run-parallel: 1.2.0 dev: true - /@nodelib/fs.stat@2.0.5: + /@nodelib/fs.stat/2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} dev: true - /@nodelib/fs.walk@1.2.8: + /@nodelib/fs.walk/1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} dependencies: @@ -2467,25 +2395,25 @@ packages: fastq: 1.15.0 dev: true - /@open-draft/deferred-promise@2.1.0: + /@open-draft/deferred-promise/2.1.0: resolution: {integrity: sha512-Rzd5JrXZX8zErHzgcGyngh4fmEbSHqTETdGj9rXtejlqMIgXFlyKBA7Jn1Xp0Ls0M0Y22+xHcWiEzbmdWl0BOA==} dev: false - /@open-draft/logger@0.3.0: + /@open-draft/logger/0.3.0: resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} dependencies: is-node-process: 1.2.0 outvariant: 1.4.0 dev: false - /@open-draft/test-server@0.4.2: + /@open-draft/test-server/0.4.2: resolution: {integrity: sha512-J9wbdQkPx5WKcDNtgfnXsx5ew4UJd6BZyGr89YlHeaUkOShkO2iO5QIyCCsG4qpjIvr2ZTkEYJA9ujOXXyO6Pg==} dependencies: '@types/body-parser': 1.19.2 '@types/cors': 2.8.13 '@types/express': 4.17.17 cors: 2.8.5 - express: 4.18.2(supports-color@6.1.0) + express: 4.18.2 outvariant: 1.4.0 socket.io: 4.6.1 transitivePeerDependencies: @@ -2494,10 +2422,10 @@ packages: - utf-8-validate dev: true - /@open-draft/until@2.1.0: + /@open-draft/until/2.1.0: resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - /@ossjs/release@0.4.0: + /@ossjs/release/0.4.0: resolution: {integrity: sha512-cfW+gk3GdVqjrawkAG8q6MXPmTJouwwPegmBAVNvYvKq/tKQHgluxiueTlNTdJRryI76rpe6y5+EXlHdisrwdg==} hasBin: true dependencies: @@ -2526,7 +2454,7 @@ packages: - encoding dev: true - /@playwright/test@1.32.3: + /@playwright/test/1.32.3: resolution: {integrity: sha512-BvWNvK0RfBriindxhLVabi8BRe3X0J9EVjKlcmhxjg4giWBD/xleLcg2dz7Tx0agu28rczjNIPQWznwzDwVsZQ==} engines: {node: '>=14'} hasBin: true @@ -2537,13 +2465,13 @@ packages: fsevents: 2.3.2 dev: true - /@rollup/plugin-node-resolve@13.3.0(rollup@2.79.1): + /@rollup/plugin-node-resolve/13.3.0_rollup@2.79.1: resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==} engines: {node: '>= 10.0.0'} peerDependencies: rollup: ^2.42.0 dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + '@rollup/pluginutils': 3.1.0_rollup@2.79.1 '@types/resolve': 1.17.1 deepmerge: 4.3.1 is-builtin-module: 3.2.1 @@ -2552,7 +2480,7 @@ packages: rollup: 2.79.1 dev: true - /@rollup/pluginutils@3.1.0(rollup@2.79.1): + /@rollup/pluginutils/3.1.0_rollup@2.79.1: resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} engines: {node: '>= 8.0.0'} peerDependencies: @@ -2564,27 +2492,27 @@ packages: rollup: 2.79.1 dev: true - /@sinclair/typebox@0.25.24: + /@sinclair/typebox/0.25.24: resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} dev: true - /@sinonjs/commons@2.0.0: + /@sinonjs/commons/2.0.0: resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} dependencies: type-detect: 4.0.8 dev: true - /@sinonjs/fake-timers@10.0.2: + /@sinonjs/fake-timers/10.0.2: resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} dependencies: '@sinonjs/commons': 2.0.0 dev: true - /@socket.io/component-emitter@3.1.0: + /@socket.io/component-emitter/3.1.0: resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} dev: true - /@swc/core-darwin-arm64@1.3.49: + /@swc/core-darwin-arm64/1.3.49: resolution: {integrity: sha512-g7aIfXh6uPHmhLXdjXQq5t3HAyS/EdvujasW1DIS5k8UqOBaSoCcSGtLIjzcLv3KujqNfYcm118E+12H0nY6fQ==} engines: {node: '>=10'} cpu: [arm64] @@ -2593,7 +2521,7 @@ packages: dev: true optional: true - /@swc/core-darwin-x64@1.3.49: + /@swc/core-darwin-x64/1.3.49: resolution: {integrity: sha512-eSIxVX0YDw40Bre5sAx2BV3DzdIGzmQvCf2yiBvLqiiL6GC0mmuDeWbUCAzdUX6fJ6FUVEBMUVqNOc9oJ2/d5w==} engines: {node: '>=10'} cpu: [x64] @@ -2602,7 +2530,7 @@ packages: dev: true optional: true - /@swc/core-linux-arm-gnueabihf@1.3.49: + /@swc/core-linux-arm-gnueabihf/1.3.49: resolution: {integrity: sha512-8mj3IcRVr/OJY0mVITz6Z5osNAMJK5GiKDaZ+3QejPLbl6aiu4sH4GmTHDRN14RnaVXOpecsGcUoQmNoNa3u3w==} engines: {node: '>=10'} cpu: [arm] @@ -2611,7 +2539,7 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-gnu@1.3.49: + /@swc/core-linux-arm64-gnu/1.3.49: resolution: {integrity: sha512-Rmg9xw6tmpOpf6GKKjpHQGmjfHzqSths5ebI2ahrHlhekzZF2HYmPkVw4bHda8Bja6mbaw8FVBgBHjPU8mMeDA==} engines: {node: '>=10'} cpu: [arm64] @@ -2620,7 +2548,7 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-musl@1.3.49: + /@swc/core-linux-arm64-musl/1.3.49: resolution: {integrity: sha512-nlKPYMogAI3Aak6Mlkag8/2AlHAZ/DpH7RjhfMazsaGhD/sQOmYdyY9Al69ejpa419YJuREeeeLoojFlSsd30g==} engines: {node: '>=10'} cpu: [arm64] @@ -2629,7 +2557,7 @@ packages: dev: true optional: true - /@swc/core-linux-x64-gnu@1.3.49: + /@swc/core-linux-x64-gnu/1.3.49: resolution: {integrity: sha512-QOyeJQ6NVi73SJcizbwvIZTiGA/N+BxX9liRrvibumaQmRh8fWjJiLNsv3ODSHeuonak7E8Bf7a7NnSTyu48Mw==} engines: {node: '>=10'} cpu: [x64] @@ -2638,7 +2566,7 @@ packages: dev: true optional: true - /@swc/core-linux-x64-musl@1.3.49: + /@swc/core-linux-x64-musl/1.3.49: resolution: {integrity: sha512-WlDMz+SOpYC9O/ZBUw1oiyWI7HyUCMlf/HS8Fy/kRI3eGoGCUxVTCJ1mP57GdQr4Wg32Y/ZpO2KSNQFWnT8mAw==} engines: {node: '>=10'} cpu: [x64] @@ -2647,7 +2575,7 @@ packages: dev: true optional: true - /@swc/core-win32-arm64-msvc@1.3.49: + /@swc/core-win32-arm64-msvc/1.3.49: resolution: {integrity: sha512-41LZOeI94Za3twib8KOIjnHYAZ+nkBFmboaREsFR1760S7jiMVywqWX8nFZvn/CXj15Fjjgdgyuig+zMREwXwQ==} engines: {node: '>=10'} cpu: [arm64] @@ -2656,7 +2584,7 @@ packages: dev: true optional: true - /@swc/core-win32-ia32-msvc@1.3.49: + /@swc/core-win32-ia32-msvc/1.3.49: resolution: {integrity: sha512-IdqLPoMKssyAoOCZdNXmnAd6/uyx+Hb9KSfZUHepZaNfwMy6J5XXrOsbYs3v53FH8MtekUUdV+mMX4me9bcv9w==} engines: {node: '>=10'} cpu: [ia32] @@ -2665,7 +2593,7 @@ packages: dev: true optional: true - /@swc/core-win32-x64-msvc@1.3.49: + /@swc/core-win32-x64-msvc/1.3.49: resolution: {integrity: sha512-7Fqjo5pS3uIohhSbYSaR0+e/bJdxmQb4oG97FIh5qvlCCGQaQ9UiaEeYy4uK0Ad+Menum1IXCAEiG7RHcl6Eyw==} engines: {node: '>=10'} cpu: [x64] @@ -2674,7 +2602,7 @@ packages: dev: true optional: true - /@swc/core@1.3.49: + /@swc/core/1.3.49: resolution: {integrity: sha512-br44ZHOfE9YyRGcORSLkHFQHTvhwRcaithBJ1Q5y5iMGpLbH0Wai3GN49L60RvmGwxNJfWzT+E7+rNNR7ewKgA==} engines: {node: '>=10'} requiresBuild: true @@ -2696,7 +2624,7 @@ packages: '@swc/core-win32-x64-msvc': 1.3.49 dev: true - /@swc/jest@0.2.24(@swc/core@1.3.49): + /@swc/jest/0.2.24_@swc+core@1.3.49: resolution: {integrity: sha512-fwgxQbM1wXzyKzl1+IW0aGrRvAA8k0Y3NxFhKigbPjOJ4mCKnWEcNX9HQS3gshflcxq8YKhadabGUVfdwjCr6Q==} engines: {npm: '>= 7.0.0'} peerDependencies: @@ -2707,34 +2635,34 @@ packages: jsonc-parser: 3.2.0 dev: true - /@tootallnate/once@2.0.0: + /@tootallnate/once/2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} dev: true - /@tsconfig/node10@1.0.9: + /@tsconfig/node10/1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true - /@tsconfig/node12@1.0.11: + /@tsconfig/node12/1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} dev: true - /@tsconfig/node14@1.0.3: + /@tsconfig/node14/1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} dev: true - /@tsconfig/node16@1.0.3: + /@tsconfig/node16/1.0.3: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true - /@types/accepts@1.3.5: + /@types/accepts/1.3.5: resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==} dependencies: '@types/node': 18.15.11 dev: true - /@types/babel__core@7.20.0: + /@types/babel__core/7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: '@babel/parser': 7.21.4 @@ -2744,56 +2672,56 @@ packages: '@types/babel__traverse': 7.18.3 dev: true - /@types/babel__generator@7.6.4: + /@types/babel__generator/7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: '@babel/types': 7.21.4 dev: true - /@types/babel__template@7.4.1: + /@types/babel__template/7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: '@babel/parser': 7.21.4 '@babel/types': 7.21.4 dev: true - /@types/babel__traverse@7.18.3: + /@types/babel__traverse/7.18.3: resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: '@babel/types': 7.21.4 dev: true - /@types/body-parser@1.19.2: + /@types/body-parser/1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 '@types/node': 18.15.11 dev: true - /@types/command-line-args@5.2.0: + /@types/command-line-args/5.2.0: resolution: {integrity: sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==} dev: true - /@types/connect@3.4.35: + /@types/connect/3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: '@types/node': 18.15.11 dev: true - /@types/content-disposition@0.5.5: + /@types/content-disposition/0.5.5: resolution: {integrity: sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==} dev: true - /@types/conventional-commits-parser@3.0.3: + /@types/conventional-commits-parser/3.0.3: resolution: {integrity: sha512-aoUKfRQYvGMH+spFpOTX9jO4nZoz9/BKp4hlHPxL3Cj2r2Xj+jEcwlXtFIyZr5uL8bh1nbWynDEYaAota+XqPg==} dependencies: '@types/node': 18.15.11 dev: true - /@types/cookie@0.4.1: + /@types/cookie/0.4.1: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} - /@types/cookies@0.7.7: + /@types/cookies/0.7.7: resolution: {integrity: sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==} dependencies: '@types/connect': 3.4.35 @@ -2802,41 +2730,41 @@ packages: '@types/node': 18.15.11 dev: true - /@types/cors@2.8.13: + /@types/cors/2.8.13: resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==} dependencies: '@types/node': 18.15.11 dev: true - /@types/debug@4.1.7: + /@types/debug/4.1.7: resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} dependencies: '@types/ms': 0.7.31 dev: true - /@types/eslint-scope@3.7.4: + /@types/eslint-scope/3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: '@types/eslint': 8.37.0 '@types/estree': 1.0.0 dev: true - /@types/eslint@8.37.0: + /@types/eslint/8.37.0: resolution: {integrity: sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==} dependencies: '@types/estree': 1.0.0 '@types/json-schema': 7.0.11 dev: true - /@types/estree@0.0.39: + /@types/estree/0.0.39: resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} dev: true - /@types/estree@1.0.0: + /@types/estree/1.0.0: resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} dev: true - /@types/express-serve-static-core@4.17.33: + /@types/express-serve-static-core/4.17.33: resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} dependencies: '@types/node': 18.15.11 @@ -2844,7 +2772,7 @@ packages: '@types/range-parser': 1.2.4 dev: true - /@types/express@4.17.17: + /@types/express/4.17.17: resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} dependencies: '@types/body-parser': 1.19.2 @@ -2853,72 +2781,72 @@ packages: '@types/serve-static': 1.15.1 dev: true - /@types/fs-extra@9.0.13: + /@types/fs-extra/9.0.13: resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} dependencies: '@types/node': 18.15.11 dev: true - /@types/glob@7.2.0: + /@types/glob/7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 '@types/node': 18.15.11 dev: true - /@types/glob@8.1.0: + /@types/glob/8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} dependencies: '@types/minimatch': 5.1.2 '@types/node': 18.15.11 dev: true - /@types/graceful-fs@4.1.6: + /@types/graceful-fs/4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: '@types/node': 18.15.11 dev: true - /@types/http-assert@1.5.3: + /@types/http-assert/1.5.3: resolution: {integrity: sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==} dev: true - /@types/http-errors@2.0.1: + /@types/http-errors/2.0.1: resolution: {integrity: sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==} dev: true - /@types/issue-parser@3.0.1: + /@types/issue-parser/3.0.1: resolution: {integrity: sha512-cdggbeJIxWoIB8CB57BvenONrQZcBuEf2uddxMRNIy2jgdcnSxnY71tQcNrxdqTG4VmQP5fdLLE9E+jCnMK0Fg==} dev: true - /@types/istanbul-lib-coverage@2.0.4: + /@types/istanbul-lib-coverage/2.0.4: resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} dev: true - /@types/istanbul-lib-report@3.0.0: + /@types/istanbul-lib-report/3.0.0: resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} dependencies: '@types/istanbul-lib-coverage': 2.0.4 dev: true - /@types/istanbul-reports@3.0.1: + /@types/istanbul-reports/3.0.1: resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} dependencies: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest@29.5.0: + /@types/jest/29.5.0: resolution: {integrity: sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg==} dependencies: expect: 29.5.0 pretty-format: 29.5.0 dev: true - /@types/js-levenshtein@1.1.1: + /@types/js-levenshtein/1.1.1: resolution: {integrity: sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==} dev: false - /@types/jsdom@20.0.1: + /@types/jsdom/20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: '@types/node': 18.15.11 @@ -2926,25 +2854,25 @@ packages: parse5: 7.1.2 dev: true - /@types/json-bigint@1.0.1: + /@types/json-bigint/1.0.1: resolution: {integrity: sha512-zpchZLNsNuzJHi6v64UBoFWAvQlPhch7XAi36FkH6tL1bbbmimIF+cS7vwkzY4u5RaSWMoflQfu+TshMPPw8uw==} dev: true - /@types/json-schema@7.0.11: + /@types/json-schema/7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true - /@types/keygrip@1.0.2: + /@types/keygrip/1.0.2: resolution: {integrity: sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==} dev: true - /@types/koa-compose@3.2.5: + /@types/koa-compose/3.2.5: resolution: {integrity: sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==} dependencies: '@types/koa': 2.13.6 dev: true - /@types/koa@2.13.6: + /@types/koa/2.13.6: resolution: {integrity: sha512-diYUfp/GqfWBAiwxHtYJ/FQYIXhlEhlyaU7lB/bWQrx4Il9lCET5UwpFy3StOAohfsxxvEQ11qIJgT1j2tfBvw==} dependencies: '@types/accepts': 1.3.5 @@ -2957,137 +2885,137 @@ packages: '@types/node': 18.15.11 dev: true - /@types/mime@3.0.1: + /@types/mime/3.0.1: resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} dev: true - /@types/minimatch@5.1.2: + /@types/minimatch/5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true - /@types/minimist@1.2.2: + /@types/minimist/1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true - /@types/ms@0.7.31: + /@types/ms/0.7.31: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} dev: true - /@types/mustache@4.2.2: + /@types/mustache/4.2.2: resolution: {integrity: sha512-MUSpfpW0yZbTgjekDbH0shMYBUD+X/uJJJMm9LXN1d5yjl5lCY1vN/eWKD6D1tOtjA6206K0zcIPnUaFMurdNA==} dev: true - /@types/node-fetch@2.6.3: + /@types/node-fetch/2.6.3: resolution: {integrity: sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==} dependencies: '@types/node': 18.15.11 form-data: 3.0.1 dev: true - /@types/node@16.18.23: + /@types/node/16.18.23: resolution: {integrity: sha512-XAMpaw1s1+6zM+jn2tmw8MyaRDIJfXxqmIQIS0HfoGYPuf7dUWeiUKopwq13KFX9lEp1+THGtlaaYx39Nxr58g==} dev: true - /@types/node@18.15.11: + /@types/node/18.15.11: resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} dev: true - /@types/normalize-package-data@2.4.1: + /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true - /@types/parse-json@4.0.0: + /@types/parse-json/4.0.0: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} dev: true - /@types/parse5@6.0.3: + /@types/parse5/6.0.3: resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} dev: true - /@types/prettier@2.7.2: + /@types/prettier/2.7.2: resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} dev: true - /@types/puppeteer@5.4.7: + /@types/puppeteer/5.4.7: resolution: {integrity: sha512-JdGWZZYL0vKapXF4oQTC5hLVNfOgdPrqeZ1BiQnGk5cB7HeE91EWUiTdVSdQPobRN8rIcdffjiOgCYJ/S8QrnQ==} dependencies: '@types/node': 18.15.11 dev: true - /@types/qs@6.9.7: + /@types/qs/6.9.7: resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} dev: true - /@types/range-parser@1.2.4: + /@types/range-parser/1.2.4: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} dev: true - /@types/rc@1.2.1: + /@types/rc/1.2.1: resolution: {integrity: sha512-+TRLFmHLnpoV0uw4O/PzqMbPT6bhQM0q2KO0l+R7M3sHYRndPpNL6kv8p7Ee9ZxgQ6noYB18/t+heQi7eijOHA==} dependencies: '@types/minimist': 1.2.2 dev: true - /@types/registry-auth-token@4.2.1: + /@types/registry-auth-token/4.2.1: resolution: {integrity: sha512-VtTUcUaJGiJtlBKYwwFIOSvrcnuKmpPGO+x56XijNZnaDpnzKh2VwoTw5hewrOMW2BgjoU+uFbVAvSCW2FpWmA==} dev: true - /@types/resolve@1.17.1: + /@types/resolve/1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: '@types/node': 18.15.11 dev: true - /@types/semver@7.3.13: + /@types/semver/7.3.13: resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} dev: true - /@types/serve-static@1.15.1: + /@types/serve-static/1.15.1: resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} dependencies: '@types/mime': 3.0.1 '@types/node': 18.15.11 dev: true - /@types/stack-utils@2.0.1: + /@types/stack-utils/2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} dev: true - /@types/statuses@2.0.1: + /@types/statuses/2.0.1: resolution: {integrity: sha512-vVRgv7WXbhIZzILgr58b4Ki2uqpN/dlVCUBWCMkPbMDlV1CrQrgCl5hnIoUlMrgymGcTmdfVqbs1yWj/IRIRtQ==} dev: false - /@types/tough-cookie@4.0.2: + /@types/tough-cookie/4.0.2: resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} dev: true - /@types/uuid@8.3.4: + /@types/uuid/8.3.4: resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} dev: true - /@types/ws@7.4.7: + /@types/ws/7.4.7: resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} dependencies: '@types/node': 18.15.11 dev: true - /@types/yargs-parser@21.0.0: + /@types/yargs-parser/21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true - /@types/yargs@16.0.5: + /@types/yargs/16.0.5: resolution: {integrity: sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==} dependencies: '@types/yargs-parser': 21.0.0 dev: true - /@types/yargs@17.0.24: + /@types/yargs/17.0.24: resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} dependencies: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin@5.58.0(@typescript-eslint/parser@5.58.0)(eslint@7.32.0)(typescript@5.0.4): + /@typescript-eslint/eslint-plugin/5.58.0_ug56riyzsilszklzuxgwlsssqe: resolution: {integrity: sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3099,23 +3027,23 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.5.0 - '@typescript-eslint/parser': 5.58.0(eslint@7.32.0)(typescript@5.0.4) + '@typescript-eslint/parser': 5.58.0_cgdknpc562nnyruteofhkegnom '@typescript-eslint/scope-manager': 5.58.0 - '@typescript-eslint/type-utils': 5.58.0(eslint@7.32.0)(typescript@5.0.4) - '@typescript-eslint/utils': 5.58.0(eslint@7.32.0)(typescript@5.0.4) - debug: 4.3.4(supports-color@6.1.0) + '@typescript-eslint/type-utils': 5.58.0_cgdknpc562nnyruteofhkegnom + '@typescript-eslint/utils': 5.58.0_cgdknpc562nnyruteofhkegnom + debug: 4.3.4 eslint: 7.32.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 semver: 7.4.0 - tsutils: 3.21.0(typescript@5.0.4) + tsutils: 3.21.0_typescript@5.0.4 typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.58.0(eslint@7.32.0)(typescript@5.0.4): + /@typescript-eslint/parser/5.58.0_cgdknpc562nnyruteofhkegnom: resolution: {integrity: sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3127,15 +3055,15 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.58.0 '@typescript-eslint/types': 5.58.0 - '@typescript-eslint/typescript-estree': 5.58.0(typescript@5.0.4) - debug: 4.3.4(supports-color@6.1.0) + '@typescript-eslint/typescript-estree': 5.58.0_typescript@5.0.4 + debug: 4.3.4 eslint: 7.32.0 typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@5.58.0: + /@typescript-eslint/scope-manager/5.58.0: resolution: {integrity: sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -3143,7 +3071,7 @@ packages: '@typescript-eslint/visitor-keys': 5.58.0 dev: true - /@typescript-eslint/type-utils@5.58.0(eslint@7.32.0)(typescript@5.0.4): + /@typescript-eslint/type-utils/5.58.0_cgdknpc562nnyruteofhkegnom: resolution: {integrity: sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3153,22 +3081,22 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.58.0(typescript@5.0.4) - '@typescript-eslint/utils': 5.58.0(eslint@7.32.0)(typescript@5.0.4) - debug: 4.3.4(supports-color@6.1.0) + '@typescript-eslint/typescript-estree': 5.58.0_typescript@5.0.4 + '@typescript-eslint/utils': 5.58.0_cgdknpc562nnyruteofhkegnom + debug: 4.3.4 eslint: 7.32.0 - tsutils: 3.21.0(typescript@5.0.4) + tsutils: 3.21.0_typescript@5.0.4 typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.58.0: + /@typescript-eslint/types/5.58.0: resolution: {integrity: sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@5.58.0(typescript@5.0.4): + /@typescript-eslint/typescript-estree/5.58.0_typescript@5.0.4: resolution: {integrity: sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3179,28 +3107,28 @@ packages: dependencies: '@typescript-eslint/types': 5.58.0 '@typescript-eslint/visitor-keys': 5.58.0 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.4.0 - tsutils: 3.21.0(typescript@5.0.4) + tsutils: 3.21.0_typescript@5.0.4 typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.58.0(eslint@7.32.0)(typescript@5.0.4): + /@typescript-eslint/utils/5.58.0_cgdknpc562nnyruteofhkegnom: resolution: {integrity: sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@7.32.0) + '@eslint-community/eslint-utils': 4.4.0_eslint@7.32.0 '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 '@typescript-eslint/scope-manager': 5.58.0 '@typescript-eslint/types': 5.58.0 - '@typescript-eslint/typescript-estree': 5.58.0(typescript@5.0.4) + '@typescript-eslint/typescript-estree': 5.58.0_typescript@5.0.4 eslint: 7.32.0 eslint-scope: 5.1.1 semver: 7.4.0 @@ -3209,7 +3137,7 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@5.58.0: + /@typescript-eslint/visitor-keys/5.58.0: resolution: {integrity: sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -3217,14 +3145,14 @@ packages: eslint-visitor-keys: 3.4.0 dev: true - /@web/config-loader@0.1.3: + /@web/config-loader/0.1.3: resolution: {integrity: sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==} engines: {node: '>=10.0.0'} dependencies: semver: 7.4.0 dev: true - /@web/dev-server-core@0.4.1: + /@web/dev-server-core/0.4.1: resolution: {integrity: sha512-KdYwejXZwIZvb6tYMCqU7yBiEOPfKLQ3V9ezqqEz8DA9V9R3oQWaowckvCpFB9IxxPfS/P8/59OkdzGKQjcIUw==} engines: {node: '>=10.0.0'} dependencies: @@ -3252,11 +3180,11 @@ packages: - utf-8-validate dev: true - /@web/dev-server-rollup@0.4.1: + /@web/dev-server-rollup/0.4.1: resolution: {integrity: sha512-Ebsv7Ovd9MufeH3exvikBJ7GmrZA5OmHnOgaiHcwMJ2eQBJA5/I+/CbRjsLX97ICj/ZwZG//p2ITRz8W3UfSqg==} engines: {node: '>=10.0.0'} dependencies: - '@rollup/plugin-node-resolve': 13.3.0(rollup@2.79.1) + '@rollup/plugin-node-resolve': 13.3.0_rollup@2.79.1 '@web/dev-server-core': 0.4.1 nanocolors: 0.2.13 parse5: 6.0.1 @@ -3268,7 +3196,7 @@ packages: - utf-8-validate dev: true - /@web/dev-server@0.1.38: + /@web/dev-server/0.1.38: resolution: {integrity: sha512-WUq7Zi8KeJ5/UZmmpZ+kzUpUlFlMP/rcreJKYg9Lxiz998KYl4G5Rv24akX0piTuqXG7r6h+zszg8V/hdzjCoA==} engines: {node: '>=10.0.0'} hasBin: true @@ -3286,14 +3214,14 @@ packages: ip: 1.1.8 nanocolors: 0.2.13 open: 8.4.2 - portfinder: 1.0.32(supports-color@6.1.0) + portfinder: 1.0.32 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate dev: true - /@web/parse5-utils@1.3.1: + /@web/parse5-utils/1.3.1: resolution: {integrity: sha512-haCgDchZrAOB9EhBJ5XqiIjBMsS/exsM5Ru7sCSyNkXVEJWskyyKuKMFk66BonnIGMPpDtqDrTUfYEis5Zi3XA==} engines: {node: '>=10.0.0'} dependencies: @@ -3301,26 +3229,26 @@ packages: parse5: 6.0.1 dev: true - /@webassemblyjs/ast@1.11.1: + /@webassemblyjs/ast/1.11.1: resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} dependencies: '@webassemblyjs/helper-numbers': 1.11.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.1 dev: true - /@webassemblyjs/floating-point-hex-parser@1.11.1: + /@webassemblyjs/floating-point-hex-parser/1.11.1: resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==} dev: true - /@webassemblyjs/helper-api-error@1.11.1: + /@webassemblyjs/helper-api-error/1.11.1: resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==} dev: true - /@webassemblyjs/helper-buffer@1.11.1: + /@webassemblyjs/helper-buffer/1.11.1: resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==} dev: true - /@webassemblyjs/helper-numbers@1.11.1: + /@webassemblyjs/helper-numbers/1.11.1: resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==} dependencies: '@webassemblyjs/floating-point-hex-parser': 1.11.1 @@ -3328,11 +3256,11 @@ packages: '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/helper-wasm-bytecode@1.11.1: + /@webassemblyjs/helper-wasm-bytecode/1.11.1: resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==} dev: true - /@webassemblyjs/helper-wasm-section@1.11.1: + /@webassemblyjs/helper-wasm-section/1.11.1: resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3341,23 +3269,23 @@ packages: '@webassemblyjs/wasm-gen': 1.11.1 dev: true - /@webassemblyjs/ieee754@1.11.1: + /@webassemblyjs/ieee754/1.11.1: resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==} dependencies: '@xtuc/ieee754': 1.2.0 dev: true - /@webassemblyjs/leb128@1.11.1: + /@webassemblyjs/leb128/1.11.1: resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==} dependencies: '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/utf8@1.11.1: + /@webassemblyjs/utf8/1.11.1: resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==} dev: true - /@webassemblyjs/wasm-edit@1.11.1: + /@webassemblyjs/wasm-edit/1.11.1: resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3370,7 +3298,7 @@ packages: '@webassemblyjs/wast-printer': 1.11.1 dev: true - /@webassemblyjs/wasm-gen@1.11.1: + /@webassemblyjs/wasm-gen/1.11.1: resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3380,7 +3308,7 @@ packages: '@webassemblyjs/utf8': 1.11.1 dev: true - /@webassemblyjs/wasm-opt@1.11.1: + /@webassemblyjs/wasm-opt/1.11.1: resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3389,7 +3317,7 @@ packages: '@webassemblyjs/wasm-parser': 1.11.1 dev: true - /@webassemblyjs/wasm-parser@1.11.1: + /@webassemblyjs/wasm-parser/1.11.1: resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3400,22 +3328,22 @@ packages: '@webassemblyjs/utf8': 1.11.1 dev: true - /@webassemblyjs/wast-printer@1.11.1: + /@webassemblyjs/wast-printer/1.11.1: resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==} dependencies: '@webassemblyjs/ast': 1.11.1 '@xtuc/long': 4.2.2 dev: true - /@xtuc/ieee754@1.2.0: + /@xtuc/ieee754/1.2.0: resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} dev: true - /@xtuc/long@4.2.2: + /@xtuc/long/4.2.2: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true - /JSONStream@1.3.5: + /JSONStream/1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true dependencies: @@ -3423,11 +3351,11 @@ packages: through: 2.3.8 dev: true - /abab@2.0.6: + /abab/2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} dev: true - /accepts@1.3.8: + /accepts/1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} dependencies: @@ -3435,14 +3363,14 @@ packages: negotiator: 0.6.3 dev: true - /acorn-globals@7.0.1: + /acorn-globals/7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: acorn: 8.8.2 acorn-walk: 8.2.0 dev: true - /acorn-import-assertions@1.8.0(acorn@8.8.2): + /acorn-import-assertions/1.8.0_acorn@8.8.2: resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} peerDependencies: acorn: ^8 @@ -3450,7 +3378,7 @@ packages: acorn: 8.8.2 dev: true - /acorn-jsx@5.3.2(acorn@7.4.1): + /acorn-jsx/5.3.2_acorn@7.4.1: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -3458,33 +3386,33 @@ packages: acorn: 7.4.1 dev: true - /acorn-walk@8.2.0: + /acorn-walk/8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} dev: true - /acorn@7.4.1: + /acorn/7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /acorn@8.8.2: + /acorn/8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /agent-base@6.0.2: + /agent-base/6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true - /aggregate-error@3.1.0: + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} dependencies: @@ -3492,7 +3420,7 @@ packages: indent-string: 4.0.0 dev: true - /ajv-errors@1.0.1(ajv@6.12.6): + /ajv-errors/1.0.1_ajv@6.12.6: resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==} peerDependencies: ajv: '>=5.0.0' @@ -3500,7 +3428,7 @@ packages: ajv: 6.12.6 dev: true - /ajv-keywords@3.5.2(ajv@6.12.6): + /ajv-keywords/3.5.2_ajv@6.12.6: resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: ajv: ^6.9.1 @@ -3508,7 +3436,7 @@ packages: ajv: 6.12.6 dev: true - /ajv@6.12.6: + /ajv/6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 @@ -3517,7 +3445,7 @@ packages: uri-js: 4.4.1 dev: true - /ajv@8.12.0: + /ajv/8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} dependencies: fast-deep-equal: 3.1.3 @@ -3526,97 +3454,97 @@ packages: uri-js: 4.4.1 dev: true - /ansi-colors@3.2.4: + /ansi-colors/3.2.4: resolution: {integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==} engines: {node: '>=6'} dev: true - /ansi-colors@4.1.3: + /ansi-colors/4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} dev: true - /ansi-escapes@4.3.2: + /ansi-escapes/4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} dependencies: type-fest: 0.21.3 - /ansi-html-community@0.0.8: + /ansi-html-community/0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} engines: {'0': node >= 0.8.0} hasBin: true dev: true - /ansi-regex@2.1.1: + /ansi-regex/2.1.1: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} engines: {node: '>=0.10.0'} dev: true - /ansi-regex@4.1.1: + /ansi-regex/4.1.1: resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} engines: {node: '>=6'} dev: true - /ansi-regex@5.0.1: + /ansi-regex/5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - /ansi-regex@6.0.1: + /ansi-regex/6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} dev: true - /ansi-styles@3.2.1: + /ansi-styles/3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} dependencies: color-convert: 1.9.3 dev: true - /ansi-styles@4.3.0: + /ansi-styles/4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - /ansi-styles@5.2.0: + /ansi-styles/5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} dev: true - /ansi-styles@6.2.1: + /ansi-styles/6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} dev: true - /any-promise@1.3.0: + /any-promise/1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} dev: true - /anymatch@3.1.3: + /anymatch/3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - /arg@4.1.3: + /arg/4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true - /argparse@1.0.10: + /argparse/1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 dev: true - /argparse@2.0.1: + /argparse/2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true optional: true - /args@5.0.3: + /args/5.0.3: resolution: {integrity: sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==} engines: {node: '>= 6.0.0'} dependencies: @@ -3626,77 +3554,77 @@ packages: mri: 1.1.4 dev: true - /argv-formatter@1.0.0: + /argv-formatter/1.0.0: resolution: {integrity: sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==} dev: true - /arr-diff@4.0.0: + /arr-diff/4.0.0: resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} engines: {node: '>=0.10.0'} dev: true - /arr-flatten@1.1.0: + /arr-flatten/1.1.0: resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} engines: {node: '>=0.10.0'} dev: true - /arr-union@3.1.0: + /arr-union/3.1.0: resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} engines: {node: '>=0.10.0'} dev: true - /array-back@3.1.0: + /array-back/3.1.0: resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} engines: {node: '>=6'} dev: true - /array-back@6.2.2: + /array-back/6.2.2: resolution: {integrity: sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==} engines: {node: '>=12.17'} dev: true - /array-buffer-byte-length@1.0.0: + /array-buffer-byte-length/1.0.0: resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: call-bind: 1.0.2 is-array-buffer: 3.0.2 dev: true - /array-flatten@1.1.1: + /array-flatten/1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: true - /array-flatten@2.1.2: + /array-flatten/2.1.2: resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} dev: true - /array-ify@1.0.0: + /array-ify/1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} dev: true - /array-union@1.0.2: + /array-union/1.0.2: resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} engines: {node: '>=0.10.0'} dependencies: array-uniq: 1.0.3 dev: true - /array-union@2.1.0: + /array-union/2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} dev: true - /array-uniq@1.0.3: + /array-uniq/1.0.3: resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} engines: {node: '>=0.10.0'} dev: true - /array-unique@0.3.2: + /array-unique/0.3.2: resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} engines: {node: '>=0.10.0'} dev: true - /array.prototype.reduce@1.0.5: + /array.prototype.reduce/1.0.5: resolution: {integrity: sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==} engines: {node: '>= 0.4'} dependencies: @@ -3707,85 +3635,85 @@ packages: is-string: 1.0.7 dev: true - /arrify@1.0.1: + /arrify/1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} dev: true - /assign-symbols@1.0.0: + /assign-symbols/1.0.0: resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} engines: {node: '>=0.10.0'} dev: true - /astral-regex@2.0.0: + /astral-regex/2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} dev: true - /async-limiter@1.0.1: + /async-limiter/1.0.1: resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} dev: true - /async@2.6.4: + /async/2.6.4: resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} dependencies: lodash: 4.17.21 dev: true - /asynckit@0.4.0: + /asynckit/0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true - /at-least-node@1.0.0: + /at-least-node/1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} dev: true - /atob@2.1.2: + /atob/2.1.2: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} engines: {node: '>= 4.5.0'} hasBin: true dev: true - /atomic-sleep@1.0.0: + /atomic-sleep/1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} dev: true - /available-typed-arrays@1.0.5: + /available-typed-arrays/1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} dev: true - /babel-helper-evaluate-path@0.5.0: + /babel-helper-evaluate-path/0.5.0: resolution: {integrity: sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==} dev: true - /babel-helper-flip-expressions@0.4.3: + /babel-helper-flip-expressions/0.4.3: resolution: {integrity: sha512-rSrkRW4YQ2ETCWww9gbsWk4N0x1BOtln349Tk0dlCS90oT68WMLyGR7WvaMp3eAnsVrCqdUtC19lo1avyGPejA==} dev: true - /babel-helper-is-nodes-equiv@0.0.1: + /babel-helper-is-nodes-equiv/0.0.1: resolution: {integrity: sha512-ri/nsMFVRqXn7IyT5qW4/hIAGQxuYUFHa3qsxmPtbk6spZQcYlyDogfVpNm2XYOslH/ULS4VEJGUqQX5u7ACQw==} dev: true - /babel-helper-is-void-0@0.4.3: + /babel-helper-is-void-0/0.4.3: resolution: {integrity: sha512-07rBV0xPRM3TM5NVJEOQEkECX3qnHDjaIbFvWYPv+T1ajpUiVLiqTfC+MmiZxY5KOL/Ec08vJdJD9kZiP9UkUg==} dev: true - /babel-helper-mark-eval-scopes@0.4.3: + /babel-helper-mark-eval-scopes/0.4.3: resolution: {integrity: sha512-+d/mXPP33bhgHkdVOiPkmYoeXJ+rXRWi7OdhwpyseIqOS8CmzHQXHUp/+/Qr8baXsT0kjGpMHHofHs6C3cskdA==} dev: true - /babel-helper-remove-or-void@0.4.3: + /babel-helper-remove-or-void/0.4.3: resolution: {integrity: sha512-eYNceYtcGKpifHDir62gHJadVXdg9fAhuZEXiRQnJJ4Yi4oUTpqpNY//1pM4nVyjjDMPYaC2xSf0I+9IqVzwdA==} dev: true - /babel-helper-to-multiple-sequence-expressions@0.5.0: + /babel-helper-to-multiple-sequence-expressions/0.5.0: resolution: {integrity: sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==} dev: true - /babel-jest@29.5.0(@babel/core@7.21.4): + /babel-jest/29.5.0_@babel+core@7.21.4: resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -3795,7 +3723,7 @@ packages: '@jest/transform': 29.5.0 '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.5.0(@babel/core@7.21.4) + babel-preset-jest: 29.5.0_@babel+core@7.21.4 chalk: 4.1.1 graceful-fs: 4.2.11 slash: 3.0.0 @@ -3803,7 +3731,7 @@ packages: - supports-color dev: true - /babel-loader@8.3.0(@babel/core@7.21.4)(webpack@5.79.0): + /babel-loader/8.3.0_c3tfwv7p35clwcmkb5fnkshzei: resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} engines: {node: '>= 8.9'} peerDependencies: @@ -3815,10 +3743,10 @@ packages: loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e dev: true - /babel-minify@0.5.2: + /babel-minify/0.5.2: resolution: {integrity: sha512-H1ExfmvTxKWQZYcty1My6XRhoZm04/5MNb2DdZsC08r7y/rowipC0s9sszKA7jgW9mYYDdFnU68XohB+zP35qQ==} hasBin: true dependencies: @@ -3833,7 +3761,7 @@ packages: - supports-color dev: true - /babel-plugin-istanbul@6.1.1: + /babel-plugin-istanbul/6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: @@ -3846,7 +3774,7 @@ packages: - supports-color dev: true - /babel-plugin-jest-hoist@29.5.0: + /babel-plugin-jest-hoist/29.5.0: resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3856,17 +3784,17 @@ packages: '@types/babel__traverse': 7.18.3 dev: true - /babel-plugin-minify-builtins@0.5.0: + /babel-plugin-minify-builtins/0.5.0: resolution: {integrity: sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==} dev: true - /babel-plugin-minify-constant-folding@0.5.0: + /babel-plugin-minify-constant-folding/0.5.0: resolution: {integrity: sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==} dependencies: babel-helper-evaluate-path: 0.5.0 dev: true - /babel-plugin-minify-dead-code-elimination@0.5.2: + /babel-plugin-minify-dead-code-elimination/0.5.2: resolution: {integrity: sha512-krq9Lwi0QIzyAlcNBXTL4usqUvevB4BzktdEsb8srcXC1AaYqRJiAQw6vdKdJSaXbz6snBvziGr6ch/aoRCfpA==} dependencies: babel-helper-evaluate-path: 0.5.0 @@ -3875,38 +3803,38 @@ packages: lodash: 4.17.21 dev: true - /babel-plugin-minify-flip-comparisons@0.4.3: + /babel-plugin-minify-flip-comparisons/0.4.3: resolution: {integrity: sha512-8hNwgLVeJzpeLVOVArag2DfTkbKodzOHU7+gAZ8mGBFGPQHK6uXVpg3jh5I/F6gfi5Q5usWU2OKcstn1YbAV7A==} dependencies: babel-helper-is-void-0: 0.4.3 dev: true - /babel-plugin-minify-guarded-expressions@0.4.4: + /babel-plugin-minify-guarded-expressions/0.4.4: resolution: {integrity: sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==} dependencies: babel-helper-evaluate-path: 0.5.0 babel-helper-flip-expressions: 0.4.3 dev: true - /babel-plugin-minify-infinity@0.4.3: + /babel-plugin-minify-infinity/0.4.3: resolution: {integrity: sha512-X0ictxCk8y+NvIf+bZ1HJPbVZKMlPku3lgYxPmIp62Dp8wdtbMLSekczty3MzvUOlrk5xzWYpBpQprXUjDRyMA==} dev: true - /babel-plugin-minify-mangle-names@0.5.1: + /babel-plugin-minify-mangle-names/0.5.1: resolution: {integrity: sha512-8KMichAOae2FHlipjNDTo2wz97MdEb2Q0jrn4NIRXzHH7SJ3c5TaNNBkeTHbk9WUsMnqpNUx949ugM9NFWewzw==} dependencies: babel-helper-mark-eval-scopes: 0.4.3 dev: true - /babel-plugin-minify-numeric-literals@0.4.3: + /babel-plugin-minify-numeric-literals/0.4.3: resolution: {integrity: sha512-5D54hvs9YVuCknfWywq0eaYDt7qYxlNwCqW9Ipm/kYeS9gYhJd0Rr/Pm2WhHKJ8DC6aIlDdqSBODSthabLSX3A==} dev: true - /babel-plugin-minify-replace@0.5.0: + /babel-plugin-minify-replace/0.5.0: resolution: {integrity: sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==} dev: true - /babel-plugin-minify-simplify@0.5.1: + /babel-plugin-minify-simplify/0.5.1: resolution: {integrity: sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==} dependencies: babel-helper-evaluate-path: 0.5.0 @@ -3915,117 +3843,117 @@ packages: babel-helper-to-multiple-sequence-expressions: 0.5.0 dev: true - /babel-plugin-minify-type-constructors@0.4.3: + /babel-plugin-minify-type-constructors/0.4.3: resolution: {integrity: sha512-4ADB0irJ/6BeXWHubjCJmrPbzhxDgjphBMjIjxCc25n4NGJ00NsYqwYt+F/OvE9RXx8KaSW7cJvp+iZX436tnQ==} dependencies: babel-helper-is-void-0: 0.4.3 dev: true - /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.21.4): + /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.21.4: resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.21.4 '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.4 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.4): + /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.21.4: resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.4 core-js-compat: 3.30.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.21.4): + /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.21.4: resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.4 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-transform-inline-consecutive-adds@0.4.3: + /babel-plugin-transform-inline-consecutive-adds/0.4.3: resolution: {integrity: sha512-8D104wbzzI5RlxeVPYeQb9QsUyepiH1rAO5hpPpQ6NPRgQLpIVwkS/Nbx944pm4K8Z+rx7CgjPsFACz/VCBN0Q==} dev: true - /babel-plugin-transform-member-expression-literals@6.9.4: + /babel-plugin-transform-member-expression-literals/6.9.4: resolution: {integrity: sha512-Xq9/Rarpj+bjOZSl1nBbZYETsNEDDJSrb6Plb1sS3/36FukWFLLRysgecva5KZECjUJTrJoQqjJgtWToaflk5Q==} dev: true - /babel-plugin-transform-merge-sibling-variables@6.9.5: + /babel-plugin-transform-merge-sibling-variables/6.9.5: resolution: {integrity: sha512-xj/KrWi6/uP+DrD844h66Qh2cZN++iugEIgH8QcIxhmZZPNP6VpOE9b4gP2FFW39xDAY43kCmYMM6U0QNKN8fw==} dev: true - /babel-plugin-transform-minify-booleans@6.9.4: + /babel-plugin-transform-minify-booleans/6.9.4: resolution: {integrity: sha512-9pW9ePng6DZpzGPalcrULuhSCcauGAbn8AeU3bE34HcDkGm8Ldt0ysjGkyb64f0K3T5ilV4mriayOVv5fg0ASA==} dev: true - /babel-plugin-transform-property-literals@6.9.4: + /babel-plugin-transform-property-literals/6.9.4: resolution: {integrity: sha512-Pf8JHTjTPxecqVyL6KSwD/hxGpoTZjiEgV7nCx0KFQsJYM0nuuoCajbg09KRmZWeZbJ5NGTySABYv8b/hY1eEA==} dependencies: esutils: 2.0.3 dev: true - /babel-plugin-transform-regexp-constructors@0.4.3: + /babel-plugin-transform-regexp-constructors/0.4.3: resolution: {integrity: sha512-JjymDyEyRNhAoNFp09y/xGwYVYzT2nWTGrBrWaL6eCg2m+B24qH2jR0AA8V8GzKJTgC8NW6joJmc6nabvWBD/g==} dev: true - /babel-plugin-transform-remove-console@6.9.4: + /babel-plugin-transform-remove-console/6.9.4: resolution: {integrity: sha512-88blrUrMX3SPiGkT1GnvVY8E/7A+k6oj3MNvUtTIxJflFzXTw1bHkuJ/y039ouhFMp2prRn5cQGzokViYi1dsg==} dev: true - /babel-plugin-transform-remove-debugger@6.9.4: + /babel-plugin-transform-remove-debugger/6.9.4: resolution: {integrity: sha512-Kd+eTBYlXfwoFzisburVwrngsrz4xh9I0ppoJnU/qlLysxVBRgI4Pj+dk3X8F5tDiehp3hhP8oarRMT9v2Z3lw==} dev: true - /babel-plugin-transform-remove-undefined@0.5.0: + /babel-plugin-transform-remove-undefined/0.5.0: resolution: {integrity: sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==} dependencies: babel-helper-evaluate-path: 0.5.0 dev: true - /babel-plugin-transform-simplify-comparison-operators@6.9.4: + /babel-plugin-transform-simplify-comparison-operators/6.9.4: resolution: {integrity: sha512-GLInxhGAQWJ9YIdjwF6dAFlmh4U+kN8pL6Big7nkDzHoZcaDQOtBm28atEhQJq6m9GpAovbiGEShKqXv4BSp0A==} dev: true - /babel-plugin-transform-undefined-to-void@6.9.4: + /babel-plugin-transform-undefined-to-void/6.9.4: resolution: {integrity: sha512-D2UbwxawEY1xVc9svYAUZQM2xarwSNXue2qDIx6CeV2EuMGaes/0su78zlIDIAgE7BvnMw4UpmSo9fDy+znghg==} dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.21.4): + /babel-preset-current-node-syntax/1.0.1_@babel+core@7.21.4: resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.21.4 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.4) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.4) - dev: true - - /babel-preset-jest@29.5.0(@babel/core@7.21.4): + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.4 + '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.4 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.4 + dev: true + + /babel-preset-jest/29.5.0_@babel+core@7.21.4: resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4033,10 +3961,10 @@ packages: dependencies: '@babel/core': 7.21.4 babel-plugin-jest-hoist: 29.5.0 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.4) + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.4 dev: true - /babel-preset-minify@0.5.2: + /babel-preset-minify/0.5.2: resolution: {integrity: sha512-v4GL+kk0TfovbRIKZnC3HPbu2cAGmPAby7BsOmuPdMJfHV+4FVdsGXTH/OOGQRKYdjemBuL1+MsE6mobobhe9w==} dependencies: babel-plugin-minify-builtins: 0.5.0 @@ -4064,19 +3992,11 @@ packages: lodash: 4.17.21 dev: true - /balanced-match@1.0.2: + /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - /base64id@2.0.0: - resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} - engines: {node: ^4.5.0 || >= 5.9} - dev: true - - /base@0.11.2: + /base/0.11.2: resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} engines: {node: '>=0.10.0'} dependencies: @@ -4089,36 +4009,44 @@ packages: pascalcase: 0.1.1 dev: true - /batch@0.6.1: + /base64-js/1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + /base64id/2.0.0: + resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} + engines: {node: ^4.5.0 || >= 5.9} + dev: true + + /batch/0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} dev: true - /big.js@5.2.2: + /big.js/5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: true - /bignumber.js@9.1.1: + /bignumber.js/9.1.1: resolution: {integrity: sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==} dev: true - /binary-extensions@2.2.0: + /binary-extensions/2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - /bl@4.1.0: + /bl/4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - /body-parser@1.20.1(supports-color@6.1.0): + /body-parser/1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 2.6.9(supports-color@6.1.0) + debug: 2.6.9 depd: 2.0.0 destroy: 1.2.0 http-errors: 2.0.0 @@ -4132,7 +4060,27 @@ packages: - supports-color dev: true - /bonjour@3.5.0: + /body-parser/1.20.1_supports-color@6.1.0: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9_supports-color@6.1.0 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /bonjour/3.5.0: resolution: {integrity: sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==} dependencies: array-flatten: 2.1.2 @@ -4143,20 +4091,20 @@ packages: multicast-dns-service-types: 1.1.0 dev: true - /brace-expansion@1.1.11: + /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 dev: true - /brace-expansion@2.0.1: + /brace-expansion/2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 dev: true - /braces@2.3.2(supports-color@6.1.0): + /braces/2.3.2_supports-color@6.1.0: resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} engines: {node: '>=0.10.0'} dependencies: @@ -4166,7 +4114,7 @@ packages: fill-range: 4.0.0 isobject: 3.0.1 repeat-element: 1.1.4 - snapdragon: 0.8.2(supports-color@6.1.0) + snapdragon: 0.8.2_supports-color@6.1.0 snapdragon-node: 2.1.1 split-string: 3.1.0 to-regex: 3.0.2 @@ -4174,13 +4122,13 @@ packages: - supports-color dev: true - /braces@3.0.2: + /braces/3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - /browserslist@4.21.5: + /browserslist/4.21.5: resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -4188,35 +4136,35 @@ packages: caniuse-lite: 1.0.30001478 electron-to-chromium: 1.4.361 node-releases: 2.0.10 - update-browserslist-db: 1.0.10(browserslist@4.21.5) + update-browserslist-db: 1.0.10_browserslist@4.21.5 dev: true - /bser@2.1.1: + /bser/2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 dev: true - /buffer-from@1.1.2: + /buffer-from/1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true - /buffer-indexof@1.1.1: + /buffer-indexof/1.1.1: resolution: {integrity: sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==} dev: true - /buffer@5.7.1: + /buffer/5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - /builtin-modules@3.3.0: + /builtin-modules/3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} dev: true - /bundle-require@4.0.1(esbuild@0.17.16): + /bundle-require/4.0.1_esbuild@0.17.16: resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: @@ -4226,29 +4174,29 @@ packages: load-tsconfig: 0.2.5 dev: true - /busboy@1.6.0: + /busboy/1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} dependencies: streamsearch: 1.1.0 dev: true - /bytes@3.0.0: + /bytes/3.0.0: resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} engines: {node: '>= 0.8'} dev: true - /bytes@3.1.2: + /bytes/3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} dev: true - /cac@6.7.14: + /cac/6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} dev: true - /cache-base@1.0.1: + /cache-base/1.0.1: resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} engines: {node: '>=0.10.0'} dependencies: @@ -4263,7 +4211,7 @@ packages: unset-value: 1.0.0 dev: true - /cache-content-type@1.0.1: + /cache-content-type/1.0.1: resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} engines: {node: '>= 6.0.0'} dependencies: @@ -4271,24 +4219,24 @@ packages: ylru: 1.3.2 dev: true - /cachedir@2.3.0: + /cachedir/2.3.0: resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==} engines: {node: '>=6'} dev: true - /call-bind@1.0.2: + /call-bind/1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 get-intrinsic: 1.2.0 dev: true - /callsites@3.1.0: + /callsites/3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} dev: true - /camelcase-keys@6.2.2: + /camelcase-keys/6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} engines: {node: '>=8'} dependencies: @@ -4297,38 +4245,38 @@ packages: quick-lru: 4.0.1 dev: true - /camelcase@4.1.0: + /camelcase/4.1.0: resolution: {integrity: sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==} engines: {node: '>=4'} dev: true - /camelcase@5.0.0: + /camelcase/5.0.0: resolution: {integrity: sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==} engines: {node: '>=6'} dev: true - /camelcase@5.3.1: + /camelcase/5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} dev: true - /camelcase@6.3.0: + /camelcase/6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001478: + /caniuse-lite/1.0.30001478: resolution: {integrity: sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw==} dev: true - /chalk-template@0.4.0: + /chalk-template/0.4.0: resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} engines: {node: '>=12'} dependencies: chalk: 4.1.2 dev: true - /chalk@2.4.2: + /chalk/2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} dependencies: @@ -4337,14 +4285,14 @@ packages: supports-color: 5.5.0 dev: true - /chalk@4.1.1: + /chalk/4.1.1: resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==} engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - /chalk@4.1.2: + /chalk/4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} dependencies: @@ -4352,20 +4300,20 @@ packages: supports-color: 7.2.0 dev: true - /chalk@5.2.0: + /chalk/5.2.0: resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true - /char-regex@1.0.2: + /char-regex/1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} dev: true - /chardet@0.7.0: + /chardet/0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - /chokidar@3.4.1: + /chokidar/3.4.1: resolution: {integrity: sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==} engines: {node: '>= 8.10.0'} dependencies: @@ -4379,21 +4327,21 @@ packages: optionalDependencies: fsevents: 2.1.3 - /chrome-trace-event@1.0.3: + /chrome-trace-event/1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} dev: true - /ci-info@3.8.0: + /ci-info/3.8.0: resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} dev: true - /cjs-module-lexer@1.2.2: + /cjs-module-lexer/1.2.2: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} dev: true - /class-utils@0.3.6: + /class-utils/0.3.6: resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} engines: {node: '>=0.10.0'} dependencies: @@ -4403,22 +4351,22 @@ packages: static-extend: 0.1.2 dev: true - /clean-stack@2.2.0: + /clean-stack/2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} dev: true - /cli-cursor@3.1.0: + /cli-cursor/3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 - /cli-spinners@2.8.0: + /cli-spinners/2.8.0: resolution: {integrity: sha512-/eG5sJcvEIwxcdYM86k5tPwn0MUzkX5YY3eImTGpJOZgVe4SdTMY14vQpcxgBzJ0wXwAYrS8E+c3uHeK4JNyzQ==} engines: {node: '>=6'} - /cli-truncate@2.1.0: + /cli-truncate/2.1.0: resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} engines: {node: '>=8'} dependencies: @@ -4426,7 +4374,7 @@ packages: string-width: 4.2.3 dev: true - /cli-truncate@3.1.0: + /cli-truncate/3.1.0: resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: @@ -4434,11 +4382,11 @@ packages: string-width: 5.1.2 dev: true - /cli-width@3.0.0: + /cli-width/3.0.0: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} - /cliui@5.0.0: + /cliui/5.0.0: resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} dependencies: string-width: 3.1.0 @@ -4446,7 +4394,7 @@ packages: wrap-ansi: 5.1.0 dev: true - /cliui@8.0.1: + /cliui/8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} dependencies: @@ -4454,7 +4402,7 @@ packages: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - /clone-deep@4.0.1: + /clone-deep/4.0.1: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} engines: {node: '>=6'} dependencies: @@ -4463,25 +4411,25 @@ packages: shallow-clone: 3.0.1 dev: true - /clone@1.0.4: + /clone/1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} - /clone@2.1.2: + /clone/2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} dev: true - /co@4.6.0: + /co/4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} dev: true - /collect-v8-coverage@1.0.1: + /collect-v8-coverage/1.0.1: resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} dev: true - /collection-visit@1.0.0: + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} dependencies: @@ -4489,37 +4437,37 @@ packages: object-visit: 1.0.1 dev: true - /color-convert@1.9.3: + /color-convert/1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 dev: true - /color-convert@2.0.1: + /color-convert/2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - /color-name@1.1.3: + /color-name/1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} dev: true - /color-name@1.1.4: + /color-name/1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - /colorette@2.0.19: + /colorette/2.0.19: resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} dev: true - /combined-stream@1.0.8: + /combined-stream/1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 dev: true - /command-line-args@5.2.1: + /command-line-args/5.2.1: resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} engines: {node: '>=4.0.0'} dependencies: @@ -4529,7 +4477,7 @@ packages: typical: 4.0.0 dev: true - /command-line-usage@7.0.1: + /command-line-usage/7.0.1: resolution: {integrity: sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==} engines: {node: '>=12.20.0'} dependencies: @@ -4539,27 +4487,48 @@ packages: typical: 7.1.1 dev: true - /commander@10.0.0: + /commander/10.0.0: resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==} engines: {node: '>=14'} dev: true - /commander@2.20.3: + /commander/2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true - /commander@4.1.1: + /commander/4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} dev: true - /commitizen@4.3.0(@swc/core@1.3.49): + /commitizen/4.3.0: + resolution: {integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==} + engines: {node: '>= 12'} + hasBin: true + dependencies: + cachedir: 2.3.0 + cz-conventional-changelog: 3.3.0_@swc+core@1.3.49 + dedent: 0.7.0 + detect-indent: 6.1.0 + find-node-modules: 2.1.3 + find-root: 1.1.0 + fs-extra: 9.1.0 + glob: 7.2.3 + inquirer: 8.2.5 + is-utf8: 0.2.1 + lodash: 4.17.21 + minimist: 1.2.7 + strip-bom: 4.0.0 + strip-json-comments: 3.1.1 + dev: true + + /commitizen/4.3.0_@swc+core@1.3.49: resolution: {integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==} engines: {node: '>= 12'} hasBin: true dependencies: cachedir: 2.3.0 - cz-conventional-changelog: 3.3.0(@swc/core@1.3.49) + cz-conventional-changelog: 3.3.0_@swc+core@1.3.49 dedent: 0.7.0 detect-indent: 6.1.0 find-node-modules: 2.1.3 @@ -4577,36 +4546,36 @@ packages: - '@swc/wasm' dev: true - /commondir@1.0.1: + /commondir/1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: true - /compare-func@2.0.0: + /compare-func/2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} dependencies: array-ify: 1.0.0 dot-prop: 5.3.0 dev: true - /component-emitter@1.3.0: + /component-emitter/1.3.0: resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} dev: true - /compressible@2.0.18: + /compressible/2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 dev: true - /compression@1.7.4(supports-color@6.1.0): + /compression/1.7.4_supports-color@6.1.0: resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} engines: {node: '>= 0.8.0'} dependencies: accepts: 1.3.8 bytes: 3.0.0 compressible: 2.0.18 - debug: 2.6.9(supports-color@6.1.0) + debug: 2.6.9_supports-color@6.1.0 on-headers: 1.0.2 safe-buffer: 5.1.2 vary: 1.1.2 @@ -4614,28 +4583,28 @@ packages: - supports-color dev: true - /concat-map@0.0.1: + /concat-map/0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /connect-history-api-fallback@1.6.0: + /connect-history-api-fallback/1.6.0: resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==} engines: {node: '>=0.8'} dev: true - /content-disposition@0.5.4: + /content-disposition/0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} dependencies: safe-buffer: 5.2.1 dev: true - /content-type@1.0.5: + /content-type/1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} dev: true - /conventional-changelog-angular@5.0.13: + /conventional-changelog-angular/5.0.13: resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==} engines: {node: '>=10'} dependencies: @@ -4643,7 +4612,7 @@ packages: q: 1.5.1 dev: true - /conventional-changelog-conventionalcommits@4.6.3: + /conventional-changelog-conventionalcommits/4.6.3: resolution: {integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==} engines: {node: '>=10'} dependencies: @@ -4652,11 +4621,11 @@ packages: q: 1.5.1 dev: true - /conventional-commit-types@3.0.0: + /conventional-commit-types/3.0.0: resolution: {integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==} dev: true - /conventional-commits-parser@3.2.4: + /conventional-commits-parser/3.2.4: resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==} engines: {node: '>=10'} hasBin: true @@ -4669,28 +4638,28 @@ packages: through2: 4.0.2 dev: true - /convert-source-map@1.9.0: + /convert-source-map/1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} dev: true - /convert-source-map@2.0.0: + /convert-source-map/2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true - /cookie-signature@1.0.6: + /cookie-signature/1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} dev: true - /cookie@0.4.2: + /cookie/0.4.2: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} dev: true - /cookie@0.5.0: + /cookie/0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} - /cookies@0.8.0: + /cookies/0.8.0: resolution: {integrity: sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==} engines: {node: '>= 0.8'} dependencies: @@ -4698,22 +4667,22 @@ packages: keygrip: 1.1.0 dev: true - /copy-descriptor@0.1.1: + /copy-descriptor/0.1.1: resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} engines: {node: '>=0.10.0'} dev: true - /core-js-compat@3.30.0: + /core-js-compat/3.30.0: resolution: {integrity: sha512-P5A2h/9mRYZFIAP+5Ab8ns6083IyVpSclU74UNvbGVQ8VM7n3n3/g2yF3AkKQ9NXz2O+ioxLbEWKnDtgsFamhg==} dependencies: browserslist: 4.21.5 dev: true - /core-util-is@1.0.3: + /core-util-is/1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /cors@2.8.5: + /cors/2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} dependencies: @@ -4721,24 +4690,23 @@ packages: vary: 1.1.2 dev: true - /cosmiconfig-typescript-loader@2.0.2(@swc/core@1.3.49)(@types/node@18.15.11)(cosmiconfig@7.1.0)(typescript@4.9.5): + /cosmiconfig-typescript-loader/2.0.2_faublg25f7qpbcz6w4cw6yyzse: resolution: {integrity: sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@types/node': '*' - cosmiconfig: '>=7' typescript: '>=3' dependencies: '@types/node': 18.15.11 cosmiconfig: 7.1.0 - ts-node: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@4.9.5) + ts-node: 10.9.1_faublg25f7qpbcz6w4cw6yyzse typescript: 4.9.5 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true - /cosmiconfig-typescript-loader@4.3.0(@types/node@18.15.11)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@5.0.4): + /cosmiconfig-typescript-loader/4.3.0_zulaepqzabcjiyzbkdbfeduf6u: resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==} engines: {node: '>=12', npm: '>=6'} peerDependencies: @@ -4749,12 +4717,12 @@ packages: dependencies: '@types/node': 18.15.11 cosmiconfig: 8.1.3 - ts-node: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4) + ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e typescript: 5.0.4 dev: true optional: true - /cosmiconfig@7.1.0: + /cosmiconfig/7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} dependencies: @@ -4765,7 +4733,7 @@ packages: yaml: 1.10.2 dev: true - /cosmiconfig@8.1.3: + /cosmiconfig/8.1.3: resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==} engines: {node: '>=14'} dependencies: @@ -4776,11 +4744,11 @@ packages: dev: true optional: true - /create-require@1.1.1: + /create-require/1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true - /cross-env@7.0.3: + /cross-env/7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} hasBin: true @@ -4788,7 +4756,7 @@ packages: cross-spawn: 7.0.3 dev: true - /cross-fetch@3.1.5: + /cross-fetch/3.1.5: resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} dependencies: node-fetch: 2.6.7 @@ -4796,7 +4764,7 @@ packages: - encoding dev: true - /cross-spawn@6.0.5: + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} dependencies: @@ -4807,7 +4775,7 @@ packages: which: 1.3.1 dev: true - /cross-spawn@7.0.3: + /cross-spawn/7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} dependencies: @@ -4816,44 +4784,44 @@ packages: which: 2.0.2 dev: true - /cssom@0.3.8: + /cssom/0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} dev: true - /cssom@0.5.0: + /cssom/0.5.0: resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} dev: true - /cssstyle@2.3.0: + /cssstyle/2.3.0: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} dependencies: cssom: 0.3.8 dev: true - /cz-conventional-changelog@3.3.0(@swc/core@1.3.49): + /cz-conventional-changelog/3.3.0_@swc+core@1.3.49: resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==} engines: {node: '>= 10'} dependencies: chalk: 2.4.2 - commitizen: 4.3.0(@swc/core@1.3.49) + commitizen: 4.3.0 conventional-commit-types: 3.0.0 lodash.map: 4.6.0 longest: 2.0.1 word-wrap: 1.2.3 optionalDependencies: - '@commitlint/load': 17.5.0(@swc/core@1.3.49) + '@commitlint/load': 17.5.0_@swc+core@1.3.49 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true - /dargs@7.0.0: + /dargs/7.0.0: resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} engines: {node: '>=8'} dev: true - /data-urls@3.0.2: + /data-urls/3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} dependencies: @@ -4862,15 +4830,26 @@ packages: whatwg-url: 11.0.0 dev: true - /dateformat@4.6.3: + /dateformat/4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} dev: true - /debounce@1.2.1: + /debounce/1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} dev: true - /debug@2.6.9(supports-color@6.1.0): + /debug/2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: true + + /debug/2.6.9_supports-color@6.1.0: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: supports-color: '*' @@ -4882,7 +4861,18 @@ packages: supports-color: 6.1.0 dev: true - /debug@3.2.7(supports-color@6.1.0): + /debug/3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + + /debug/3.2.7_supports-color@6.1.0: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' @@ -4894,7 +4884,19 @@ packages: supports-color: 6.1.0 dev: true - /debug@4.3.4(supports-color@6.1.0): + /debug/4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /debug/4.3.4_supports-color@6.1.0: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -4907,7 +4909,7 @@ packages: supports-color: 6.1.0 dev: true - /decamelize-keys@1.1.1: + /decamelize-keys/1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} engines: {node: '>=0.10.0'} dependencies: @@ -4915,29 +4917,29 @@ packages: map-obj: 1.0.1 dev: true - /decamelize@1.2.0: + /decamelize/1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} dev: true - /decimal.js@10.4.3: + /decimal.js/10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} dev: true - /decode-uri-component@0.2.2: + /decode-uri-component/0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} dev: true - /dedent@0.7.0: + /dedent/0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true - /deep-equal@1.0.1: + /deep-equal/1.0.1: resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} dev: true - /deep-equal@1.1.1: + /deep-equal/1.1.1: resolution: {integrity: sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==} dependencies: is-arguments: 1.1.1 @@ -4948,21 +4950,21 @@ packages: regexp.prototype.flags: 1.4.3 dev: true - /deep-extend@0.6.0: + /deep-extend/0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} dev: true - /deep-is@0.1.4: + /deep-is/0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /deepmerge@4.3.1: + /deepmerge/4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} dev: true - /default-gateway@4.2.0: + /default-gateway/4.2.0: resolution: {integrity: sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==} engines: {node: '>=6'} dependencies: @@ -4970,17 +4972,17 @@ packages: ip-regex: 2.1.0 dev: true - /defaults@1.0.4: + /defaults/1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 - /define-lazy-prop@2.0.0: + /define-lazy-prop/2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} dev: true - /define-properties@1.2.0: + /define-properties/1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} dependencies: @@ -4988,21 +4990,21 @@ packages: object-keys: 1.1.1 dev: true - /define-property@0.2.5: + /define-property/0.2.5: resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} engines: {node: '>=0.10.0'} dependencies: is-descriptor: 0.1.6 dev: true - /define-property@1.0.0: + /define-property/1.0.0: resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} engines: {node: '>=0.10.0'} dependencies: is-descriptor: 1.0.2 dev: true - /define-property@2.0.2: + /define-property/2.0.2: resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} engines: {node: '>=0.10.0'} dependencies: @@ -5010,7 +5012,7 @@ packages: isobject: 3.0.1 dev: true - /del@4.1.1: + /del/4.1.1: resolution: {integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==} engines: {node: '>=6'} dependencies: @@ -5023,111 +5025,111 @@ packages: rimraf: 2.7.1 dev: true - /delayed-stream@1.0.0: + /delayed-stream/1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} dev: true - /delegates@1.0.0: + /delegates/1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} dev: true - /depd@1.1.2: + /depd/1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} dev: true - /depd@2.0.0: + /depd/2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} dev: true - /destroy@1.2.0: + /destroy/1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dev: true - /detect-file@1.0.0: + /detect-file/1.0.0: resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} engines: {node: '>=0.10.0'} dev: true - /detect-indent@6.1.0: + /detect-indent/6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} dev: true - /detect-newline@3.1.0: + /detect-newline/3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} dev: true - /detect-node@2.1.0: + /detect-node/2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} dev: true - /diff-sequences@29.4.3: + /diff-sequences/29.4.3: resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /diff@4.0.2: + /diff/4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} dev: true - /dir-glob@3.0.1: + /dir-glob/3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} dependencies: path-type: 4.0.0 dev: true - /dns-equal@1.0.0: + /dns-equal/1.0.0: resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} dev: true - /dns-packet@1.3.4: + /dns-packet/1.3.4: resolution: {integrity: sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==} dependencies: ip: 1.1.8 safe-buffer: 5.2.1 dev: true - /dns-txt@2.0.2: + /dns-txt/2.0.2: resolution: {integrity: sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==} dependencies: buffer-indexof: 1.1.1 dev: true - /doctrine@3.0.0: + /doctrine/3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 dev: true - /domexception@4.0.0: + /domexception/4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} dependencies: webidl-conversions: 7.0.0 dev: true - /dot-prop@5.3.0: + /dot-prop/5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} dependencies: is-obj: 2.0.0 dev: true - /duplexer2@0.1.4: + /duplexer2/0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: readable-stream: 2.3.8 dev: true - /duplexify@4.1.2: + /duplexify/4.1.2: resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} dependencies: end-of-stream: 1.4.4 @@ -5136,56 +5138,56 @@ packages: stream-shift: 1.0.1 dev: true - /eastasianwidth@0.2.0: + /eastasianwidth/0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /ee-first@1.1.1: + /ee-first/1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true - /electron-to-chromium@1.4.361: + /electron-to-chromium/1.4.361: resolution: {integrity: sha512-VocVwjPp05HUXzf3xmL0boRn5b0iyqC7amtDww84Jb1QJNPBc7F69gJyEeXRoriLBC4a5pSyckdllrXAg4mmRA==} dev: true - /emittery@0.13.1: + /emittery/0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} dev: true - /emoji-regex@7.0.3: + /emoji-regex/7.0.3: resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} dev: true - /emoji-regex@8.0.0: + /emoji-regex/8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - /emoji-regex@9.2.2: + /emoji-regex/9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true - /emojis-list@3.0.0: + /emojis-list/3.0.0: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} engines: {node: '>= 4'} dev: true - /encodeurl@1.0.2: + /encodeurl/1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} dev: true - /end-of-stream@1.4.4: + /end-of-stream/1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 dev: true - /engine.io-parser@5.0.6: + /engine.io-parser/5.0.6: resolution: {integrity: sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==} engines: {node: '>=10.0.0'} dev: true - /engine.io@6.4.1: + /engine.io/6.4.1: resolution: {integrity: sha512-JFYQurD/nbsA5BSPmbaOSLa3tSVj8L6o4srSwXXY3NqE+gGUNmmPTbhn8tjzcCtSqhFgIeqef81ngny8JM25hw==} engines: {node: '>=10.0.0'} dependencies: @@ -5196,7 +5198,7 @@ packages: base64id: 2.0.0 cookie: 0.4.2 cors: 2.8.5 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 engine.io-parser: 5.0.6 ws: 8.11.0 transitivePeerDependencies: @@ -5205,7 +5207,7 @@ packages: - utf-8-validate dev: true - /enhanced-resolve@5.12.0: + /enhanced-resolve/5.12.0: resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} engines: {node: '>=10.13.0'} dependencies: @@ -5213,32 +5215,32 @@ packages: tapable: 2.2.1 dev: true - /enquirer@2.3.6: + /enquirer/2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} dependencies: ansi-colors: 4.1.3 dev: true - /entities@4.4.0: + /entities/4.4.0: resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} engines: {node: '>=0.12'} dev: true - /errno@0.1.8: + /errno/0.1.8: resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} hasBin: true dependencies: prr: 1.0.1 dev: true - /error-ex@1.3.2: + /error-ex/1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 dev: true - /es-abstract@1.21.2: + /es-abstract/1.21.2: resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} engines: {node: '>= 0.4'} dependencies: @@ -5278,15 +5280,15 @@ packages: which-typed-array: 1.1.9 dev: true - /es-array-method-boxes-properly@1.0.0: + /es-array-method-boxes-properly/1.0.0: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} dev: true - /es-module-lexer@1.2.1: + /es-module-lexer/1.2.1: resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==} dev: true - /es-set-tostringtag@2.0.1: + /es-set-tostringtag/2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} dependencies: @@ -5295,7 +5297,7 @@ packages: has-tostringtag: 1.0.0 dev: true - /es-to-primitive@1.2.1: + /es-to-primitive/1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} dependencies: @@ -5304,7 +5306,7 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild-loader@2.21.0(webpack@5.79.0): + /esbuild-loader/2.21.0_webpack@5.79.0: resolution: {integrity: sha512-k7ijTkCT43YBSZ6+fBCW1Gin7s46RrJ0VQaM8qA7lq7W+OLsGgtLyFV8470FzYi/4TeDexniTBTPTwZUnXXR5g==} peerDependencies: webpack: ^4.40.0 || ^5.0.0 @@ -5314,11 +5316,11 @@ packages: json5: 2.2.3 loader-utils: 2.0.4 tapable: 2.2.1 - webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e webpack-sources: 1.4.3 dev: true - /esbuild@0.16.17: + /esbuild/0.16.17: resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==} engines: {node: '>=12'} hasBin: true @@ -5348,7 +5350,7 @@ packages: '@esbuild/win32-x64': 0.16.17 dev: true - /esbuild@0.17.16: + /esbuild/0.17.16: resolution: {integrity: sha512-aeSuUKr9aFVY9Dc8ETVELGgkj4urg5isYx8pLf4wlGgB0vTFjxJQdHnNH6Shmx4vYYrOTLCHtRI5i1XZ9l2Zcg==} engines: {node: '>=12'} hasBin: true @@ -5378,29 +5380,29 @@ packages: '@esbuild/win32-x64': 0.17.16 dev: true - /escalade@3.1.1: + /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} - /escape-html@1.0.3: + /escape-html/1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} dev: true - /escape-string-regexp@1.0.5: + /escape-string-regexp/1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - /escape-string-regexp@2.0.0: + /escape-string-regexp/2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} dev: true - /escape-string-regexp@4.0.0: + /escape-string-regexp/4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} dev: true - /escodegen@2.0.0: + /escodegen/2.0.0: resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} engines: {node: '>=6.0'} hasBin: true @@ -5413,7 +5415,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-prettier@8.8.0(eslint@7.32.0): + /eslint-config-prettier/8.8.0_eslint@7.32.0: resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} hasBin: true peerDependencies: @@ -5422,7 +5424,7 @@ packages: eslint: 7.32.0 dev: true - /eslint-plugin-prettier@3.4.1(eslint-config-prettier@8.8.0)(eslint@7.32.0)(prettier@2.8.7): + /eslint-plugin-prettier/3.4.1_mouiu7tdcm2dtderipseaggmee: resolution: {integrity: sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==} engines: {node: '>=6.0.0'} peerDependencies: @@ -5434,12 +5436,12 @@ packages: optional: true dependencies: eslint: 7.32.0 - eslint-config-prettier: 8.8.0(eslint@7.32.0) + eslint-config-prettier: 8.8.0_eslint@7.32.0 prettier: 2.8.7 prettier-linter-helpers: 1.0.0 dev: true - /eslint-scope@5.1.1: + /eslint-scope/5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} dependencies: @@ -5447,29 +5449,29 @@ packages: estraverse: 4.3.0 dev: true - /eslint-utils@2.1.0: + /eslint-utils/2.1.0: resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} engines: {node: '>=6'} dependencies: eslint-visitor-keys: 1.3.0 dev: true - /eslint-visitor-keys@1.3.0: + /eslint-visitor-keys/1.3.0: resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} engines: {node: '>=4'} dev: true - /eslint-visitor-keys@2.1.0: + /eslint-visitor-keys/2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} dev: true - /eslint-visitor-keys@3.4.0: + /eslint-visitor-keys/3.4.0: resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@7.32.0: + /eslint/7.32.0: resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} engines: {node: ^10.12.0 || >=12.0.0} hasBin: true @@ -5480,7 +5482,7 @@ packages: ajv: 6.12.6 chalk: 4.1.1 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 doctrine: 3.0.0 enquirer: 2.3.6 escape-string-regexp: 4.0.0 @@ -5518,74 +5520,74 @@ packages: - supports-color dev: true - /espree@7.3.1: + /espree/7.3.1: resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: acorn: 7.4.1 - acorn-jsx: 5.3.2(acorn@7.4.1) + acorn-jsx: 5.3.2_acorn@7.4.1 eslint-visitor-keys: 1.3.0 dev: true - /esprima@4.0.1: + /esprima/4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true dev: true - /esquery@1.5.0: + /esquery/1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 dev: true - /esrecurse@4.3.0: + /esrecurse/4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 dev: true - /estraverse@4.3.0: + /estraverse/4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} dev: true - /estraverse@5.3.0: + /estraverse/5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} dev: true - /estree-walker@1.0.1: + /estree-walker/1.0.1: resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} dev: true - /esutils@2.0.3: + /esutils/2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} dev: true - /etag@1.8.1: + /etag/1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} dev: true - /eventemitter3@4.0.7: + /eventemitter3/4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} dev: true - /events@3.3.0: + /events/3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} dev: true - /eventsource@2.0.2: + /eventsource/2.0.2: resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==} engines: {node: '>=12.0.0'} dev: true - /execa@1.0.0: + /execa/1.0.0: resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} engines: {node: '>=6'} dependencies: @@ -5598,7 +5600,7 @@ packages: strip-eof: 1.0.0 dev: true - /execa@5.1.1: + /execa/5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} dependencies: @@ -5613,7 +5615,7 @@ packages: strip-final-newline: 2.0.0 dev: true - /execa@7.1.1: + /execa/7.1.1: resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==} engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} dependencies: @@ -5628,34 +5630,34 @@ packages: strip-final-newline: 3.0.0 dev: true - /exit@0.1.2: + /exit/0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} dev: true - /expand-brackets@2.1.4(supports-color@6.1.0): + /expand-brackets/2.1.4_supports-color@6.1.0: resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} engines: {node: '>=0.10.0'} dependencies: - debug: 2.6.9(supports-color@6.1.0) + debug: 2.6.9_supports-color@6.1.0 define-property: 0.2.5 extend-shallow: 2.0.1 posix-character-classes: 0.1.1 regex-not: 1.0.2 - snapdragon: 0.8.2(supports-color@6.1.0) + snapdragon: 0.8.2_supports-color@6.1.0 to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true - /expand-tilde@2.0.2: + /expand-tilde/2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} dependencies: homedir-polyfill: 1.0.3 dev: true - /expect@29.5.0: + /expect/29.5.0: resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -5666,23 +5668,23 @@ packages: jest-util: 29.5.0 dev: true - /express@4.18.2(supports-color@6.1.0): + /express/4.18.2: resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} engines: {node: '>= 0.10.0'} dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.1(supports-color@6.1.0) + body-parser: 1.20.1 content-disposition: 0.5.4 content-type: 1.0.5 cookie: 0.5.0 cookie-signature: 1.0.6 - debug: 2.6.9(supports-color@6.1.0) + debug: 2.6.9 depd: 2.0.0 encodeurl: 1.0.2 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.2.0(supports-color@6.1.0) + finalhandler: 1.2.0 fresh: 0.5.2 http-errors: 2.0.0 merge-descriptors: 1.0.1 @@ -5694,8 +5696,8 @@ packages: qs: 6.11.0 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.18.0(supports-color@6.1.0) - serve-static: 1.15.0(supports-color@6.1.0) + send: 0.18.0 + serve-static: 1.15.0 setprototypeof: 1.2.0 statuses: 2.0.1 type-is: 1.6.18 @@ -5705,14 +5707,53 @@ packages: - supports-color dev: true - /extend-shallow@2.0.1: + /express/4.18.2_supports-color@6.1.0: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1_supports-color@6.1.0 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9_supports-color@6.1.0 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0_supports-color@6.1.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0_supports-color@6.1.0 + serve-static: 1.15.0_supports-color@6.1.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /extend-shallow/2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} dependencies: is-extendable: 0.1.1 dev: true - /extend-shallow@3.0.2: + /extend-shallow/3.0.2: resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} engines: {node: '>=0.10.0'} dependencies: @@ -5720,7 +5761,7 @@ packages: is-extendable: 1.0.1 dev: true - /external-editor@3.1.0: + /external-editor/3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} dependencies: @@ -5728,31 +5769,31 @@ packages: iconv-lite: 0.4.24 tmp: 0.0.33 - /extglob@2.0.4(supports-color@6.1.0): + /extglob/2.0.4_supports-color@6.1.0: resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} engines: {node: '>=0.10.0'} dependencies: array-unique: 0.3.2 define-property: 1.0.0 - expand-brackets: 2.1.4(supports-color@6.1.0) + expand-brackets: 2.1.4_supports-color@6.1.0 extend-shallow: 2.0.1 fragment-cache: 0.2.1 regex-not: 1.0.2 - snapdragon: 0.8.2(supports-color@6.1.0) + snapdragon: 0.8.2_supports-color@6.1.0 to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true - /fast-deep-equal@3.1.3: + /fast-deep-equal/3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-diff@1.2.0: + /fast-diff/1.2.0: resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} dev: true - /fast-glob@3.2.12: + /fast-glob/3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} engines: {node: '>=8.6.0'} dependencies: @@ -5763,56 +5804,56 @@ packages: micromatch: 4.0.5 dev: true - /fast-json-stable-stringify@2.1.0: + /fast-json-stable-stringify/2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true - /fast-levenshtein@2.0.6: + /fast-levenshtein/2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fast-redact@3.1.2: + /fast-redact/3.1.2: resolution: {integrity: sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==} engines: {node: '>=6'} dev: true - /fast-safe-stringify@2.1.1: + /fast-safe-stringify/2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true - /fastq@1.15.0: + /fastq/1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 dev: true - /faye-websocket@0.11.4: + /faye-websocket/0.11.4: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} engines: {node: '>=0.8.0'} dependencies: websocket-driver: 0.7.4 dev: true - /fb-watchman@2.0.2: + /fb-watchman/2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 dev: true - /figures@3.2.0: + /figures/3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} dependencies: escape-string-regexp: 1.0.5 - /file-entry-cache@6.0.1: + /file-entry-cache/6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.0.4 dev: true - /fill-range@4.0.0: + /fill-range/4.0.0: resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} engines: {node: '>=0.10.0'} dependencies: @@ -5822,17 +5863,17 @@ packages: to-regex-range: 2.1.1 dev: true - /fill-range@7.0.1: + /fill-range/7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - /finalhandler@1.2.0(supports-color@6.1.0): + /finalhandler/1.2.0: resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} engines: {node: '>= 0.8'} dependencies: - debug: 2.6.9(supports-color@6.1.0) + debug: 2.6.9 encodeurl: 1.0.2 escape-html: 1.0.3 on-finished: 2.4.1 @@ -5843,7 +5884,22 @@ packages: - supports-color dev: true - /find-cache-dir@3.3.2: + /finalhandler/1.2.0_supports-color@6.1.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9_supports-color@6.1.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /find-cache-dir/3.3.2: resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} engines: {node: '>=8'} dependencies: @@ -5852,32 +5908,32 @@ packages: pkg-dir: 4.2.0 dev: true - /find-node-modules@2.1.3: + /find-node-modules/2.1.3: resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==} dependencies: findup-sync: 4.0.0 merge: 2.1.1 dev: true - /find-replace@3.0.0: + /find-replace/3.0.0: resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} engines: {node: '>=4.0.0'} dependencies: array-back: 3.1.0 dev: true - /find-root@1.1.0: + /find-root/1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} dev: true - /find-up@3.0.0: + /find-up/3.0.0: resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} engines: {node: '>=6'} dependencies: locate-path: 3.0.0 dev: true - /find-up@4.1.0: + /find-up/4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} dependencies: @@ -5885,7 +5941,7 @@ packages: path-exists: 4.0.0 dev: true - /find-up@5.0.0: + /find-up/5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} dependencies: @@ -5893,7 +5949,7 @@ packages: path-exists: 4.0.0 dev: true - /findup-sync@4.0.0: + /findup-sync/4.0.0: resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==} engines: {node: '>= 8'} dependencies: @@ -5903,7 +5959,7 @@ packages: resolve-dir: 1.0.1 dev: true - /flat-cache@3.0.4: + /flat-cache/3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: @@ -5911,11 +5967,11 @@ packages: rimraf: 3.0.2 dev: true - /flatted@3.2.7: + /flatted/3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true - /follow-redirects@1.15.2(debug@4.3.4): + /follow-redirects/1.15.2_debug@4.3.4: resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} engines: {node: '>=4.0'} peerDependencies: @@ -5924,21 +5980,21 @@ packages: debug: optional: true dependencies: - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4_supports-color@6.1.0 dev: true - /for-each@0.3.3: + /for-each/0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 dev: true - /for-in@1.0.2: + /for-in/1.0.2: resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} engines: {node: '>=0.10.0'} dev: true - /form-data@3.0.1: + /form-data/3.0.1: resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} engines: {node: '>= 6'} dependencies: @@ -5947,7 +6003,7 @@ packages: mime-types: 2.1.35 dev: true - /form-data@4.0.0: + /form-data/4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} dependencies: @@ -5956,7 +6012,7 @@ packages: mime-types: 2.1.35 dev: true - /formdata-node@4.4.1: + /formdata-node/4.4.1: resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} engines: {node: '>= 12.20'} dependencies: @@ -5964,24 +6020,24 @@ packages: web-streams-polyfill: 4.0.0-beta.3 dev: false - /forwarded@0.2.0: + /forwarded/0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} dev: true - /fragment-cache@0.2.1: + /fragment-cache/0.2.1: resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} engines: {node: '>=0.10.0'} dependencies: map-cache: 0.2.2 dev: true - /fresh@0.5.2: + /fresh/0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} dev: true - /fs-extra@10.1.0: + /fs-extra/10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} dependencies: @@ -5990,7 +6046,7 @@ packages: universalify: 2.0.0 dev: true - /fs-extra@9.1.0: + /fs-extra/9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} dependencies: @@ -6000,26 +6056,26 @@ packages: universalify: 2.0.0 dev: true - /fs-monkey@1.0.3: + /fs-monkey/1.0.3: resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} dev: true - /fs-readdir-recursive@1.1.0: + /fs-readdir-recursive/1.1.0: resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} dev: true - /fs-teardown@0.3.2: + /fs-teardown/0.3.2: resolution: {integrity: sha512-5xJQGMsGjHdZJ5yw/eyZEkAIHYwQQA6T34PfXUCl5JOeizfLWnz3gBEVfEidgrnnYZKTBW3L7aPrB3aI8f0Vqw==} dependencies: fs-extra: 10.1.0 outvariant: 1.4.0 dev: true - /fs.realpath@1.0.0: + /fs.realpath/1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /fsevents@2.1.3: + /fsevents/2.1.3: resolution: {integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] @@ -6027,7 +6083,7 @@ packages: requiresBuild: true optional: true - /fsevents@2.3.2: + /fsevents/2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] @@ -6035,11 +6091,11 @@ packages: dev: true optional: true - /function-bind@1.1.1: + /function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true - /function.prototype.name@1.1.5: + /function.prototype.name/1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} engines: {node: '>= 0.4'} dependencies: @@ -6049,24 +6105,24 @@ packages: functions-have-names: 1.2.3 dev: true - /functional-red-black-tree@1.0.1: + /functional-red-black-tree/1.0.1: resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} dev: true - /functions-have-names@1.2.3: + /functions-have-names/1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true - /gensync@1.0.0-beta.2: + /gensync/1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} dev: true - /get-caller-file@2.0.5: + /get-caller-file/2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - /get-intrinsic@1.2.0: + /get-intrinsic/1.2.0: resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} dependencies: function-bind: 1.1.1 @@ -6074,24 +6130,24 @@ packages: has-symbols: 1.0.3 dev: true - /get-package-type@0.1.0: + /get-package-type/0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} dev: true - /get-stream@4.1.0: + /get-stream/4.1.0: resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} engines: {node: '>=6'} dependencies: pump: 3.0.0 dev: true - /get-stream@6.0.1: + /get-stream/6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} dev: true - /get-symbol-description@1.0.0: + /get-symbol-description/1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: @@ -6099,12 +6155,12 @@ packages: get-intrinsic: 1.2.0 dev: true - /get-value@2.0.6: + /get-value/2.0.6: resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} engines: {node: '>=0.10.0'} dev: true - /git-log-parser@1.2.0: + /git-log-parser/1.2.0: resolution: {integrity: sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==} dependencies: argv-formatter: 1.0.0 @@ -6115,7 +6171,7 @@ packages: traverse: 0.6.7 dev: true - /git-raw-commits@2.0.11: + /git-raw-commits/2.0.11: resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} engines: {node: '>=10'} hasBin: true @@ -6127,17 +6183,17 @@ packages: through2: 4.0.2 dev: true - /glob-parent@5.1.2: + /glob-parent/5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - /glob-to-regexp@0.4.1: + /glob-to-regexp/0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob@7.1.6: + /glob/7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} dependencies: fs.realpath: 1.0.0 @@ -6148,7 +6204,7 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob@7.2.3: + /glob/7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 @@ -6159,7 +6215,7 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob@9.3.5: + /glob/9.3.5: resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} engines: {node: '>=16 || 14 >=14.17'} dependencies: @@ -6169,14 +6225,14 @@ packages: path-scurry: 1.6.4 dev: true - /global-dirs@0.1.1: + /global-dirs/0.1.1: resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} engines: {node: '>=4'} dependencies: ini: 1.3.8 dev: true - /global-modules@1.0.0: + /global-modules/1.0.0: resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} engines: {node: '>=0.10.0'} dependencies: @@ -6185,7 +6241,7 @@ packages: resolve-dir: 1.0.1 dev: true - /global-prefix@1.0.2: + /global-prefix/1.0.2: resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} engines: {node: '>=0.10.0'} dependencies: @@ -6196,26 +6252,26 @@ packages: which: 1.3.1 dev: true - /globals@11.12.0: + /globals/11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} dev: true - /globals@13.20.0: + /globals/13.20.0: resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true - /globalthis@1.0.3: + /globalthis/1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.0 dev: true - /globby@11.1.0: + /globby/11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} dependencies: @@ -6227,7 +6283,7 @@ packages: slash: 3.0.0 dev: true - /globby@6.1.0: + /globby/6.1.0: resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} engines: {node: '>=0.10.0'} dependencies: @@ -6238,71 +6294,71 @@ packages: pinkie-promise: 2.0.1 dev: true - /gopd@1.0.1: + /gopd/1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.0 dev: true - /graceful-fs@4.2.11: + /graceful-fs/4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true - /grapheme-splitter@1.0.4: + /grapheme-splitter/1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true - /graphql@16.6.0: + /graphql/16.6.0: resolution: {integrity: sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} dev: false - /handle-thing@2.0.1: + /handle-thing/2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} dev: true - /hard-rejection@2.1.0: + /hard-rejection/2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} dev: true - /has-bigints@1.0.2: + /has-bigints/1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true - /has-flag@3.0.0: + /has-flag/3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} dev: true - /has-flag@4.0.0: + /has-flag/4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-property-descriptors@1.0.0: + /has-property-descriptors/1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: get-intrinsic: 1.2.0 dev: true - /has-proto@1.0.1: + /has-proto/1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} dev: true - /has-symbols@1.0.3: + /has-symbols/1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: true - /has-tostringtag@1.0.0: + /has-tostringtag/1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /has-value@0.3.1: + /has-value/0.3.1: resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} engines: {node: '>=0.10.0'} dependencies: @@ -6311,7 +6367,7 @@ packages: isobject: 2.1.0 dev: true - /has-value@1.0.0: + /has-value/1.0.0: resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} engines: {node: '>=0.10.0'} dependencies: @@ -6320,12 +6376,12 @@ packages: isobject: 3.0.1 dev: true - /has-values@0.1.4: + /has-values/0.1.4: resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} engines: {node: '>=0.10.0'} dev: true - /has-values@1.0.0: + /has-values/1.0.0: resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} engines: {node: '>=0.10.0'} dependencies: @@ -6333,35 +6389,35 @@ packages: kind-of: 4.0.0 dev: true - /has@1.0.3: + /has/1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 dev: true - /headers-polyfill@3.1.2: + /headers-polyfill/3.1.2: resolution: {integrity: sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==} - /homedir-polyfill@1.0.3: + /homedir-polyfill/1.0.3: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} dependencies: parse-passwd: 1.0.0 dev: true - /hosted-git-info@2.8.9: + /hosted-git-info/2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true - /hosted-git-info@4.1.0: + /hosted-git-info/4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} dependencies: lru-cache: 6.0.0 dev: true - /hpack.js@2.1.6: + /hpack.js/2.1.6: resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} dependencies: inherits: 2.0.4 @@ -6370,22 +6426,22 @@ packages: wbuf: 1.7.3 dev: true - /html-encoding-sniffer@3.0.0: + /html-encoding-sniffer/3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} dependencies: whatwg-encoding: 2.0.0 dev: true - /html-entities@1.4.0: + /html-entities/1.4.0: resolution: {integrity: sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==} dev: true - /html-escaper@2.0.2: + /html-escaper/2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - /http-assert@1.5.0: + /http-assert/1.5.0: resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} engines: {node: '>= 0.8'} dependencies: @@ -6393,11 +6449,11 @@ packages: http-errors: 1.8.1 dev: true - /http-deceiver@1.2.7: + /http-deceiver/1.2.7: resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} dev: true - /http-errors@1.6.3: + /http-errors/1.6.3: resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} engines: {node: '>= 0.6'} dependencies: @@ -6407,7 +6463,7 @@ packages: statuses: 1.5.0 dev: true - /http-errors@1.8.1: + /http-errors/1.8.1: resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} engines: {node: '>= 0.6'} dependencies: @@ -6418,7 +6474,7 @@ packages: toidentifier: 1.0.1 dev: true - /http-errors@2.0.0: + /http-errors/2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} dependencies: @@ -6429,92 +6485,92 @@ packages: toidentifier: 1.0.1 dev: true - /http-parser-js@0.5.8: + /http-parser-js/0.5.8: resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} dev: true - /http-proxy-agent@5.0.0: + /http-proxy-agent/5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true - /http-proxy-middleware@0.19.1(debug@4.3.4)(supports-color@6.1.0): + /http-proxy-middleware/0.19.1_tmpgdztspuwvsxzgjkhoqk7duq: resolution: {integrity: sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==} engines: {node: '>=4.0.0'} dependencies: - http-proxy: 1.18.1(debug@4.3.4) + http-proxy: 1.18.1_debug@4.3.4 is-glob: 4.0.3 lodash: 4.17.21 - micromatch: 3.1.10(supports-color@6.1.0) + micromatch: 3.1.10_supports-color@6.1.0 transitivePeerDependencies: - debug - supports-color dev: true - /http-proxy@1.18.1(debug@4.3.4): + /http-proxy/1.18.1_debug@4.3.4: resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.2(debug@4.3.4) + follow-redirects: 1.15.2_debug@4.3.4 requires-port: 1.0.0 transitivePeerDependencies: - debug dev: true - /https-proxy-agent@5.0.1: + /https-proxy-agent/5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true - /human-signals@2.1.0: + /human-signals/2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} dev: true - /human-signals@4.3.1: + /human-signals/4.3.1: resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} engines: {node: '>=14.18.0'} dev: true - /iconv-lite@0.4.24: + /iconv-lite/0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 - /iconv-lite@0.6.3: + /iconv-lite/0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 dev: true - /ieee754@1.2.1: + /ieee754/1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - /ignore@4.0.6: + /ignore/4.0.6: resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} engines: {node: '>= 4'} dev: true - /ignore@5.2.4: + /ignore/5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} dev: true - /import-fresh@3.3.0: + /import-fresh/3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} dependencies: @@ -6522,7 +6578,7 @@ packages: resolve-from: 4.0.0 dev: true - /import-local@2.0.0: + /import-local/2.0.0: resolution: {integrity: sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==} engines: {node: '>=6'} hasBin: true @@ -6531,7 +6587,7 @@ packages: resolve-cwd: 2.0.0 dev: true - /import-local@3.1.0: + /import-local/3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} hasBin: true @@ -6540,35 +6596,35 @@ packages: resolve-cwd: 3.0.0 dev: true - /imurmurhash@0.1.4: + /imurmurhash/0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} dev: true - /indent-string@4.0.0: + /indent-string/4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} dev: true - /inflight@1.0.6: + /inflight/1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true - /inherits@2.0.3: + /inherits/2.0.3: resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} dev: true - /inherits@2.0.4: + /inherits/2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /ini@1.3.8: + /ini/1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true - /inquirer@8.2.5: + /inquirer/8.2.5: resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} engines: {node: '>=12.0.0'} dependencies: @@ -6588,7 +6644,7 @@ packages: through: 2.3.8 wrap-ansi: 7.0.0 - /internal-ip@4.3.0: + /internal-ip/4.3.0: resolution: {integrity: sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==} engines: {node: '>=6'} dependencies: @@ -6596,7 +6652,7 @@ packages: ipaddr.js: 1.9.1 dev: true - /internal-slot@1.0.5: + /internal-slot/1.0.5: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} dependencies: @@ -6605,40 +6661,40 @@ packages: side-channel: 1.0.4 dev: true - /ip-regex@2.1.0: + /ip-regex/2.1.0: resolution: {integrity: sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==} engines: {node: '>=4'} dev: true - /ip@1.1.8: + /ip/1.1.8: resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==} dev: true - /ipaddr.js@1.9.1: + /ipaddr.js/1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} dev: true - /is-absolute-url@3.0.3: + /is-absolute-url/3.0.3: resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} engines: {node: '>=8'} dev: true - /is-accessor-descriptor@0.1.6: + /is-accessor-descriptor/0.1.6: resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /is-accessor-descriptor@1.0.0: + /is-accessor-descriptor/1.0.0: resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} engines: {node: '>=0.10.0'} dependencies: kind-of: 6.0.3 dev: true - /is-arguments@1.1.1: + /is-arguments/1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: @@ -6646,7 +6702,7 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-array-buffer@3.0.2: + /is-array-buffer/3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: call-bind: 1.0.2 @@ -6654,23 +6710,23 @@ packages: is-typed-array: 1.1.10 dev: true - /is-arrayish@0.2.1: + /is-arrayish/0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true - /is-bigint@1.0.4: + /is-bigint/1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 dev: true - /is-binary-path@2.1.0: + /is-binary-path/2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 - /is-boolean-object@1.1.2: + /is-boolean-object/1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: @@ -6678,50 +6734,50 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-buffer@1.1.6: + /is-buffer/1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: true - /is-builtin-module@3.2.1: + /is-builtin-module/3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} dependencies: builtin-modules: 3.3.0 dev: true - /is-callable@1.2.7: + /is-callable/1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} dev: true - /is-core-module@2.12.0: + /is-core-module/2.12.0: resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} dependencies: has: 1.0.3 dev: true - /is-data-descriptor@0.1.4: + /is-data-descriptor/0.1.4: resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /is-data-descriptor@1.0.0: + /is-data-descriptor/1.0.0: resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} engines: {node: '>=0.10.0'} dependencies: kind-of: 6.0.3 dev: true - /is-date-object@1.0.5: + /is-date-object/1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-descriptor@0.1.6: + /is-descriptor/0.1.6: resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} engines: {node: '>=0.10.0'} dependencies: @@ -6730,7 +6786,7 @@ packages: kind-of: 5.1.0 dev: true - /is-descriptor@1.0.2: + /is-descriptor/1.0.2: resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==} engines: {node: '>=0.10.0'} dependencies: @@ -6739,136 +6795,136 @@ packages: kind-of: 6.0.3 dev: true - /is-docker@2.2.1: + /is-docker/2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true dev: true - /is-extendable@0.1.1: + /is-extendable/0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} dev: true - /is-extendable@1.0.1: + /is-extendable/1.0.1: resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} engines: {node: '>=0.10.0'} dependencies: is-plain-object: 2.0.4 dev: true - /is-extglob@2.1.1: + /is-extglob/2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - /is-fullwidth-code-point@2.0.0: + /is-fullwidth-code-point/2.0.0: resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} engines: {node: '>=4'} dev: true - /is-fullwidth-code-point@3.0.0: + /is-fullwidth-code-point/3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - /is-fullwidth-code-point@4.0.0: + /is-fullwidth-code-point/4.0.0: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} dev: true - /is-generator-fn@2.1.0: + /is-generator-fn/2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} dev: true - /is-generator-function@1.0.10: + /is-generator-function/1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-glob@4.0.3: + /is-glob/4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - /is-interactive@1.0.0: + /is-interactive/1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} - /is-module@1.0.0: + /is-module/1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} dev: true - /is-negative-zero@2.0.2: + /is-negative-zero/2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} dev: true - /is-node-process@1.2.0: + /is-node-process/1.2.0: resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} dev: false - /is-number-object@1.0.7: + /is-number-object/1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-number@3.0.0: + /is-number/3.0.0: resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /is-number@7.0.0: + /is-number/7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - /is-obj@2.0.0: + /is-obj/2.0.0: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} dev: true - /is-path-cwd@2.2.0: + /is-path-cwd/2.2.0: resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} engines: {node: '>=6'} dev: true - /is-path-in-cwd@2.1.0: + /is-path-in-cwd/2.1.0: resolution: {integrity: sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==} engines: {node: '>=6'} dependencies: is-path-inside: 2.1.0 dev: true - /is-path-inside@2.1.0: + /is-path-inside/2.1.0: resolution: {integrity: sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==} engines: {node: '>=6'} dependencies: path-is-inside: 1.0.2 dev: true - /is-plain-obj@1.1.0: + /is-plain-obj/1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} dev: true - /is-plain-object@2.0.4: + /is-plain-object/2.0.4: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true - /is-potential-custom-element-name@1.0.1: + /is-potential-custom-element-name/1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true - /is-regex@1.1.4: + /is-regex/1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: @@ -6876,49 +6932,49 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-shared-array-buffer@1.0.2: + /is-shared-array-buffer/1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.2 dev: true - /is-stream@1.1.0: + /is-stream/1.1.0: resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} engines: {node: '>=0.10.0'} dev: true - /is-stream@2.0.1: + /is-stream/2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} dev: true - /is-stream@3.0.0: + /is-stream/3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /is-string@1.0.7: + /is-string/1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-symbol@1.0.4: + /is-symbol/1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /is-text-path@1.0.1: + /is-text-path/1.0.1: resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} engines: {node: '>=0.10.0'} dependencies: text-extensions: 1.9.0 dev: true - /is-typed-array@1.1.10: + /is-typed-array/1.1.10: resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} engines: {node: '>= 0.4'} dependencies: @@ -6929,63 +6985,63 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-unicode-supported@0.1.0: + /is-unicode-supported/0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} - /is-utf8@0.2.1: + /is-utf8/0.2.1: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} dev: true - /is-weakref@1.0.2: + /is-weakref/1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 dev: true - /is-windows@1.0.2: + /is-windows/1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} dev: true - /is-wsl@1.1.0: + /is-wsl/1.1.0: resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} engines: {node: '>=4'} dev: true - /is-wsl@2.2.0: + /is-wsl/2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} dependencies: is-docker: 2.2.1 dev: true - /isarray@1.0.0: + /isarray/1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true - /isbinaryfile@5.0.0: + /isbinaryfile/5.0.0: resolution: {integrity: sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==} engines: {node: '>= 14.0.0'} dev: true - /isexe@2.0.0: + /isexe/2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /isobject@2.1.0: + /isobject/2.1.0: resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} engines: {node: '>=0.10.0'} dependencies: isarray: 1.0.0 dev: true - /isobject@3.0.1: + /isobject/3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} dev: true - /issue-parser@6.0.0: + /issue-parser/6.0.0: resolution: {integrity: sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==} engines: {node: '>=10.13'} dependencies: @@ -6996,12 +7052,12 @@ packages: lodash.uniqby: 4.7.0 dev: true - /istanbul-lib-coverage@3.2.0: + /istanbul-lib-coverage/3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} dev: true - /istanbul-lib-instrument@5.2.1: + /istanbul-lib-instrument/5.2.1: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: @@ -7014,7 +7070,7 @@ packages: - supports-color dev: true - /istanbul-lib-report@3.0.0: + /istanbul-lib-report/3.0.0: resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} engines: {node: '>=8'} dependencies: @@ -7023,18 +7079,18 @@ packages: supports-color: 7.2.0 dev: true - /istanbul-lib-source-maps@4.0.1: + /istanbul-lib-source-maps/4.0.1: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 istanbul-lib-coverage: 3.2.0 source-map: 0.6.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-reports@3.1.5: + /istanbul-reports/3.1.5: resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} engines: {node: '>=8'} dependencies: @@ -7042,7 +7098,7 @@ packages: istanbul-lib-report: 3.0.0 dev: true - /jest-changed-files@29.5.0: + /jest-changed-files/29.5.0: resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7050,7 +7106,7 @@ packages: p-limit: 3.1.0 dev: true - /jest-circus@29.5.0: + /jest-circus/29.5.0: resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7078,7 +7134,7 @@ packages: - supports-color dev: true - /jest-cli@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): + /jest-cli/29.5.0_rrli7kzx2akox3oq6aahu3rvje: resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -7088,14 +7144,14 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.5.0(ts-node@10.9.1) + '@jest/core': 29.5.0_ts-node@10.9.1 '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 chalk: 4.1.1 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + jest-config: 29.5.0_rrli7kzx2akox3oq6aahu3rvje jest-util: 29.5.0 jest-validate: 29.5.0 prompts: 2.4.2 @@ -7106,7 +7162,7 @@ packages: - ts-node dev: true - /jest-config@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): + /jest-config/29.5.0_rrli7kzx2akox3oq6aahu3rvje: resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -7122,7 +7178,7 @@ packages: '@jest/test-sequencer': 29.5.0 '@jest/types': 29.5.0 '@types/node': 18.15.11 - babel-jest: 29.5.0(@babel/core@7.21.4) + babel-jest: 29.5.0_@babel+core@7.21.4 chalk: 4.1.1 ci-info: 3.8.0 deepmerge: 4.3.1 @@ -7141,12 +7197,12 @@ packages: pretty-format: 29.5.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4) + ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e transitivePeerDependencies: - supports-color dev: true - /jest-diff@29.5.0: + /jest-diff/29.5.0: resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7156,14 +7212,14 @@ packages: pretty-format: 29.5.0 dev: true - /jest-docblock@29.4.3: + /jest-docblock/29.4.3: resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 dev: true - /jest-each@29.5.0: + /jest-each/29.5.0: resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7174,7 +7230,7 @@ packages: pretty-format: 29.5.0 dev: true - /jest-environment-jsdom@29.5.0: + /jest-environment-jsdom/29.5.0: resolution: {integrity: sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -7197,7 +7253,7 @@ packages: - utf-8-validate dev: true - /jest-environment-node@29.5.0: + /jest-environment-node/29.5.0: resolution: {integrity: sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7209,12 +7265,12 @@ packages: jest-util: 29.5.0 dev: true - /jest-get-type@29.4.3: + /jest-get-type/29.4.3: resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-haste-map@29.5.0: + /jest-haste-map/29.5.0: resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7233,7 +7289,7 @@ packages: fsevents: 2.3.2 dev: true - /jest-leak-detector@29.5.0: + /jest-leak-detector/29.5.0: resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7241,7 +7297,7 @@ packages: pretty-format: 29.5.0 dev: true - /jest-matcher-utils@29.5.0: + /jest-matcher-utils/29.5.0: resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7251,7 +7307,7 @@ packages: pretty-format: 29.5.0 dev: true - /jest-message-util@29.5.0: + /jest-message-util/29.5.0: resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7266,7 +7322,7 @@ packages: stack-utils: 2.0.6 dev: true - /jest-mock@29.5.0: + /jest-mock/29.5.0: resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7275,7 +7331,7 @@ packages: jest-util: 29.5.0 dev: true - /jest-pnp-resolver@1.2.3(jest-resolve@29.5.0): + /jest-pnp-resolver/1.2.3_jest-resolve@29.5.0: resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: @@ -7287,12 +7343,12 @@ packages: jest-resolve: 29.5.0 dev: true - /jest-regex-util@29.4.3: + /jest-regex-util/29.4.3: resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-resolve-dependencies@29.5.0: + /jest-resolve-dependencies/29.5.0: resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7302,14 +7358,14 @@ packages: - supports-color dev: true - /jest-resolve@29.5.0: + /jest-resolve/29.5.0: resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.1 graceful-fs: 4.2.11 jest-haste-map: 29.5.0 - jest-pnp-resolver: 1.2.3(jest-resolve@29.5.0) + jest-pnp-resolver: 1.2.3_jest-resolve@29.5.0 jest-util: 29.5.0 jest-validate: 29.5.0 resolve: 1.22.2 @@ -7317,7 +7373,7 @@ packages: slash: 3.0.0 dev: true - /jest-runner@29.5.0: + /jest-runner/29.5.0: resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7346,7 +7402,7 @@ packages: - supports-color dev: true - /jest-runtime@29.5.0: + /jest-runtime/29.5.0: resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7376,14 +7432,14 @@ packages: - supports-color dev: true - /jest-snapshot@29.5.0: + /jest-snapshot/29.5.0: resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.21.4 '@babel/generator': 7.21.4 - '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.4) - '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.4) + '@babel/plugin-syntax-jsx': 7.21.4_@babel+core@7.21.4 + '@babel/plugin-syntax-typescript': 7.21.4_@babel+core@7.21.4 '@babel/traverse': 7.21.4 '@babel/types': 7.21.4 '@jest/expect-utils': 29.5.0 @@ -7391,7 +7447,7 @@ packages: '@jest/types': 29.5.0 '@types/babel__traverse': 7.18.3 '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.4) + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.4 chalk: 4.1.1 expect: 29.5.0 graceful-fs: 4.2.11 @@ -7407,7 +7463,7 @@ packages: - supports-color dev: true - /jest-util@29.5.0: + /jest-util/29.5.0: resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7419,7 +7475,7 @@ packages: picomatch: 2.3.1 dev: true - /jest-validate@29.5.0: + /jest-validate/29.5.0: resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7431,7 +7487,7 @@ packages: pretty-format: 29.5.0 dev: true - /jest-watcher@29.5.0: + /jest-watcher/29.5.0: resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7445,7 +7501,7 @@ packages: string-length: 4.0.2 dev: true - /jest-worker@27.5.1: + /jest-worker/27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: @@ -7454,7 +7510,7 @@ packages: supports-color: 8.1.1 dev: true - /jest-worker@29.5.0: + /jest-worker/29.5.0: resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7464,7 +7520,7 @@ packages: supports-color: 8.1.1 dev: true - /jest@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): + /jest/29.5.0_rrli7kzx2akox3oq6aahu3rvje: resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -7474,31 +7530,31 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.5.0(ts-node@10.9.1) + '@jest/core': 29.5.0_ts-node@10.9.1 '@jest/types': 29.5.0 import-local: 3.1.0 - jest-cli: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + jest-cli: 29.5.0_rrli7kzx2akox3oq6aahu3rvje transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: true - /joycon@3.1.1: + /joycon/3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} dev: true - /js-levenshtein@1.1.6: + /js-levenshtein/1.1.6: resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} engines: {node: '>=0.10.0'} dev: false - /js-tokens@4.0.0: + /js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true - /js-yaml@3.14.1: + /js-yaml/3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true dependencies: @@ -7506,7 +7562,7 @@ packages: esprima: 4.0.1 dev: true - /js-yaml@4.1.0: + /js-yaml/4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: @@ -7514,7 +7570,7 @@ packages: dev: true optional: true - /jsdom@20.0.3: + /jsdom/20.0.3: resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} engines: {node: '>=14'} peerDependencies: @@ -7555,50 +7611,50 @@ packages: - utf-8-validate dev: true - /jsesc@0.5.0: + /jsesc/0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true dev: true - /jsesc@2.5.2: + /jsesc/2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true dev: true - /json-bigint@1.0.0: + /json-bigint/1.0.0: resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} dependencies: bignumber.js: 9.1.1 dev: true - /json-parse-even-better-errors@2.3.1: + /json-parse-even-better-errors/2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true - /json-schema-traverse@0.4.1: + /json-schema-traverse/0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true - /json-schema-traverse@1.0.0: + /json-schema-traverse/1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: true - /json-stable-stringify-without-jsonify@1.0.1: + /json-stable-stringify-without-jsonify/1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true - /json5@2.2.3: + /json5/2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true dev: true - /jsonc-parser@3.2.0: + /jsonc-parser/3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} dev: true - /jsonfile@6.1.0: + /jsonfile/6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.0 @@ -7606,56 +7662,56 @@ packages: graceful-fs: 4.2.11 dev: true - /jsonparse@1.3.1: + /jsonparse/1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} dev: true - /keygrip@1.1.0: + /keygrip/1.1.0: resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} engines: {node: '>= 0.6'} dependencies: tsscmp: 1.0.6 dev: true - /killable@1.0.1: + /killable/1.0.1: resolution: {integrity: sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==} dev: true - /kind-of@3.2.2: + /kind-of/3.2.2: resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} engines: {node: '>=0.10.0'} dependencies: is-buffer: 1.1.6 dev: true - /kind-of@4.0.0: + /kind-of/4.0.0: resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} engines: {node: '>=0.10.0'} dependencies: is-buffer: 1.1.6 dev: true - /kind-of@5.1.0: + /kind-of/5.1.0: resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} engines: {node: '>=0.10.0'} dev: true - /kind-of@6.0.3: + /kind-of/6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} dev: true - /kleur@3.0.3: + /kleur/3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} dev: true - /koa-compose@4.1.0: + /koa-compose/4.1.0: resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} dev: true - /koa-convert@2.0.0: + /koa-convert/2.0.0: resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} engines: {node: '>= 10'} dependencies: @@ -7663,34 +7719,34 @@ packages: koa-compose: 4.1.0 dev: true - /koa-etag@4.0.0: + /koa-etag/4.0.0: resolution: {integrity: sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==} dependencies: etag: 1.8.1 dev: true - /koa-send@5.0.1: + /koa-send/5.0.1: resolution: {integrity: sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==} engines: {node: '>= 8'} dependencies: - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 http-errors: 1.8.1 resolve-path: 1.4.0 transitivePeerDependencies: - supports-color dev: true - /koa-static@5.0.0: + /koa-static/5.0.0: resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==} engines: {node: '>= 7.6.0'} dependencies: - debug: 3.2.7(supports-color@6.1.0) + debug: 3.2.7 koa-send: 5.0.1 transitivePeerDependencies: - supports-color dev: true - /koa@2.14.2: + /koa/2.14.2: resolution: {integrity: sha512-VFI2bpJaodz6P7x2uyLiX6RLYpZmOJqNmoCst/Yyd7hQlszyPwG/I9CQJ63nOtKSxpt5M7NH67V6nJL2BwCl7g==} engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} dependencies: @@ -7699,7 +7755,7 @@ packages: content-disposition: 0.5.4 content-type: 1.0.5 cookies: 0.8.0 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 delegates: 1.0.0 depd: 2.0.0 destroy: 1.2.0 @@ -7721,17 +7777,17 @@ packages: - supports-color dev: true - /leven@2.1.0: + /leven/2.1.0: resolution: {integrity: sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==} engines: {node: '>=0.10.0'} dev: true - /leven@3.1.0: + /leven/3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} dev: true - /levn@0.3.0: + /levn/0.3.0: resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} engines: {node: '>= 0.8.0'} dependencies: @@ -7739,7 +7795,7 @@ packages: type-check: 0.3.2 dev: true - /levn@0.4.1: + /levn/0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} dependencies: @@ -7747,16 +7803,16 @@ packages: type-check: 0.4.0 dev: true - /lilconfig@2.1.0: + /lilconfig/2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} dev: true - /lines-and-columns@1.2.4: + /lines-and-columns/1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true - /lint-staged@13.2.1: + /lint-staged/13.2.1: resolution: {integrity: sha512-8gfzinVXoPfga5Dz/ZOn8I2GOhf81Wvs+KwbEXQn/oWZAvCVS2PivrXfVbFJc93zD16uC0neS47RXHIjXKYZQw==} engines: {node: ^14.13.1 || >=16.0.0} hasBin: true @@ -7764,7 +7820,7 @@ packages: chalk: 5.2.0 cli-truncate: 3.1.0 commander: 10.0.0 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 execa: 7.1.1 lilconfig: 2.1.0 listr2: 5.0.8 @@ -7779,7 +7835,7 @@ packages: - supports-color dev: true - /listr2@5.0.8: + /listr2/5.0.8: resolution: {integrity: sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==} engines: {node: ^14.13.1 || >=16.0.0} peerDependencies: @@ -7798,17 +7854,17 @@ packages: wrap-ansi: 7.0.0 dev: true - /load-tsconfig@0.2.5: + /load-tsconfig/0.2.5: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /loader-runner@4.3.0: + /loader-runner/4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} dev: true - /loader-utils@2.0.4: + /loader-utils/2.0.4: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} engines: {node: '>=8.9.0'} dependencies: @@ -7817,7 +7873,7 @@ packages: json5: 2.2.3 dev: true - /locate-path@3.0.0: + /locate-path/3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} dependencies: @@ -7825,89 +7881,89 @@ packages: path-exists: 3.0.0 dev: true - /locate-path@5.0.0: + /locate-path/5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} dependencies: p-locate: 4.1.0 dev: true - /locate-path@6.0.0: + /locate-path/6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} dependencies: p-locate: 5.0.0 dev: true - /lodash.assignwith@4.2.0: + /lodash.assignwith/4.2.0: resolution: {integrity: sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==} dev: true - /lodash.camelcase@4.3.0: + /lodash.camelcase/4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true - /lodash.capitalize@4.2.1: + /lodash.capitalize/4.2.1: resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} dev: true - /lodash.debounce@4.0.8: + /lodash.debounce/4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: true - /lodash.escaperegexp@4.1.2: + /lodash.escaperegexp/4.1.2: resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} dev: true - /lodash.isplainobject@4.0.6: + /lodash.isplainobject/4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} dev: true - /lodash.isstring@4.0.1: + /lodash.isstring/4.0.1: resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} dev: true - /lodash.map@4.6.0: + /lodash.map/4.6.0: resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==} dev: true - /lodash.merge@4.6.2: + /lodash.merge/4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true - /lodash.mergewith@4.6.2: + /lodash.mergewith/4.6.2: resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} dev: true optional: true - /lodash.sortby@4.7.0: + /lodash.sortby/4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} dev: true - /lodash.truncate@4.4.2: + /lodash.truncate/4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} dev: true - /lodash.uniq@4.5.0: + /lodash.uniq/4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} dev: true optional: true - /lodash.uniqby@4.7.0: + /lodash.uniqby/4.7.0: resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} dev: true - /lodash@4.17.21: + /lodash/4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - /log-symbols@4.1.0: + /log-symbols/4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} dependencies: chalk: 4.1.1 is-unicode-supported: 0.1.0 - /log-update@4.0.0: + /log-update/4.0.0: resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} engines: {node: '>=10'} dependencies: @@ -7917,93 +7973,93 @@ packages: wrap-ansi: 6.2.0 dev: true - /loglevel@1.8.1: + /loglevel/1.8.1: resolution: {integrity: sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==} engines: {node: '>= 0.6.0'} dev: true - /longest@2.0.1: + /longest/2.0.1: resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==} engines: {node: '>=0.10.0'} dev: true - /lru-cache@5.1.1: + /lru-cache/5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 dev: true - /lru-cache@6.0.0: + /lru-cache/6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 dev: true - /lru-cache@9.0.1: + /lru-cache/9.0.1: resolution: {integrity: sha512-C8QsKIN1UIXeOs3iWmiZ1lQY+EnKDojWd37fXy1aSbJvH4iSma1uy2OWuoB3m4SYRli5+CUjDv3Dij5DVoetmg==} engines: {node: 14 || >=16.14} dev: true - /make-dir@3.1.0: + /make-dir/3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} dependencies: semver: 6.3.0 dev: true - /make-error@1.3.6: + /make-error/1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /makeerror@1.0.12: + /makeerror/1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: tmpl: 1.0.5 dev: true - /map-cache@0.2.2: + /map-cache/0.2.2: resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} engines: {node: '>=0.10.0'} dev: true - /map-obj@1.0.1: + /map-obj/1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} dev: true - /map-obj@4.3.0: + /map-obj/4.3.0: resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} engines: {node: '>=8'} dev: true - /map-visit@1.0.0: + /map-visit/1.0.0: resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} engines: {node: '>=0.10.0'} dependencies: object-visit: 1.0.1 dev: true - /media-typer@0.3.0: + /media-typer/0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} dev: true - /memfs@3.5.0: + /memfs/3.5.0: resolution: {integrity: sha512-yK6o8xVJlQerz57kvPROwTMgx5WtGwC2ZxDtOUsnGl49rHjYkfQoPNZPCKH73VdLE1BwBu/+Fx/NL8NYMUw2aA==} engines: {node: '>= 4.0.0'} dependencies: fs-monkey: 1.0.3 dev: true - /memory-fs@0.4.1: + /memory-fs/0.4.1: resolution: {integrity: sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==} dependencies: errno: 0.1.8 readable-stream: 2.3.8 dev: true - /meow@8.1.2: + /meow/8.1.2: resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} engines: {node: '>=10'} dependencies: @@ -8020,50 +8076,50 @@ packages: yargs-parser: 20.2.9 dev: true - /merge-descriptors@1.0.1: + /merge-descriptors/1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} dev: true - /merge-stream@2.0.0: + /merge-stream/2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + /merge/2.1.1: + resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} dev: true - /merge@2.1.1: - resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} + /merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} dev: true - /methods@1.1.2: + /methods/1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} dev: true - /micromatch@3.1.10(supports-color@6.1.0): + /micromatch/3.1.10_supports-color@6.1.0: resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} engines: {node: '>=0.10.0'} dependencies: arr-diff: 4.0.0 array-unique: 0.3.2 - braces: 2.3.2(supports-color@6.1.0) + braces: 2.3.2_supports-color@6.1.0 define-property: 2.0.2 extend-shallow: 3.0.2 - extglob: 2.0.4(supports-color@6.1.0) + extglob: 2.0.4_supports-color@6.1.0 fragment-cache: 0.2.1 kind-of: 6.0.3 - nanomatch: 1.2.13(supports-color@6.1.0) + nanomatch: 1.2.13_supports-color@6.1.0 object.pick: 1.3.0 regex-not: 1.0.2 - snapdragon: 0.8.2(supports-color@6.1.0) + snapdragon: 0.8.2_supports-color@6.1.0 to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true - /micromatch@4.0.5: + /micromatch/4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: @@ -8071,62 +8127,62 @@ packages: picomatch: 2.3.1 dev: true - /mime-db@1.52.0: + /mime-db/1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} dev: true - /mime-types@2.1.35: + /mime-types/2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 dev: true - /mime@1.6.0: + /mime/1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} hasBin: true dev: true - /mime@2.6.0: + /mime/2.6.0: resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} engines: {node: '>=4.0.0'} hasBin: true dev: true - /mimic-fn@2.1.0: + /mimic-fn/2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - /mimic-fn@4.0.0: + /mimic-fn/4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} dev: true - /min-indent@1.0.1: + /min-indent/1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} dev: true - /minimalistic-assert@1.0.1: + /minimalistic-assert/1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} dev: true - /minimatch@3.1.2: + /minimatch/3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 dev: true - /minimatch@8.0.4: + /minimatch/8.0.4: resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 dev: true - /minimist-options@4.1.0: + /minimist-options/4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} dependencies: @@ -8135,25 +8191,25 @@ packages: kind-of: 6.0.3 dev: true - /minimist@1.2.7: + /minimist/1.2.7: resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} dev: true - /minimist@1.2.8: + /minimist/1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /minipass@4.2.8: + /minipass/4.2.8: resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} engines: {node: '>=8'} dev: true - /minipass@5.0.0: + /minipass/5.0.0: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} dev: true - /mixin-deep@1.3.2: + /mixin-deep/1.3.2: resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} engines: {node: '>=0.10.0'} dependencies: @@ -8161,35 +8217,35 @@ packages: is-extendable: 1.0.1 dev: true - /mkdirp@0.5.6: + /mkdirp/0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true dependencies: minimist: 1.2.8 dev: true - /mri@1.1.4: + /mri/1.1.4: resolution: {integrity: sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==} engines: {node: '>=4'} dev: true - /ms@2.0.0: + /ms/2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: true - /ms@2.1.2: + /ms/2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true - /ms@2.1.3: + /ms/2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true - /multicast-dns-service-types@1.1.0: + /multicast-dns-service-types/1.1.0: resolution: {integrity: sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==} dev: true - /multicast-dns@6.2.3: + /multicast-dns/6.2.3: resolution: {integrity: sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==} hasBin: true dependencies: @@ -8197,15 +8253,15 @@ packages: thunky: 1.1.0 dev: true - /mustache@4.2.0: + /mustache/4.2.0: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true dev: true - /mute-stream@0.0.8: + /mute-stream/0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - /mz@2.7.0: + /mz/2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: any-promise: 1.3.0 @@ -8213,11 +8269,11 @@ packages: thenify-all: 1.6.0 dev: true - /nanocolors@0.2.13: + /nanocolors/0.2.13: resolution: {integrity: sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==} dev: true - /nanomatch@1.2.13(supports-color@6.1.0): + /nanomatch/1.2.13_supports-color@6.1.0: resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} engines: {node: '>=0.10.0'} dependencies: @@ -8230,39 +8286,39 @@ packages: kind-of: 6.0.3 object.pick: 1.3.0 regex-not: 1.0.2 - snapdragon: 0.8.2(supports-color@6.1.0) + snapdragon: 0.8.2_supports-color@6.1.0 to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true - /natural-compare-lite@1.4.0: + /natural-compare-lite/1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} dev: true - /natural-compare@1.4.0: + /natural-compare/1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /negotiator@0.6.3: + /negotiator/0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} dev: true - /neo-async@2.6.2: + /neo-async/2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true - /nice-try@1.0.5: + /nice-try/1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} dev: true - /node-domexception@1.0.0: + /node-domexception/1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} dev: false - /node-fetch@2.6.7: + /node-fetch/2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} peerDependencies: @@ -8274,7 +8330,7 @@ packages: whatwg-url: 5.0.0 dev: true - /node-fetch@2.6.9: + /node-fetch/2.6.9: resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} engines: {node: 4.x || >=6.0.0} peerDependencies: @@ -8286,20 +8342,20 @@ packages: whatwg-url: 5.0.0 dev: false - /node-forge@0.10.0: + /node-forge/0.10.0: resolution: {integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==} engines: {node: '>= 6.0.0'} dev: true - /node-int64@0.4.0: + /node-int64/0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /node-releases@2.0.10: + /node-releases/2.0.10: resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} dev: true - /normalize-package-data@2.5.0: + /normalize-package-data/2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 @@ -8308,7 +8364,7 @@ packages: validate-npm-package-license: 3.0.4 dev: true - /normalize-package-data@3.0.3: + /normalize-package-data/3.0.3: resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} engines: {node: '>=10'} dependencies: @@ -8318,41 +8374,41 @@ packages: validate-npm-package-license: 3.0.4 dev: true - /normalize-path@3.0.0: + /normalize-path/3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - /npm-run-path@2.0.2: + /npm-run-path/2.0.2: resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} engines: {node: '>=4'} dependencies: path-key: 2.0.1 dev: true - /npm-run-path@4.0.1: + /npm-run-path/4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} dependencies: path-key: 3.1.1 dev: true - /npm-run-path@5.1.0: + /npm-run-path/5.1.0: resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 dev: true - /nwsapi@2.2.4: + /nwsapi/2.2.4: resolution: {integrity: sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==} dev: true - /object-assign@4.1.1: + /object-assign/4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} dev: true - /object-copy@0.1.0: + /object-copy/0.1.0: resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} engines: {node: '>=0.10.0'} dependencies: @@ -8361,11 +8417,11 @@ packages: kind-of: 3.2.2 dev: true - /object-inspect@1.12.3: + /object-inspect/1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} dev: true - /object-is@1.1.5: + /object-is/1.1.5: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} engines: {node: '>= 0.4'} dependencies: @@ -8373,19 +8429,19 @@ packages: define-properties: 1.2.0 dev: true - /object-keys@1.1.1: + /object-keys/1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} dev: true - /object-visit@1.0.1: + /object-visit/1.0.1: resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true - /object.assign@4.1.4: + /object.assign/4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: @@ -8395,7 +8451,7 @@ packages: object-keys: 1.1.1 dev: true - /object.getownpropertydescriptors@2.1.5: + /object.getownpropertydescriptors/2.1.5: resolution: {integrity: sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==} engines: {node: '>= 0.8'} dependencies: @@ -8405,57 +8461,57 @@ packages: es-abstract: 1.21.2 dev: true - /object.pick@1.3.0: + /object.pick/1.3.0: resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true - /obuf@1.1.2: + /obuf/1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} dev: true - /on-exit-leak-free@0.2.0: + /on-exit-leak-free/0.2.0: resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} dev: true - /on-finished@2.4.1: + /on-finished/2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} dependencies: ee-first: 1.1.1 dev: true - /on-headers@1.0.2: + /on-headers/1.0.2: resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} engines: {node: '>= 0.8'} dev: true - /once@1.4.0: + /once/1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 dev: true - /onetime@5.1.2: + /onetime/5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - /onetime@6.0.0: + /onetime/6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 dev: true - /only@0.0.2: + /only/0.0.2: resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} dev: true - /open@8.4.2: + /open/8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} dependencies: @@ -8464,14 +8520,14 @@ packages: is-wsl: 2.2.0 dev: true - /opn@5.5.0: + /opn/5.5.0: resolution: {integrity: sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==} engines: {node: '>=4'} dependencies: is-wsl: 1.1.0 dev: true - /optionator@0.8.3: + /optionator/0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} dependencies: @@ -8483,7 +8539,7 @@ packages: word-wrap: 1.2.3 dev: true - /optionator@0.9.1: + /optionator/0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} engines: {node: '>= 0.8.0'} dependencies: @@ -8495,7 +8551,7 @@ packages: word-wrap: 1.2.3 dev: true - /ora@5.4.1: + /ora/5.4.1: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} dependencies: @@ -8509,78 +8565,78 @@ packages: strip-ansi: 6.0.1 wcwidth: 1.0.1 - /os-tmpdir@1.0.2: + /os-tmpdir/1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - /outvariant@1.4.0: + /outvariant/1.4.0: resolution: {integrity: sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==} - /p-finally@1.0.0: + /p-finally/1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} dev: true - /p-limit@2.3.0: + /p-limit/2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} dependencies: p-try: 2.2.0 dev: true - /p-limit@3.1.0: + /p-limit/3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 dev: true - /p-locate@3.0.0: + /p-locate/3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} engines: {node: '>=6'} dependencies: p-limit: 2.3.0 dev: true - /p-locate@4.1.0: + /p-locate/4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} dependencies: p-limit: 2.3.0 dev: true - /p-locate@5.0.0: + /p-locate/5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} dependencies: p-limit: 3.1.0 dev: true - /p-map@2.1.0: + /p-map/2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} dev: true - /p-map@4.0.0: + /p-map/4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} dependencies: aggregate-error: 3.1.0 dev: true - /p-retry@3.0.1: + /p-retry/3.0.1: resolution: {integrity: sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==} engines: {node: '>=6'} dependencies: retry: 0.12.0 dev: true - /p-try@2.2.0: + /p-try/2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} dev: true - /page-with@0.6.1(@swc/core@1.3.49)(esbuild@0.17.16): + /page-with/0.6.1_57233mj27fjz7synoeubptyy7e: resolution: {integrity: sha512-5J58fSpc8CKonUWCPsh8b2LctFrNSOpXQ8O3tB+/iJvixOQf1qHp4+cDLiIVsl/WiuheXdZTzMcuR0KLQMaWcg==} dependencies: '@open-draft/until': 2.1.0 @@ -8588,14 +8644,14 @@ packages: '@types/express': 4.17.17 '@types/mustache': 4.2.2 '@types/uuid': 8.3.4 - debug: 4.3.4(supports-color@6.1.0) - express: 4.18.2(supports-color@6.1.0) + debug: 4.3.4 + express: 4.18.2 headers-polyfill: 3.1.2 memfs: 3.5.0 mustache: 4.2.0 playwright: 1.32.3 uuid: 8.3.2 - webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e webpack-merge: 5.8.0 transitivePeerDependencies: - '@swc/core' @@ -8605,14 +8661,14 @@ packages: - webpack-cli dev: true - /parent-module@1.0.1: + /parent-module/1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} dependencies: callsites: 3.1.0 dev: true - /parse-json@5.2.0: + /parse-json/5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: @@ -8622,70 +8678,70 @@ packages: lines-and-columns: 1.2.4 dev: true - /parse-passwd@1.0.0: + /parse-passwd/1.0.0: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} dev: true - /parse5@6.0.1: + /parse5/6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} dev: true - /parse5@7.1.2: + /parse5/7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: entities: 4.4.0 dev: true - /parseurl@1.3.3: + /parseurl/1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} dev: true - /pascalcase@0.1.1: + /pascalcase/0.1.1: resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} engines: {node: '>=0.10.0'} dev: true - /path-exists@3.0.0: + /path-exists/3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} dev: true - /path-exists@4.0.0: + /path-exists/4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} dev: true - /path-is-absolute@1.0.1: + /path-is-absolute/1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} dev: true - /path-is-inside@1.0.2: + /path-is-inside/1.0.2: resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} dev: true - /path-key@2.0.1: + /path-key/2.0.1: resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} engines: {node: '>=4'} dev: true - /path-key@3.1.1: + /path-key/3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} dev: true - /path-key@4.0.0: + /path-key/4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} dev: true - /path-parse@1.0.7: + /path-parse/1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-scurry@1.6.4: + /path-scurry/1.6.4: resolution: {integrity: sha512-Qp/9IHkdNiXJ3/Kon++At2nVpnhRiPq/aSvQN+H3U1WZbvNRK0RIQK/o4HMqPoXjpuGJUEWpHSs6Mnjxqh3TQg==} engines: {node: '>=16 || 14 >=14.17'} dependencies: @@ -8693,63 +8749,63 @@ packages: minipass: 5.0.0 dev: true - /path-to-regexp@0.1.7: + /path-to-regexp/0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: true - /path-to-regexp@6.2.1: + /path-to-regexp/6.2.1: resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} dev: false - /path-type@4.0.0: + /path-type/4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} dev: true - /picocolors@1.0.0: + /picocolors/1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true - /picomatch@2.3.1: + /picomatch/2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - /pidtree@0.6.0: + /pidtree/0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} hasBin: true dev: true - /pify@2.3.0: + /pify/2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} dev: true - /pify@4.0.1: + /pify/4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} dev: true - /pinkie-promise@2.0.1: + /pinkie-promise/2.0.1: resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} engines: {node: '>=0.10.0'} dependencies: pinkie: 2.0.4 dev: true - /pinkie@2.0.4: + /pinkie/2.0.4: resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} engines: {node: '>=0.10.0'} dev: true - /pino-abstract-transport@0.5.0: + /pino-abstract-transport/0.5.0: resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} dependencies: duplexify: 4.1.2 split2: 4.2.0 dev: true - /pino-pretty@7.6.1: + /pino-pretty/7.6.1: resolution: {integrity: sha512-H7N6ZYkiyrfwBGW9CSjx0uyO9Q2Lyt73881+OTYk8v3TiTdgN92QHrWlEq/LeWw5XtDP64jeSk3mnc6T+xX9/w==} hasBin: true dependencies: @@ -8768,11 +8824,11 @@ packages: strip-json-comments: 3.1.1 dev: true - /pino-std-serializers@4.0.0: + /pino-std-serializers/4.0.0: resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} dev: true - /pino@7.11.0: + /pino/7.11.0: resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} hasBin: true dependencies: @@ -8789,32 +8845,32 @@ packages: thread-stream: 0.15.2 dev: true - /pirates@4.0.5: + /pirates/4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} dev: true - /pkg-dir@3.0.0: + /pkg-dir/3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} engines: {node: '>=6'} dependencies: find-up: 3.0.0 dev: true - /pkg-dir@4.2.0: + /pkg-dir/4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} dependencies: find-up: 4.1.0 dev: true - /playwright-core@1.32.3: + /playwright-core/1.32.3: resolution: {integrity: sha512-SB+cdrnu74ZIn5Ogh/8278ngEh9NEEV0vR4sJFmK04h2iZpybfbqBY0bX6+BLYWVdV12JLLI+JEFtSnYgR+mWg==} engines: {node: '>=14'} hasBin: true dev: true - /playwright@1.32.3: + /playwright/1.32.3: resolution: {integrity: sha512-h/ylpgoj6l/EjkfUDyx8cdOlfzC96itPpPe8BXacFkqpw/YsuxkpPyVbzEq4jw+bAJh5FLgh31Ljg2cR6HV3uw==} engines: {node: '>=14'} hasBin: true @@ -8823,23 +8879,34 @@ packages: playwright-core: 1.32.3 dev: true - /portfinder@1.0.32(supports-color@6.1.0): + /portfinder/1.0.32: + resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} + engines: {node: '>= 0.12.0'} + dependencies: + async: 2.6.4 + debug: 3.2.7 + mkdirp: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: true + + /portfinder/1.0.32_supports-color@6.1.0: resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} dependencies: async: 2.6.4 - debug: 3.2.7(supports-color@6.1.0) + debug: 3.2.7_supports-color@6.1.0 mkdirp: 0.5.6 transitivePeerDependencies: - supports-color dev: true - /posix-character-classes@0.1.1: + /posix-character-classes/0.1.1: resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} engines: {node: '>=0.10.0'} dev: true - /postcss-load-config@3.1.4(ts-node@10.9.1): + /postcss-load-config/3.1.4_ts-node@10.9.1: resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -8852,34 +8919,34 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - ts-node: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4) + ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e yaml: 1.10.2 dev: true - /prelude-ls@1.1.2: + /prelude-ls/1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} dev: true - /prelude-ls@1.2.1: + /prelude-ls/1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} dev: true - /prettier-linter-helpers@1.0.0: + /prettier-linter-helpers/1.0.0: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} dependencies: fast-diff: 1.2.0 dev: true - /prettier@2.8.7: + /prettier/2.8.7: resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==} engines: {node: '>=10.13.0'} hasBin: true dev: true - /pretty-format@29.5.0: + /pretty-format/29.5.0: resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -8888,20 +8955,20 @@ packages: react-is: 18.2.0 dev: true - /process-nextick-args@2.0.1: + /process-nextick-args/2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true - /process-warning@1.0.0: + /process-warning/1.0.0: resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} dev: true - /progress@2.0.3: + /progress/2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} dev: true - /prompts@2.4.2: + /prompts/2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} dependencies: @@ -8909,7 +8976,7 @@ packages: sisteransi: 1.0.5 dev: true - /proxy-addr@2.0.7: + /proxy-addr/2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} dependencies: @@ -8917,81 +8984,81 @@ packages: ipaddr.js: 1.9.1 dev: true - /prr@1.0.1: + /prr/1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} dev: true - /psl@1.9.0: + /psl/1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true - /pump@3.0.0: + /pump/3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 dev: true - /punycode@1.3.2: + /punycode/1.3.2: resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} dev: true - /punycode@2.3.0: + /punycode/2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} dev: true - /pure-rand@6.0.1: + /pure-rand/6.0.1: resolution: {integrity: sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==} dev: true - /q@1.5.1: + /q/1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} dev: true - /qs@6.11.0: + /qs/6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.4 dev: true - /querystring@0.2.0: + /querystring/0.2.0: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. dev: true - /querystringify@2.2.0: + /querystringify/2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} dev: true - /queue-microtask@1.2.3: + /queue-microtask/1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true - /quick-format-unescaped@4.0.4: + /quick-format-unescaped/4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} dev: true - /quick-lru@4.0.1: + /quick-lru/4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} dev: true - /randombytes@2.1.0: + /randombytes/2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 dev: true - /range-parser@1.2.1: + /range-parser/1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} dev: true - /raw-body@2.5.1: + /raw-body/2.5.1: resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} engines: {node: '>= 0.8'} dependencies: @@ -9001,7 +9068,7 @@ packages: unpipe: 1.0.0 dev: true - /rc@1.2.8: + /rc/1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true dependencies: @@ -9011,11 +9078,11 @@ packages: strip-json-comments: 2.0.1 dev: true - /react-is@18.2.0: + /react-is/18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true - /read-pkg-up@7.0.1: + /read-pkg-up/7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} dependencies: @@ -9024,7 +9091,7 @@ packages: type-fest: 0.8.1 dev: true - /read-pkg@5.2.0: + /read-pkg/5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} dependencies: @@ -9034,7 +9101,7 @@ packages: type-fest: 0.6.0 dev: true - /readable-stream@2.3.8: + /readable-stream/2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: core-util-is: 1.0.3 @@ -9046,7 +9113,7 @@ packages: util-deprecate: 1.0.2 dev: true - /readable-stream@3.6.2: + /readable-stream/3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} dependencies: @@ -9054,18 +9121,18 @@ packages: string_decoder: 1.3.0 util-deprecate: 1.0.2 - /readdirp@3.4.0: + /readdirp/3.4.0: resolution: {integrity: sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 - /real-require@0.1.0: + /real-require/0.1.0: resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} engines: {node: '>= 12.13.0'} dev: true - /redent@3.0.0: + /redent/3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} dependencies: @@ -9073,28 +9140,28 @@ packages: strip-indent: 3.0.0 dev: true - /regenerate-unicode-properties@10.1.0: + /regenerate-unicode-properties/10.1.0: resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} engines: {node: '>=4'} dependencies: regenerate: 1.4.2 dev: true - /regenerate@1.4.2: + /regenerate/1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} dev: true - /regenerator-runtime@0.13.11: + /regenerator-runtime/0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} dev: true - /regenerator-transform@0.15.1: + /regenerator-transform/0.15.1: resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} dependencies: '@babel/runtime': 7.21.0 dev: true - /regex-not@1.0.2: + /regex-not/1.0.2: resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} engines: {node: '>=0.10.0'} dependencies: @@ -9102,7 +9169,7 @@ packages: safe-regex: 1.1.0 dev: true - /regexp.prototype.flags@1.4.3: + /regexp.prototype.flags/1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} engines: {node: '>= 0.4'} dependencies: @@ -9111,12 +9178,12 @@ packages: functions-have-names: 1.2.3 dev: true - /regexpp@3.2.0: + /regexpp/3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} dev: true - /regexpu-core@5.3.2: + /regexpu-core/5.3.2: resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} engines: {node: '>=4'} dependencies: @@ -9128,62 +9195,62 @@ packages: unicode-match-property-value-ecmascript: 2.1.0 dev: true - /registry-auth-token@4.2.2: + /registry-auth-token/4.2.2: resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==} engines: {node: '>=6.0.0'} dependencies: rc: 1.2.8 dev: true - /regjsparser@0.9.1: + /regjsparser/0.9.1: resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} hasBin: true dependencies: jsesc: 0.5.0 dev: true - /repeat-element@1.1.4: + /repeat-element/1.1.4: resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} engines: {node: '>=0.10.0'} dev: true - /repeat-string@1.6.1: + /repeat-string/1.6.1: resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} engines: {node: '>=0.10'} dev: true - /require-directory@2.1.1: + /require-directory/2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - /require-from-string@2.0.2: + /require-from-string/2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} dev: true - /require-main-filename@2.0.0: + /require-main-filename/2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true - /requires-port@1.0.0: + /requires-port/1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: true - /resolve-cwd@2.0.0: + /resolve-cwd/2.0.0: resolution: {integrity: sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==} engines: {node: '>=4'} dependencies: resolve-from: 3.0.0 dev: true - /resolve-cwd@3.0.0: + /resolve-cwd/3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 dev: true - /resolve-dir@1.0.1: + /resolve-dir/1.0.1: resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} engines: {node: '>=0.10.0'} dependencies: @@ -9191,29 +9258,29 @@ packages: global-modules: 1.0.0 dev: true - /resolve-from@3.0.0: + /resolve-from/3.0.0: resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} engines: {node: '>=4'} dev: true - /resolve-from@4.0.0: + /resolve-from/4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} dev: true - /resolve-from@5.0.0: + /resolve-from/5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} dev: true - /resolve-global@1.0.0: + /resolve-global/1.0.0: resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} engines: {node: '>=8'} dependencies: global-dirs: 0.1.1 dev: true - /resolve-path@1.4.0: + /resolve-path/1.4.0: resolution: {integrity: sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==} engines: {node: '>= 0.8'} dependencies: @@ -9221,17 +9288,17 @@ packages: path-is-absolute: 1.0.1 dev: true - /resolve-url@0.2.1: + /resolve-url/0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated dev: true - /resolve.exports@2.0.2: + /resolve.exports/2.0.2: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} dev: true - /resolve@1.22.2: + /resolve/1.22.2: resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true dependencies: @@ -9240,47 +9307,47 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /restore-cursor@3.1.0: + /restore-cursor/3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - /ret@0.1.15: + /ret/0.1.15: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} dev: true - /retry@0.12.0: + /retry/0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} dev: true - /reusify@1.0.4: + /reusify/1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rfdc@1.3.0: + /rfdc/1.3.0: resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} dev: true - /rimraf@2.7.1: + /rimraf/2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true dependencies: glob: 7.2.3 dev: true - /rimraf@3.0.2: + /rimraf/3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 dev: true - /rollup@2.79.1: + /rollup/2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} engines: {node: '>=10.0.0'} hasBin: true @@ -9288,7 +9355,7 @@ packages: fsevents: 2.3.2 dev: true - /rollup@3.20.2: + /rollup/3.20.2: resolution: {integrity: sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true @@ -9296,29 +9363,29 @@ packages: fsevents: 2.3.2 dev: true - /run-async@2.4.1: + /run-async/2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} - /run-parallel@1.2.0: + /run-parallel/1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true - /rxjs@7.8.0: + /rxjs/7.8.0: resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: tslib: 2.5.0 - /safe-buffer@5.1.2: + /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true - /safe-buffer@5.2.1: + /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - /safe-regex-test@1.0.0: + /safe-regex-test/1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: call-bind: 1.0.2 @@ -9326,79 +9393,79 @@ packages: is-regex: 1.1.4 dev: true - /safe-regex@1.1.0: + /safe-regex/1.1.0: resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} dependencies: ret: 0.1.15 dev: true - /safe-stable-stringify@2.4.3: + /safe-stable-stringify/2.4.3: resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} engines: {node: '>=10'} dev: true - /safer-buffer@2.1.2: + /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - /saxes@6.0.0: + /saxes/6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} dependencies: xmlchars: 2.2.0 dev: true - /schema-utils@1.0.0: + /schema-utils/1.0.0: resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==} engines: {node: '>= 4'} dependencies: ajv: 6.12.6 - ajv-errors: 1.0.1(ajv@6.12.6) - ajv-keywords: 3.5.2(ajv@6.12.6) + ajv-errors: 1.0.1_ajv@6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 dev: true - /schema-utils@2.7.1: + /schema-utils/2.7.1: resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} engines: {node: '>= 8.9.0'} dependencies: '@types/json-schema': 7.0.11 ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) + ajv-keywords: 3.5.2_ajv@6.12.6 dev: true - /schema-utils@3.1.1: + /schema-utils/3.1.1: resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} engines: {node: '>= 10.13.0'} dependencies: '@types/json-schema': 7.0.11 ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) + ajv-keywords: 3.5.2_ajv@6.12.6 dev: true - /secure-json-parse@2.7.0: + /secure-json-parse/2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} dev: true - /select-hose@2.0.0: + /select-hose/2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} dev: true - /selfsigned@1.10.14: + /selfsigned/1.10.14: resolution: {integrity: sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==} dependencies: node-forge: 0.10.0 dev: true - /semver@5.7.1: + /semver/5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true dev: true - /semver@6.3.0: + /semver/6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true dev: true - /semver@7.3.7: + /semver/7.3.7: resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} engines: {node: '>=10'} hasBin: true @@ -9406,7 +9473,7 @@ packages: lru-cache: 6.0.0 dev: true - /semver@7.4.0: + /semver/7.4.0: resolution: {integrity: sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==} engines: {node: '>=10'} hasBin: true @@ -9414,11 +9481,32 @@ packages: lru-cache: 6.0.0 dev: true - /send@0.18.0(supports-color@6.1.0): + /send/0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + 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 + transitivePeerDependencies: + - supports-color + dev: true + + /send/0.18.0_supports-color@6.1.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} dependencies: - debug: 2.6.9(supports-color@6.1.0) + debug: 2.6.9_supports-color@6.1.0 depd: 2.0.0 destroy: 1.2.0 encodeurl: 1.0.2 @@ -9435,19 +9523,19 @@ packages: - supports-color dev: true - /serialize-javascript@6.0.1: + /serialize-javascript/6.0.1: resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} dependencies: randombytes: 2.1.0 dev: true - /serve-index@1.9.1(supports-color@6.1.0): + /serve-index/1.9.1_supports-color@6.1.0: resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} engines: {node: '>= 0.8.0'} dependencies: accepts: 1.3.8 batch: 0.6.1 - debug: 2.6.9(supports-color@6.1.0) + debug: 2.6.9_supports-color@6.1.0 escape-html: 1.0.3 http-errors: 1.6.3 mime-types: 2.1.35 @@ -9456,23 +9544,35 @@ packages: - supports-color dev: true - /serve-static@1.15.0(supports-color@6.1.0): + /serve-static/1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + dev: true + + /serve-static/1.15.0_supports-color@6.1.0: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} dependencies: encodeurl: 1.0.2 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.18.0(supports-color@6.1.0) + send: 0.18.0_supports-color@6.1.0 transitivePeerDependencies: - supports-color dev: true - /set-blocking@2.0.0: + /set-blocking/2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /set-value@2.0.1: + /set-value/2.0.1: resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} engines: {node: '>=0.10.0'} dependencies: @@ -9482,46 +9582,46 @@ packages: split-string: 3.1.0 dev: true - /setprototypeof@1.1.0: + /setprototypeof/1.1.0: resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} dev: true - /setprototypeof@1.2.0: + /setprototypeof/1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} dev: true - /shallow-clone@3.0.1: + /shallow-clone/3.0.1: resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} engines: {node: '>=8'} dependencies: kind-of: 6.0.3 dev: true - /shebang-command@1.2.0: + /shebang-command/1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 dev: true - /shebang-command@2.0.0: + /shebang-command/2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 dev: true - /shebang-regex@1.0.0: + /shebang-regex/1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} dev: true - /shebang-regex@3.0.0: + /shebang-regex/3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} dev: true - /side-channel@1.0.4: + /side-channel/1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 @@ -9529,25 +9629,25 @@ packages: object-inspect: 1.12.3 dev: true - /signal-exit@3.0.7: + /signal-exit/3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - /simple-git-hooks@2.8.1: + /simple-git-hooks/2.8.1: resolution: {integrity: sha512-DYpcVR1AGtSfFUNzlBdHrQGPsOhuuEJ/FkmPOOlFysP60AHd3nsEpkGq/QEOdtUyT1Qhk7w9oLmFoMG+75BDog==} hasBin: true requiresBuild: true dev: true - /sisteransi@1.0.5: + /sisteransi/1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: true - /slash@3.0.0: + /slash/3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} dev: true - /slice-ansi@3.0.0: + /slice-ansi/3.0.0: resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} engines: {node: '>=8'} dependencies: @@ -9556,7 +9656,7 @@ packages: is-fullwidth-code-point: 3.0.0 dev: true - /slice-ansi@4.0.0: + /slice-ansi/4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} dependencies: @@ -9565,7 +9665,7 @@ packages: is-fullwidth-code-point: 3.0.0 dev: true - /slice-ansi@5.0.0: + /slice-ansi/5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} dependencies: @@ -9573,7 +9673,7 @@ packages: is-fullwidth-code-point: 4.0.0 dev: true - /snapdragon-node@2.1.1: + /snapdragon-node/2.1.1: resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} engines: {node: '>=0.10.0'} dependencies: @@ -9582,19 +9682,19 @@ packages: snapdragon-util: 3.0.1 dev: true - /snapdragon-util@3.0.1: + /snapdragon-util/3.0.1: resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /snapdragon@0.8.2(supports-color@6.1.0): + /snapdragon/0.8.2_supports-color@6.1.0: resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} engines: {node: '>=0.10.0'} dependencies: base: 0.11.2 - debug: 2.6.9(supports-color@6.1.0) + debug: 2.6.9_supports-color@6.1.0 define-property: 0.2.5 extend-shallow: 2.0.1 map-cache: 0.2.2 @@ -9605,7 +9705,7 @@ packages: - supports-color dev: true - /socket.io-adapter@2.5.2: + /socket.io-adapter/2.5.2: resolution: {integrity: sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==} dependencies: ws: 8.11.0 @@ -9614,23 +9714,23 @@ packages: - utf-8-validate dev: true - /socket.io-parser@4.2.2: + /socket.io-parser/4.2.2: resolution: {integrity: sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==} engines: {node: '>=10.0.0'} dependencies: '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true - /socket.io@4.6.1: + /socket.io/4.6.1: resolution: {integrity: sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==} engines: {node: '>=10.0.0'} dependencies: accepts: 1.3.8 base64id: 2.0.0 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 engine.io: 6.4.1 socket.io-adapter: 2.5.2 socket.io-parser: 4.2.2 @@ -9640,11 +9740,11 @@ packages: - utf-8-validate dev: true - /sockjs-client@1.6.1(supports-color@6.1.0): + /sockjs-client/1.6.1_supports-color@6.1.0: resolution: {integrity: sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==} engines: {node: '>=12'} dependencies: - debug: 3.2.7(supports-color@6.1.0) + debug: 3.2.7_supports-color@6.1.0 eventsource: 2.0.2 faye-websocket: 0.11.4 inherits: 2.0.4 @@ -9653,7 +9753,7 @@ packages: - supports-color dev: true - /sockjs@0.3.24: + /sockjs/0.3.24: resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} dependencies: faye-websocket: 0.11.4 @@ -9661,17 +9761,17 @@ packages: websocket-driver: 0.7.4 dev: true - /sonic-boom@2.8.0: + /sonic-boom/2.8.0: resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} dependencies: atomic-sleep: 1.0.0 dev: true - /source-list-map@2.0.1: + /source-list-map/2.0.1: resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} dev: true - /source-map-resolve@0.5.3: + /source-map-resolve/0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} deprecated: See https://github.com/lydell/source-map-resolve#deprecated dependencies: @@ -9682,72 +9782,72 @@ packages: urix: 0.1.0 dev: true - /source-map-support@0.5.13: + /source-map-support/0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: true - /source-map-support@0.5.21: + /source-map-support/0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: true - /source-map-url@0.4.1: + /source-map-url/0.4.1: resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} deprecated: See https://github.com/lydell/source-map-url#deprecated dev: true - /source-map@0.5.7: + /source-map/0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} dev: true - /source-map@0.6.1: + /source-map/0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} dev: true - /source-map@0.8.0-beta.0: + /source-map/0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} dependencies: whatwg-url: 7.1.0 dev: true - /spawn-error-forwarder@1.0.0: + /spawn-error-forwarder/1.0.0: resolution: {integrity: sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==} dev: true - /spdx-correct@3.2.0: + /spdx-correct/3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.13 dev: true - /spdx-exceptions@2.3.0: + /spdx-exceptions/2.3.0: resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} dev: true - /spdx-expression-parse@3.0.1: + /spdx-expression-parse/3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 spdx-license-ids: 3.0.13 dev: true - /spdx-license-ids@3.0.13: + /spdx-license-ids/3.0.13: resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} dev: true - /spdy-transport@3.0.0(supports-color@6.1.0): + /spdy-transport/3.0.0_supports-color@6.1.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4_supports-color@6.1.0 detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -9757,55 +9857,55 @@ packages: - supports-color dev: true - /spdy@4.0.2(supports-color@6.1.0): + /spdy/4.0.2_supports-color@6.1.0: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} dependencies: - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4_supports-color@6.1.0 handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 - spdy-transport: 3.0.0(supports-color@6.1.0) + spdy-transport: 3.0.0_supports-color@6.1.0 transitivePeerDependencies: - supports-color dev: true - /split-string@3.1.0: + /split-string/3.1.0: resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} engines: {node: '>=0.10.0'} dependencies: extend-shallow: 3.0.2 dev: true - /split2@1.0.0: + /split2/1.0.0: resolution: {integrity: sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==} dependencies: through2: 2.0.5 dev: true - /split2@3.2.2: + /split2/3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: readable-stream: 3.6.2 dev: true - /split2@4.2.0: + /split2/4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} dev: true - /sprintf-js@1.0.3: + /sprintf-js/1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true - /stack-utils@2.0.6: + /stack-utils/2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 dev: true - /static-extend@0.1.2: + /static-extend/0.1.2: resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} engines: {node: '>=0.10.0'} dependencies: @@ -9813,46 +9913,46 @@ packages: object-copy: 0.1.0 dev: true - /statuses@1.5.0: + /statuses/1.5.0: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} dev: true - /statuses@2.0.1: + /statuses/2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - /stream-combiner2@1.1.1: + /stream-combiner2/1.1.1: resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} dependencies: duplexer2: 0.1.4 readable-stream: 2.3.8 dev: true - /stream-read-all@3.0.1: + /stream-read-all/3.0.1: resolution: {integrity: sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==} engines: {node: '>=10'} dev: true - /stream-shift@1.0.1: + /stream-shift/1.0.1: resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} dev: true - /streamsearch@1.1.0: + /streamsearch/1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} dev: true - /strict-event-emitter@0.5.0: + /strict-event-emitter/0.5.0: resolution: {integrity: sha512-sqnMpVJLSB3daNO6FcvsEk4Mq5IJeAwDeH80DP1S8+pgxrF6yZnE1+VeapesGled7nEcIkz1Ax87HzaIy+02kA==} dev: false - /string-argv@0.3.1: + /string-argv/0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} engines: {node: '>=0.6.19'} dev: true - /string-length@4.0.2: + /string-length/4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} dependencies: @@ -9860,7 +9960,7 @@ packages: strip-ansi: 6.0.1 dev: true - /string-width@3.1.0: + /string-width/3.1.0: resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} engines: {node: '>=6'} dependencies: @@ -9869,7 +9969,7 @@ packages: strip-ansi: 5.2.0 dev: true - /string-width@4.2.3: + /string-width/4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} dependencies: @@ -9877,7 +9977,7 @@ packages: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string-width@5.1.2: + /string-width/5.1.2: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} dependencies: @@ -9886,7 +9986,7 @@ packages: strip-ansi: 7.0.1 dev: true - /string.prototype.trim@1.2.7: + /string.prototype.trim/1.2.7: resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} engines: {node: '>= 0.4'} dependencies: @@ -9895,7 +9995,7 @@ packages: es-abstract: 1.21.2 dev: true - /string.prototype.trimend@1.0.6: + /string.prototype.trimend/1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 @@ -9903,7 +10003,7 @@ packages: es-abstract: 1.21.2 dev: true - /string.prototype.trimstart@1.0.6: + /string.prototype.trimstart/1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 @@ -9911,82 +10011,82 @@ packages: es-abstract: 1.21.2 dev: true - /string_decoder@1.1.1: + /string_decoder/1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 dev: true - /string_decoder@1.3.0: + /string_decoder/1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 - /strip-ansi@3.0.1: + /strip-ansi/3.0.1: resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 dev: true - /strip-ansi@5.2.0: + /strip-ansi/5.2.0: resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} engines: {node: '>=6'} dependencies: ansi-regex: 4.1.1 dev: true - /strip-ansi@6.0.1: + /strip-ansi/6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 - /strip-ansi@7.0.1: + /strip-ansi/7.0.1: resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 dev: true - /strip-bom@4.0.0: + /strip-bom/4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} dev: true - /strip-eof@1.0.0: + /strip-eof/1.0.0: resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} engines: {node: '>=0.10.0'} dev: true - /strip-final-newline@2.0.0: + /strip-final-newline/2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} dev: true - /strip-final-newline@3.0.0: + /strip-final-newline/3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} dev: true - /strip-indent@3.0.0: + /strip-indent/3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} dependencies: min-indent: 1.0.1 dev: true - /strip-json-comments@2.0.1: + /strip-json-comments/2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} dev: true - /strip-json-comments@3.1.1: + /strip-json-comments/3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} dev: true - /sucrase@3.32.0: + /sucrase/3.32.0: resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} engines: {node: '>=8'} hasBin: true @@ -10000,43 +10100,43 @@ packages: ts-interface-checker: 0.1.13 dev: true - /supports-color@5.5.0: + /supports-color/5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} dependencies: has-flag: 3.0.0 dev: true - /supports-color@6.1.0: + /supports-color/6.1.0: resolution: {integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==} engines: {node: '>=6'} dependencies: has-flag: 3.0.0 dev: true - /supports-color@7.2.0: + /supports-color/7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - /supports-color@8.1.1: + /supports-color/8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 dev: true - /supports-preserve-symlinks-flag@1.0.0: + /supports-preserve-symlinks-flag/1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true - /symbol-tree@3.2.4: + /symbol-tree/3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true - /table-layout@3.0.2: + /table-layout/3.0.2: resolution: {integrity: sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==} engines: {node: '>=12.17'} hasBin: true @@ -10050,7 +10150,7 @@ packages: wordwrapjs: 5.1.0 dev: true - /table@6.8.1: + /table/6.8.1: resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} engines: {node: '>=10.0.0'} dependencies: @@ -10061,12 +10161,12 @@ packages: strip-ansi: 6.0.1 dev: true - /tapable@2.2.1: + /tapable/2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} dev: true - /terser-webpack-plugin@5.3.7(@swc/core@1.3.49)(esbuild@0.17.16)(webpack@5.79.0): + /terser-webpack-plugin/5.3.7_4mbh3ks6vevmq3w4sbjme7looe: resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -10089,10 +10189,10 @@ packages: schema-utils: 3.1.1 serialize-javascript: 6.0.1 terser: 5.16.9 - webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e dev: true - /terser@5.16.9: + /terser/5.16.9: resolution: {integrity: sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg==} engines: {node: '>=10'} hasBin: true @@ -10103,7 +10203,7 @@ packages: source-map-support: 0.5.21 dev: true - /test-exclude@6.0.0: + /test-exclude/6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} dependencies: @@ -10112,77 +10212,77 @@ packages: minimatch: 3.1.2 dev: true - /text-extensions@1.9.0: + /text-extensions/1.9.0: resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} engines: {node: '>=0.10'} dev: true - /text-table@0.2.0: + /text-table/0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /thenify-all@1.6.0: + /thenify-all/1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 dev: true - /thenify@3.3.1: + /thenify/3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 dev: true - /thread-stream@0.15.2: + /thread-stream/0.15.2: resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} dependencies: real-require: 0.1.0 dev: true - /through2@2.0.5: + /through/2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + /through2/2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: readable-stream: 2.3.8 xtend: 4.0.2 dev: true - /through2@4.0.2: + /through2/4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: readable-stream: 3.6.2 dev: true - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - - /thunky@1.1.0: + /thunky/1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} dev: true - /tmp@0.0.33: + /tmp/0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 - /tmpl@1.0.5: + /tmpl/1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true - /to-fast-properties@2.0.0: + /to-fast-properties/2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} dev: true - /to-object-path@0.3.0: + /to-object-path/0.3.0: resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /to-regex-range@2.1.1: + /to-regex-range/2.1.1: resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} engines: {node: '>=0.10.0'} dependencies: @@ -10190,13 +10290,13 @@ packages: repeat-string: 1.6.1 dev: true - /to-regex-range@5.0.1: + /to-regex-range/5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - /to-regex@3.0.2: + /to-regex/3.0.2: resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} engines: {node: '>=0.10.0'} dependencies: @@ -10206,12 +10306,12 @@ packages: safe-regex: 1.1.0 dev: true - /toidentifier@1.0.1: + /toidentifier/1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} dev: true - /tough-cookie@4.1.2: + /tough-cookie/4.1.2: resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} engines: {node: '>=6'} dependencies: @@ -10221,41 +10321,41 @@ packages: url-parse: 1.5.10 dev: true - /tr46@0.0.3: + /tr46/0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - /tr46@1.0.1: + /tr46/1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} dependencies: punycode: 2.3.0 dev: true - /tr46@3.0.0: + /tr46/3.0.0: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} dependencies: punycode: 2.3.0 dev: true - /traverse@0.6.7: + /traverse/0.6.7: resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} dev: true - /tree-kill@1.2.2: + /tree-kill/1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true dev: true - /trim-newlines@3.0.1: + /trim-newlines/3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} dev: true - /ts-interface-checker@0.1.13: + /ts-interface-checker/0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-node@10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@4.9.5): + /ts-node/10.9.1_faublg25f7qpbcz6w4cw6yyzse: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -10287,7 +10387,7 @@ packages: yn: 3.1.1 dev: true - /ts-node@10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4): + /ts-node/10.9.1_l7nicavc6cghsvyjdpeszw7e5e: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -10319,19 +10419,19 @@ packages: yn: 3.1.1 dev: true - /tslib@1.14.1: + /tslib/1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib@2.5.0: + /tslib/2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - /tsscmp@1.0.6: + /tsscmp/1.0.6: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} dev: true - /tsup@6.7.0(@swc/core@1.3.49)(ts-node@10.9.1)(typescript@5.0.4): + /tsup/6.7.0_kpvxmbmtx6ydv4unklsjw2abeq: resolution: {integrity: sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==} engines: {node: '>=14.18'} hasBin: true @@ -10348,15 +10448,15 @@ packages: optional: true dependencies: '@swc/core': 1.3.49 - bundle-require: 4.0.1(esbuild@0.17.16) + bundle-require: 4.0.1_esbuild@0.17.16 cac: 6.7.14 chokidar: 3.4.1 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 esbuild: 0.17.16 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 3.1.4(ts-node@10.9.1) + postcss-load-config: 3.1.4_ts-node@10.9.1 resolve-from: 5.0.0 rollup: 3.20.2 source-map: 0.8.0-beta.0 @@ -10368,7 +10468,7 @@ packages: - ts-node dev: true - /tsutils@3.21.0(typescript@5.0.4): + /tsutils/3.21.0_typescript@5.0.4: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: @@ -10378,55 +10478,55 @@ packages: typescript: 5.0.4 dev: true - /type-check@0.3.2: + /type-check/0.3.2: resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 dev: true - /type-check@0.4.0: + /type-check/0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 dev: true - /type-detect@4.0.8: + /type-detect/4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} dev: true - /type-fest@0.18.1: + /type-fest/0.18.1: resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} engines: {node: '>=10'} dev: true - /type-fest@0.20.2: + /type-fest/0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} dev: true - /type-fest@0.21.3: + /type-fest/0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - /type-fest@0.6.0: + /type-fest/0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} dev: true - /type-fest@0.8.1: + /type-fest/0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} dev: true - /type-fest@2.19.0: + /type-fest/2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} dev: false - /type-is@1.6.18: + /type-is/1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} dependencies: @@ -10434,7 +10534,7 @@ packages: mime-types: 2.1.35 dev: true - /typed-array-length@1.0.4: + /typed-array-length/1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: call-bind: 1.0.2 @@ -10442,29 +10542,29 @@ packages: is-typed-array: 1.1.10 dev: true - /typescript@4.9.5: + /typescript/4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} hasBin: true dev: true - /typescript@5.0.4: + /typescript/5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} hasBin: true dev: true - /typical@4.0.0: + /typical/4.0.0: resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} engines: {node: '>=8'} dev: true - /typical@7.1.1: + /typical/7.1.1: resolution: {integrity: sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==} engines: {node: '>=12.17'} dev: true - /unbox-primitive@1.0.2: + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: call-bind: 1.0.2 @@ -10473,19 +10573,19 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /undici@5.21.2: + /undici/5.21.2: resolution: {integrity: sha512-f6pTQ9RF4DQtwoWSaC42P/NKlUjvezVvd9r155ohqkwFNRyBKM3f3pcty3ouusefNRyM25XhIQEbeQ46sZDJfQ==} engines: {node: '>=12.18'} dependencies: busboy: 1.6.0 dev: true - /unicode-canonical-property-names-ecmascript@2.0.0: + /unicode-canonical-property-names-ecmascript/2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} dev: true - /unicode-match-property-ecmascript@2.0.0: + /unicode-match-property-ecmascript/2.0.0: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} dependencies: @@ -10493,17 +10593,17 @@ packages: unicode-property-aliases-ecmascript: 2.1.0 dev: true - /unicode-match-property-value-ecmascript@2.1.0: + /unicode-match-property-value-ecmascript/2.1.0: resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} engines: {node: '>=4'} dev: true - /unicode-property-aliases-ecmascript@2.1.0: + /unicode-property-aliases-ecmascript/2.1.0: resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} engines: {node: '>=4'} dev: true - /union-value@1.0.1: + /union-value/1.0.1: resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} engines: {node: '>=0.10.0'} dependencies: @@ -10513,22 +10613,22 @@ packages: set-value: 2.0.1 dev: true - /universalify@0.2.0: + /universalify/0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} dev: true - /universalify@2.0.0: + /universalify/2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} dev: true - /unpipe@1.0.0: + /unpipe/1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} dev: true - /unset-value@1.0.0: + /unset-value/1.0.0: resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} engines: {node: '>=0.10.0'} dependencies: @@ -10536,7 +10636,7 @@ packages: isobject: 3.0.1 dev: true - /update-browserslist-db@1.0.10(browserslist@4.21.5): + /update-browserslist-db/1.0.10_browserslist@4.21.5: resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} hasBin: true peerDependencies: @@ -10547,18 +10647,18 @@ packages: picocolors: 1.0.0 dev: true - /uri-js@4.4.1: + /uri-js/4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.0 dev: true - /urix@0.1.0: + /urix/0.1.0: resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} deprecated: Please see https://github.com/lydell/urix#deprecated dev: true - /url-loader@4.1.1(webpack@5.79.0): + /url-loader/4.1.1_webpack@5.79.0: resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -10571,32 +10671,32 @@ packages: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.1.1 - webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e dev: true - /url-parse@1.5.10: + /url-parse/1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} dependencies: querystringify: 2.2.0 requires-port: 1.0.0 dev: true - /url@0.11.0: + /url/0.11.0: resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} dependencies: punycode: 1.3.2 querystring: 0.2.0 dev: true - /use@3.1.1: + /use/3.1.1: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} engines: {node: '>=0.10.0'} dev: true - /util-deprecate@1.0.2: + /util-deprecate/1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - /util.promisify@1.1.1: + /util.promisify/1.1.1: resolution: {integrity: sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==} dependencies: call-bind: 1.0.2 @@ -10606,31 +10706,31 @@ packages: object.getownpropertydescriptors: 2.1.5 dev: true - /utils-merge@1.0.1: + /utils-merge/1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} dev: true - /uuid@3.4.0: + /uuid/3.4.0: resolution: {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. hasBin: true dev: true - /uuid@8.3.2: + /uuid/8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true dev: true - /v8-compile-cache-lib@3.0.1: + /v8-compile-cache-lib/3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /v8-compile-cache@2.3.0: + /v8-compile-cache/2.3.0: resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true - /v8-to-istanbul@9.1.0: + /v8-to-istanbul/9.1.0: resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} dependencies: @@ -10639,32 +10739,32 @@ packages: convert-source-map: 1.9.0 dev: true - /validate-npm-package-license@3.0.4: + /validate-npm-package-license/3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 dev: true - /vary@1.1.2: + /vary/1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} dev: true - /w3c-xmlserializer@4.0.0: + /w3c-xmlserializer/4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} dependencies: xml-name-validator: 4.0.0 dev: true - /walker@1.0.8: + /walker/1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 dev: true - /watchpack@2.4.0: + /watchpack/2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} dependencies: @@ -10672,35 +10772,35 @@ packages: graceful-fs: 4.2.11 dev: true - /wbuf@1.7.3: + /wbuf/1.7.3: resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} dependencies: minimalistic-assert: 1.0.1 dev: true - /wcwidth@1.0.1: + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 - /web-streams-polyfill@4.0.0-beta.3: + /web-streams-polyfill/4.0.0-beta.3: resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} engines: {node: '>= 14'} dev: false - /webidl-conversions@3.0.1: + /webidl-conversions/3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - /webidl-conversions@4.0.2: + /webidl-conversions/4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} dev: true - /webidl-conversions@7.0.0: + /webidl-conversions/7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} dev: true - /webpack-dev-middleware@3.7.3(webpack@5.79.0): + /webpack-dev-middleware/3.7.3_webpack@5.79.0: resolution: {integrity: sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==} engines: {node: '>= 6'} peerDependencies: @@ -10710,11 +10810,11 @@ packages: mime: 2.6.0 mkdirp: 0.5.6 range-parser: 1.2.1 - webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e webpack-log: 2.0.0 dev: true - /webpack-dev-server@3.11.3(webpack@5.79.0): + /webpack-dev-server/3.11.3_webpack@5.79.0: resolution: {integrity: sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==} engines: {node: '>= 6.11.5'} hasBin: true @@ -10728,13 +10828,13 @@ packages: ansi-html-community: 0.0.8 bonjour: 3.5.0 chokidar: 3.4.1 - compression: 1.7.4(supports-color@6.1.0) + compression: 1.7.4_supports-color@6.1.0 connect-history-api-fallback: 1.6.0 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4_supports-color@6.1.0 del: 4.1.1 - express: 4.18.2(supports-color@6.1.0) + express: 4.18.2_supports-color@6.1.0 html-entities: 1.4.0 - http-proxy-middleware: 0.19.1(debug@4.3.4)(supports-color@6.1.0) + http-proxy-middleware: 0.19.1_tmpgdztspuwvsxzgjkhoqk7duq import-local: 2.0.0 internal-ip: 4.3.0 ip: 1.1.8 @@ -10743,19 +10843,19 @@ packages: loglevel: 1.8.1 opn: 5.5.0 p-retry: 3.0.1 - portfinder: 1.0.32(supports-color@6.1.0) + portfinder: 1.0.32_supports-color@6.1.0 schema-utils: 1.0.0 selfsigned: 1.10.14 semver: 6.3.0 - serve-index: 1.9.1(supports-color@6.1.0) + serve-index: 1.9.1_supports-color@6.1.0 sockjs: 0.3.24 - sockjs-client: 1.6.1(supports-color@6.1.0) - spdy: 4.0.2(supports-color@6.1.0) + sockjs-client: 1.6.1_supports-color@6.1.0 + spdy: 4.0.2_supports-color@6.1.0 strip-ansi: 3.0.1 supports-color: 6.1.0 url: 0.11.0 - webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) - webpack-dev-middleware: 3.7.3(webpack@5.79.0) + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e + webpack-dev-middleware: 3.7.3_webpack@5.79.0 webpack-log: 2.0.0 ws: 6.2.2 yargs: 13.3.2 @@ -10764,16 +10864,16 @@ packages: - utf-8-validate dev: true - /webpack-http-server@0.5.0(@swc/core@1.3.49)(esbuild@0.17.16): + /webpack-http-server/0.5.0_57233mj27fjz7synoeubptyy7e: resolution: {integrity: sha512-kyewxAnzmDuZxe09fn/Bb0PeEnaDxHChYKFVsMy4oeBUs9Cyv2j1uEgzQJ7ljPFexLU8ongUS4i4O+e22CeBZQ==} dependencies: '@types/express': 4.17.17 '@types/mustache': 4.2.2 - express: 4.18.2(supports-color@6.1.0) + express: 4.18.2 memfs: 3.5.0 mustache: 4.2.0 outvariant: 1.4.0 - webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e transitivePeerDependencies: - '@swc/core' - esbuild @@ -10782,7 +10882,7 @@ packages: - webpack-cli dev: true - /webpack-log@2.0.0: + /webpack-log/2.0.0: resolution: {integrity: sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==} engines: {node: '>= 6'} dependencies: @@ -10790,7 +10890,7 @@ packages: uuid: 3.4.0 dev: true - /webpack-merge@5.8.0: + /webpack-merge/5.8.0: resolution: {integrity: sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==} engines: {node: '>=10.0.0'} dependencies: @@ -10798,19 +10898,19 @@ packages: wildcard: 2.0.0 dev: true - /webpack-sources@1.4.3: + /webpack-sources/1.4.3: resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} dependencies: source-list-map: 2.0.1 source-map: 0.6.1 dev: true - /webpack-sources@3.2.3: + /webpack-sources/3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} dev: true - /webpack@5.79.0(@swc/core@1.3.49)(esbuild@0.17.16): + /webpack/5.79.0_57233mj27fjz7synoeubptyy7e: resolution: {integrity: sha512-3mN4rR2Xq+INd6NnYuL9RC9GAmc1ROPKJoHhrZ4pAjdMFEkJJWrsPw8o2JjCIyQyTu7rTXYn4VG6OpyB3CobZg==} engines: {node: '>=10.13.0'} hasBin: true @@ -10826,7 +10926,7 @@ packages: '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 acorn: 8.8.2 - acorn-import-assertions: 1.8.0(acorn@8.8.2) + acorn-import-assertions: 1.8.0_acorn@8.8.2 browserslist: 4.21.5 chrome-trace-event: 1.0.3 enhanced-resolve: 5.12.0 @@ -10841,7 +10941,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.1.1 tapable: 2.2.1 - terser-webpack-plugin: 5.3.7(@swc/core@1.3.49)(esbuild@0.17.16)(webpack@5.79.0) + terser-webpack-plugin: 5.3.7_4mbh3ks6vevmq3w4sbjme7looe watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -10850,7 +10950,7 @@ packages: - uglify-js dev: true - /websocket-driver@0.7.4: + /websocket-driver/0.7.4: resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} engines: {node: '>=0.8.0'} dependencies: @@ -10859,24 +10959,24 @@ packages: websocket-extensions: 0.1.4 dev: true - /websocket-extensions@0.1.4: + /websocket-extensions/0.1.4: resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} engines: {node: '>=0.8.0'} dev: true - /whatwg-encoding@2.0.0: + /whatwg-encoding/2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} dependencies: iconv-lite: 0.6.3 dev: true - /whatwg-mimetype@3.0.0: + /whatwg-mimetype/3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} dev: true - /whatwg-url@11.0.0: + /whatwg-url/11.0.0: resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} engines: {node: '>=12'} dependencies: @@ -10884,13 +10984,13 @@ packages: webidl-conversions: 7.0.0 dev: true - /whatwg-url@5.0.0: + /whatwg-url/5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - /whatwg-url@7.1.0: + /whatwg-url/7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} dependencies: lodash.sortby: 4.7.0 @@ -10898,7 +10998,7 @@ packages: webidl-conversions: 4.0.2 dev: true - /which-boxed-primitive@1.0.2: + /which-boxed-primitive/1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 @@ -10908,11 +11008,11 @@ packages: is-symbol: 1.0.4 dev: true - /which-module@2.0.0: + /which-module/2.0.0: resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} dev: true - /which-typed-array@1.1.9: + /which-typed-array/1.1.9: resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} engines: {node: '>= 0.4'} dependencies: @@ -10924,14 +11024,14 @@ packages: is-typed-array: 1.1.10 dev: true - /which@1.3.1: + /which/1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true dependencies: isexe: 2.0.0 dev: true - /which@2.0.2: + /which/2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true @@ -10939,21 +11039,21 @@ packages: isexe: 2.0.0 dev: true - /wildcard@2.0.0: + /wildcard/2.0.0: resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==} dev: true - /word-wrap@1.2.3: + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true - /wordwrapjs@5.1.0: + /wordwrapjs/5.1.0: resolution: {integrity: sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==} engines: {node: '>=12.17'} dev: true - /wrap-ansi@5.1.0: + /wrap-ansi/5.1.0: resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} engines: {node: '>=6'} dependencies: @@ -10962,7 +11062,7 @@ packages: strip-ansi: 5.2.0 dev: true - /wrap-ansi@6.2.0: + /wrap-ansi/6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} dependencies: @@ -10971,7 +11071,7 @@ packages: strip-ansi: 6.0.1 dev: true - /wrap-ansi@7.0.0: + /wrap-ansi/7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} dependencies: @@ -10979,11 +11079,11 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 - /wrappy@1.0.2: + /wrappy/1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /write-file-atomic@4.0.2: + /write-file-atomic/4.0.2: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: @@ -10991,7 +11091,7 @@ packages: signal-exit: 3.0.7 dev: true - /ws@6.2.2: + /ws/6.2.2: resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} peerDependencies: bufferutil: ^4.0.1 @@ -11005,7 +11105,7 @@ packages: async-limiter: 1.0.1 dev: true - /ws@7.5.9: + /ws/7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} peerDependencies: @@ -11018,7 +11118,7 @@ packages: optional: true dev: true - /ws@8.11.0: + /ws/8.11.0: resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} engines: {node: '>=10.0.0'} peerDependencies: @@ -11031,7 +11131,7 @@ packages: optional: true dev: true - /ws@8.13.0: + /ws/8.13.0: resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} engines: {node: '>=10.0.0'} peerDependencies: @@ -11044,69 +11144,69 @@ packages: optional: true dev: true - /xml-name-validator@4.0.0: + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} dev: true - /xmlchars@2.2.0: + /xmlchars/2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true - /xtend@4.0.2: + /xtend/4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} dev: true - /y18n@4.0.3: + /y18n/4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} dev: true - /y18n@5.0.8: + /y18n/5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - /yallist@3.1.1: + /yallist/3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true - /yallist@4.0.0: + /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true - /yaml@1.10.2: + /yaml/1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} dev: true - /yaml@2.2.1: + /yaml/2.2.1: resolution: {integrity: sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==} engines: {node: '>= 14'} dev: true - /yargs-parser@10.1.0: + /yargs-parser/10.1.0: resolution: {integrity: sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==} dependencies: camelcase: 4.1.0 dev: true - /yargs-parser@13.1.2: + /yargs-parser/13.1.2: resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} dependencies: camelcase: 5.3.1 decamelize: 1.2.0 dev: true - /yargs-parser@20.2.9: + /yargs-parser/20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} dev: true - /yargs-parser@21.1.1: + /yargs-parser/21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - /yargs@13.3.2: + /yargs/13.3.2: resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==} dependencies: cliui: 5.0.0 @@ -11121,7 +11221,7 @@ packages: yargs-parser: 13.1.2 dev: true - /yargs@17.7.1: + /yargs/17.7.1: resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} engines: {node: '>=12'} dependencies: @@ -11133,17 +11233,17 @@ packages: y18n: 5.0.8 yargs-parser: 21.1.1 - /ylru@1.3.2: + /ylru/1.3.2: resolution: {integrity: sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==} engines: {node: '>= 4.0.0'} dev: true - /yn@3.1.1: + /yn/3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} dev: true - /yocto-queue@0.1.0: + /yocto-queue/0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true From 36a0dcc9ab83aa4e04c5c53d95d926051c91e2a5 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 29 Apr 2023 13:06:33 +0200 Subject: [PATCH 122/210] fix: cjs build of js-levenshtein --- package.json | 2 +- pnpm-lock.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 760920a51..812bad2b9 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,7 @@ "sideEffects": false, "dependencies": { "@bundled-es-modules/cookie": "^2.0.0", - "@bundled-es-modules/js-levenshtein": "^2.0.0", + "@bundled-es-modules/js-levenshtein": "^2.0.1", "@bundled-es-modules/statuses": "^1.0.1", "@mswjs/cookies": "^1.0.0", "@mswjs/interceptors": "^0.22.12", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 516b123c6..f63aa00ad 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,7 +7,7 @@ specifiers: '@babel/core': ^7.17.2 '@babel/preset-env': ^7.16.11 '@bundled-es-modules/cookie': ^2.0.0 - '@bundled-es-modules/js-levenshtein': ^2.0.0 + '@bundled-es-modules/js-levenshtein': ^2.0.1 '@bundled-es-modules/statuses': ^1.0.1 '@commitlint/cli': ^16.1.0 '@commitlint/config-conventional': ^16.0.0 @@ -81,7 +81,7 @@ specifiers: dependencies: '@bundled-es-modules/cookie': 2.0.0 - '@bundled-es-modules/js-levenshtein': 2.0.0 + '@bundled-es-modules/js-levenshtein': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 '@mswjs/cookies': 1.0.0 '@mswjs/interceptors': 0.22.12 @@ -1375,8 +1375,8 @@ packages: cookie: 0.5.0 dev: false - /@bundled-es-modules/js-levenshtein/2.0.0: - resolution: {integrity: sha512-KSVIngpi1QztKcUxXr50ru6JCK3zO2TZuax92MdupxosHAZMJrPWkb9U4tyVg878+IBYbsplW1yEyJE3s10cFg==} + /@bundled-es-modules/js-levenshtein/2.0.1: + resolution: {integrity: sha512-DERMS3yfbAljKsQc0U2wcqGKUWpdFjwqWuoMugEJlqBnKO180/n+4SR/J8MRDt1AN48X1ovgoD9KrdVXcaa3Rg==} dependencies: js-levenshtein: 1.1.6 dev: false From 229c967b00c99b1680b3a091e1920e2bfaa785ec Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 29 Apr 2023 13:17:21 +0200 Subject: [PATCH 123/210] chore(release): v0.0.0-fetch.rc-12 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 812bad2b9..26780f905 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-11", + "version": "0.0.0-fetch.rc-12", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/core/index.js", "module": "./lib/core/index.mjs", From cb565c9f53f211f4668d6eb0b53efade6b67271a Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 2 May 2023 13:37:44 +0200 Subject: [PATCH 124/210] fix: add "chalk@4" back to dependencies --- package.json | 1 + pnpm-lock.yaml | 70 +++++++++++++++++++++++--------------------------- 2 files changed, 33 insertions(+), 38 deletions(-) diff --git a/package.json b/package.json index 26780f905..37ee3bb34 100644 --- a/package.json +++ b/package.json @@ -118,6 +118,7 @@ "@types/cookie": "^0.4.1", "@types/js-levenshtein": "^1.1.1", "@types/statuses": "^2.0.1", + "chalk": "^4.1.2", "chokidar": "^3.4.2", "formdata-node": "4.4.1", "graphql": "^15.0.0 || ^16.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f63aa00ad..512c9cba0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,6 +35,7 @@ specifiers: '@web/dev-server': ^0.1.38 babel-loader: ^8.2.3 babel-minify: ^0.5.1 + chalk: ^4.1.2 chokidar: 3.4.1 commitizen: ^4.2.4 cross-env: ^7.0.3 @@ -89,6 +90,7 @@ dependencies: '@types/cookie': 0.4.1 '@types/js-levenshtein': 1.1.1 '@types/statuses': 2.0.1 + chalk: 4.1.2 chokidar: 3.4.1 formdata-node: 4.4.1 graphql: 16.6.0 @@ -1454,7 +1456,7 @@ packages: engines: {node: '>=v12'} dependencies: '@commitlint/types': 16.2.1 - chalk: 4.1.1 + chalk: 4.1.2 dev: true /@commitlint/is-ignored/16.2.4: @@ -1484,7 +1486,7 @@ packages: '@commitlint/resolve-extends': 16.2.1 '@commitlint/types': 16.2.1 '@types/node': 18.15.11 - chalk: 4.1.1 + chalk: 4.1.2 cosmiconfig: 7.1.0 cosmiconfig-typescript-loader: 2.0.2_faublg25f7qpbcz6w4cw6yyzse lodash: 4.17.21 @@ -1505,7 +1507,7 @@ packages: '@commitlint/resolve-extends': 17.4.4 '@commitlint/types': 17.4.4 '@types/node': 18.15.11 - chalk: 4.1.1 + chalk: 4.1.2 cosmiconfig: 8.1.3 cosmiconfig-typescript-loader: 4.3.0_zulaepqzabcjiyzbkdbfeduf6u lodash.isplainobject: 4.0.6 @@ -1596,14 +1598,14 @@ packages: resolution: {integrity: sha512-7/z7pA7BM0i8XvMSBynO7xsB3mVQPUZbVn6zMIlp/a091XJ3qAXRXc+HwLYhiIdzzS5fuxxNIHZMGHVD4HJxdA==} engines: {node: '>=v12'} dependencies: - chalk: 4.1.1 + chalk: 4.1.2 dev: true /@commitlint/types/17.4.4: resolution: {integrity: sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==} engines: {node: '>=v14'} dependencies: - chalk: 4.1.1 + chalk: 4.1.2 dev: true optional: true @@ -2079,7 +2081,7 @@ packages: dependencies: '@jest/types': 29.5.0 '@types/node': 18.15.11 - chalk: 4.1.1 + chalk: 4.1.2 jest-message-util: 29.5.0 jest-util: 29.5.0 slash: 3.0.0 @@ -2101,7 +2103,7 @@ packages: '@jest/types': 29.5.0 '@types/node': 18.15.11 ansi-escapes: 4.3.2 - chalk: 4.1.1 + chalk: 4.1.2 ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 @@ -2201,7 +2203,7 @@ packages: '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.18 '@types/node': 18.15.11 - chalk: 4.1.1 + chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 glob: 7.2.3 @@ -2266,7 +2268,7 @@ packages: '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.18 babel-plugin-istanbul: 6.1.1 - chalk: 4.1.1 + chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.11 @@ -2289,7 +2291,7 @@ packages: '@types/istanbul-reports': 3.0.1 '@types/node': 18.15.11 '@types/yargs': 16.0.5 - chalk: 4.1.1 + chalk: 4.1.2 dev: true /@jest/types/29.5.0: @@ -2301,7 +2303,7 @@ packages: '@types/istanbul-reports': 3.0.1 '@types/node': 18.15.11 '@types/yargs': 17.0.24 - chalk: 4.1.1 + chalk: 4.1.2 dev: true /@jridgewell/gen-mapping/0.3.3: @@ -3724,7 +3726,7 @@ packages: '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 babel-preset-jest: 29.5.0_@babel+core@7.21.4 - chalk: 4.1.1 + chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: @@ -4285,20 +4287,12 @@ packages: supports-color: 5.5.0 dev: true - /chalk/4.1.1: - resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - /chalk/4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true /chalk/5.2.0: resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} @@ -5480,7 +5474,7 @@ packages: '@eslint/eslintrc': 0.4.3 '@humanwhocodes/config-array': 0.5.0 ajv: 6.12.6 - chalk: 4.1.1 + chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.4 doctrine: 3.0.0 @@ -6629,7 +6623,7 @@ packages: engines: {node: '>=12.0.0'} dependencies: ansi-escapes: 4.3.2 - chalk: 4.1.1 + chalk: 4.1.2 cli-cursor: 3.1.0 cli-width: 3.0.0 external-editor: 3.1.0 @@ -7115,7 +7109,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 '@types/node': 18.15.11 - chalk: 4.1.1 + chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 is-generator-fn: 2.1.0 @@ -7147,7 +7141,7 @@ packages: '@jest/core': 29.5.0_ts-node@10.9.1 '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - chalk: 4.1.1 + chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 @@ -7179,7 +7173,7 @@ packages: '@jest/types': 29.5.0 '@types/node': 18.15.11 babel-jest: 29.5.0_@babel+core@7.21.4 - chalk: 4.1.1 + chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.1 glob: 7.2.3 @@ -7206,7 +7200,7 @@ packages: resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - chalk: 4.1.1 + chalk: 4.1.2 diff-sequences: 29.4.3 jest-get-type: 29.4.3 pretty-format: 29.5.0 @@ -7224,7 +7218,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - chalk: 4.1.1 + chalk: 4.1.2 jest-get-type: 29.4.3 jest-util: 29.5.0 pretty-format: 29.5.0 @@ -7301,7 +7295,7 @@ packages: resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - chalk: 4.1.1 + chalk: 4.1.2 jest-diff: 29.5.0 jest-get-type: 29.4.3 pretty-format: 29.5.0 @@ -7314,7 +7308,7 @@ packages: '@babel/code-frame': 7.21.4 '@jest/types': 29.5.0 '@types/stack-utils': 2.0.1 - chalk: 4.1.1 + chalk: 4.1.2 graceful-fs: 4.2.11 micromatch: 4.0.5 pretty-format: 29.5.0 @@ -7362,7 +7356,7 @@ packages: resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - chalk: 4.1.1 + chalk: 4.1.2 graceful-fs: 4.2.11 jest-haste-map: 29.5.0 jest-pnp-resolver: 1.2.3_jest-resolve@29.5.0 @@ -7383,7 +7377,7 @@ packages: '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@types/node': 18.15.11 - chalk: 4.1.1 + chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 jest-docblock: 29.4.3 @@ -7414,7 +7408,7 @@ packages: '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@types/node': 18.15.11 - chalk: 4.1.1 + chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 glob: 7.2.3 @@ -7448,7 +7442,7 @@ packages: '@types/babel__traverse': 7.18.3 '@types/prettier': 2.7.2 babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.4 - chalk: 4.1.1 + chalk: 4.1.2 expect: 29.5.0 graceful-fs: 4.2.11 jest-diff: 29.5.0 @@ -7469,7 +7463,7 @@ packages: dependencies: '@jest/types': 29.5.0 '@types/node': 18.15.11 - chalk: 4.1.1 + chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 picomatch: 2.3.1 @@ -7481,7 +7475,7 @@ packages: dependencies: '@jest/types': 29.5.0 camelcase: 6.3.0 - chalk: 4.1.1 + chalk: 4.1.2 jest-get-type: 29.4.3 leven: 3.1.0 pretty-format: 29.5.0 @@ -7495,7 +7489,7 @@ packages: '@jest/types': 29.5.0 '@types/node': 18.15.11 ansi-escapes: 4.3.2 - chalk: 4.1.1 + chalk: 4.1.2 emittery: 0.13.1 jest-util: 29.5.0 string-length: 4.0.2 @@ -7960,7 +7954,7 @@ packages: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} dependencies: - chalk: 4.1.1 + chalk: 4.1.2 is-unicode-supported: 0.1.0 /log-update/4.0.0: @@ -8556,7 +8550,7 @@ packages: engines: {node: '>=10'} dependencies: bl: 4.1.0 - chalk: 4.1.1 + chalk: 4.1.2 cli-cursor: 3.1.0 cli-spinners: 2.8.0 is-interactive: 1.0.0 From e20814e625ad33b6fc675be7f1fae05b408f6518 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 2 May 2023 13:38:11 +0200 Subject: [PATCH 125/210] chore(release): v0.0.0-fetch.rc-13 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 37ee3bb34..9f01c21d5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-12", + "version": "0.0.0-fetch.rc-13", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/core/index.js", "module": "./lib/core/index.mjs", From 50c4c9cf39b99d5c4f5614acf468040750160073 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 3 May 2023 20:14:09 +0200 Subject: [PATCH 126/210] fix: stream response chunks as they come in Node.js (#1606) --- package.json | 2 +- pnpm-lock.yaml | 8 +- test/node/rest-api/https.node.test.ts | 46 ++++++++ .../{body => }/body-binary.node.test.ts | 4 +- .../{body => }/body-json.node.test.ts | 17 ++- .../response/body-stream.node.test.ts | 102 ++++++++++++++++++ .../{body => }/body-text.node.test.ts | 0 .../response/{body => }/body-xml.node.test.ts | 0 8 files changed, 160 insertions(+), 19 deletions(-) create mode 100644 test/node/rest-api/https.node.test.ts rename test/node/rest-api/response/{body => }/body-binary.node.test.ts (94%) rename test/node/rest-api/response/{body => }/body-json.node.test.ts (57%) create mode 100644 test/node/rest-api/response/body-stream.node.test.ts rename test/node/rest-api/response/{body => }/body-text.node.test.ts (100%) rename test/node/rest-api/response/{body => }/body-xml.node.test.ts (100%) diff --git a/package.json b/package.json index 9f01c21d5..2fc05f721 100644 --- a/package.json +++ b/package.json @@ -113,7 +113,7 @@ "@bundled-es-modules/js-levenshtein": "^2.0.1", "@bundled-es-modules/statuses": "^1.0.1", "@mswjs/cookies": "^1.0.0", - "@mswjs/interceptors": "^0.22.12", + "@mswjs/interceptors": "^0.22.13", "@open-draft/until": "^2.1.0", "@types/cookie": "^0.4.1", "@types/js-levenshtein": "^1.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 512c9cba0..f85bd0d6e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,7 +12,7 @@ specifiers: '@commitlint/cli': ^16.1.0 '@commitlint/config-conventional': ^16.0.0 '@mswjs/cookies': ^1.0.0 - '@mswjs/interceptors': ^0.22.12 + '@mswjs/interceptors': ^0.22.13 '@open-draft/test-server': ^0.4.2 '@open-draft/until': ^2.1.0 '@ossjs/release': ^0.4.0 @@ -85,7 +85,7 @@ dependencies: '@bundled-es-modules/js-levenshtein': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 '@mswjs/cookies': 1.0.0 - '@mswjs/interceptors': 0.22.12 + '@mswjs/interceptors': 0.22.13 '@open-draft/until': 2.1.0 '@types/cookie': 0.4.1 '@types/js-levenshtein': 1.1.1 @@ -2364,8 +2364,8 @@ packages: engines: {node: '>=14'} dev: false - /@mswjs/interceptors/0.22.12: - resolution: {integrity: sha512-SHzP8HCsgjpmFI+OXWIYSdDQBnNCmcb3TQOETRMWHaNjXFGt2EwniJWQXMfMRrmgdvyb8izGGhFArrBAx+2KSg==} + /@mswjs/interceptors/0.22.13: + resolution: {integrity: sha512-JMnl/eoF3cne6kvtJo9vZTpYum3ES1X6okfmSMRpvrCaodulN+QfVQ79Oyb/fZkHuI+pYpLVrTjGpBTOmZ6xcw==} engines: {node: '>=18'} dependencies: '@open-draft/deferred-promise': 2.1.0 diff --git a/test/node/rest-api/https.node.test.ts b/test/node/rest-api/https.node.test.ts new file mode 100644 index 000000000..f0d79a273 --- /dev/null +++ b/test/node/rest-api/https.node.test.ts @@ -0,0 +1,46 @@ +/** + * @jest-environment node + */ +import https from 'https' +import { HttpResponse, rest } from 'msw' +import { setupServer } from 'msw/node' + +const server = setupServer() + +beforeAll(() => { + server.listen() +}) + +afterEach(() => { + server.resetHandlers() +}) + +afterAll(() => { + server.close() +}) + +test('intercepts and mocks a request made via "https"', (done) => { + server.use( + rest.get('https://api.example.com/resource', () => { + return HttpResponse.text('Hello, world!') + }), + ) + const request = https.get('https://api.example.com/resource') + + request.on('response', (response) => { + const chunks: Array = [] + response.on('data', (chunk) => chunks.push(Buffer.from(chunk))) + + response.on('error', done) + response.once('end', () => { + expect(chunks).toHaveLength(1) + + const responseText = Buffer.concat(chunks).toString('utf8') + expect(responseText).toBe('Hello, world!') + + done() + }) + }) + + request.on('error', done) +}) diff --git a/test/node/rest-api/response/body/body-binary.node.test.ts b/test/node/rest-api/response/body-binary.node.test.ts similarity index 94% rename from test/node/rest-api/response/body/body-binary.node.test.ts rename to test/node/rest-api/response/body-binary.node.test.ts index 244a76c68..061e3eb63 100644 --- a/test/node/rest-api/response/body/body-binary.node.test.ts +++ b/test/node/rest-api/response/body-binary.node.test.ts @@ -8,9 +8,7 @@ import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' function getImageBuffer() { - return fs.readFileSync( - path.resolve(__dirname, '../../../../fixtures/image.jpg'), - ) + return fs.readFileSync(path.resolve(__dirname, '../../../fixtures/image.jpg')) } const server = setupServer( diff --git a/test/node/rest-api/response/body/body-json.node.test.ts b/test/node/rest-api/response/body-json.node.test.ts similarity index 57% rename from test/node/rest-api/response/body/body-json.node.test.ts rename to test/node/rest-api/response/body-json.node.test.ts index e1c05e788..66690ed41 100644 --- a/test/node/rest-api/response/body/body-json.node.test.ts +++ b/test/node/rest-api/response/body-json.node.test.ts @@ -1,7 +1,6 @@ /** * @jest-environment node */ -import fetch from 'node-fetch' import { HttpResponse, rest } from 'msw' import { setupServer } from 'msw/node' @@ -23,19 +22,15 @@ afterAll(() => { }) test('responds with a JSON response body', async () => { - const res = await fetch('http://localhost/json') + const response = await fetch('http://localhost/json') - expect(res.headers.get('content-type')).toBe('application/json') - - const json = await res.json() - expect(json).toEqual({ firstName: 'John' }) + expect(response.headers.get('content-type')).toBe('application/json') + expect(await response.json()).toEqual({ firstName: 'John' }) }) test('responds with a single number JSON response body', async () => { - const res = await fetch('http://localhost/number') - - expect(res.headers.get('content-type')).toBe('application/json') + const response = await fetch('http://localhost/number') - const json = await res.json() - expect(json).toEqual(123) + expect(response.headers.get('content-type')).toBe('application/json') + expect(await response.json()).toEqual(123) }) diff --git a/test/node/rest-api/response/body-stream.node.test.ts b/test/node/rest-api/response/body-stream.node.test.ts new file mode 100644 index 000000000..3213f0606 --- /dev/null +++ b/test/node/rest-api/response/body-stream.node.test.ts @@ -0,0 +1,102 @@ +/** + * @jest-environment node + */ +import https from 'https' +import { HttpResponse, rest, delay } from 'msw' +import { setupServer } from 'msw/node' + +const encoder = new TextEncoder() +const server = setupServer() + +beforeAll(() => { + server.listen() +}) + +afterEach(() => { + server.resetHandlers() +}) + +afterAll(() => { + server.close() +}) + +test('responds with a ReadableStream', async () => { + server.use( + rest.get('https://api.example.com/stream', () => { + const stream = new ReadableStream({ + start(controller) { + controller.enqueue(encoder.encode('hello')) + controller.enqueue(encoder.encode('world')) + controller.close() + }, + }) + + return new HttpResponse(stream, { + headers: { + 'Content-Type': 'text/event-stream', + }, + }) + }), + ) + + const response = await fetch('https://api.example.com/stream') + + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + expect(response.body).toBeInstanceOf(ReadableStream) + expect(response.body!.locked).toBe(false) + + expect(await response.text()).toBe('helloworld') +}) + +test('supports delays when enqueuing chunks', (done) => { + server.use( + rest.get('https://api.example.com/stream', () => { + const stream = new ReadableStream({ + async start(controller) { + controller.enqueue(encoder.encode('first')) + await delay(500) + + controller.enqueue(encoder.encode('second')) + await delay(500) + + controller.enqueue(encoder.encode('third')) + await delay(500) + controller.close() + }, + }) + + return new HttpResponse(stream, { + headers: { + 'Content-Type': 'text/event-stream', + }, + }) + }), + ) + + const request = https.get('https://api.example.com/stream', (response) => { + const chunks: Array<{ buffer: Buffer; timestamp: number }> = [] + + response.on('data', (data) => { + chunks.push({ + buffer: Buffer.from(data), + timestamp: Date.now(), + }) + }) + + response.once('end', () => { + const textChunks = chunks.map((chunk) => chunk.buffer.toString('utf8')) + expect(textChunks).toEqual(['first', 'second', 'third']) + + // Ensure that the chunks were sent over time, + // respecting the delay set in the mocked stream. + const chunkTimings = chunks.map((chunk) => chunk.timestamp) + expect(chunkTimings[1] - chunkTimings[0]).toBeGreaterThanOrEqual(490) + expect(chunkTimings[2] - chunkTimings[1]).toBeGreaterThanOrEqual(490) + + done() + }) + }) + + request.on('error', done) +}) diff --git a/test/node/rest-api/response/body/body-text.node.test.ts b/test/node/rest-api/response/body-text.node.test.ts similarity index 100% rename from test/node/rest-api/response/body/body-text.node.test.ts rename to test/node/rest-api/response/body-text.node.test.ts diff --git a/test/node/rest-api/response/body/body-xml.node.test.ts b/test/node/rest-api/response/body-xml.node.test.ts similarity index 100% rename from test/node/rest-api/response/body/body-xml.node.test.ts rename to test/node/rest-api/response/body-xml.node.test.ts From 8a527e96b8b27a02e9dce1b67669b153c3f5ff03 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sun, 7 May 2023 09:35:09 +0200 Subject: [PATCH 127/210] fix: prevent "abort" listener memory leak in RequestHandler (#1608) --- .../start/createFallbackRequestListener.ts | 6 +- .../start/createRequestListener.ts | 8 +- src/core/SetupApi.ts | 15 ++-- src/core/handlers/RequestHandler.ts | 15 ++-- src/core/utils/getResponse.ts | 80 ++++++------------- src/core/utils/handleRequest.test.ts | 22 ++--- src/core/utils/handleRequest.ts | 27 ++----- src/core/utils/internal/Disposable.ts | 9 +++ src/node/SetupServerApi.ts | 7 +- test/browser/msw-api/req/passthrough.test.ts | 15 +--- .../setup-worker/life-cycle-events/on.test.ts | 3 - .../node/msw-api/req/passthrough.node.test.ts | 10 +-- .../scenarios/fall-through.node.test.ts | 15 ++-- 13 files changed, 86 insertions(+), 146 deletions(-) create mode 100644 src/core/utils/internal/Disposable.ts diff --git a/src/browser/setupWorker/start/createFallbackRequestListener.ts b/src/browser/setupWorker/start/createFallbackRequestListener.ts index d5704b829..657923adc 100644 --- a/src/browser/setupWorker/start/createFallbackRequestListener.ts +++ b/src/browser/setupWorker/start/createFallbackRequestListener.ts @@ -19,6 +19,8 @@ export function createFallbackRequestListener( }) interceptor.on('request', async (request, requestId) => { + const requestCloneForLogs = request.clone() + const response = await handleRequest( request, requestId, @@ -26,10 +28,10 @@ export function createFallbackRequestListener( options, context.emitter, { - onMockedResponse(_, { handler, request, parsedRequest }) { + onMockedResponse(_, { handler, parsedRequest }) { if (!options.quiet) { context.emitter.once('response:mocked', (response) => { - handler.log(request, response, parsedRequest) + handler.log(requestCloneForLogs, response, parsedRequest) }) } }, diff --git a/src/browser/setupWorker/start/createRequestListener.ts b/src/browser/setupWorker/start/createRequestListener.ts index a879119ca..2f32d15d9 100644 --- a/src/browser/setupWorker/start/createRequestListener.ts +++ b/src/browser/setupWorker/start/createRequestListener.ts @@ -29,6 +29,7 @@ export const createRequestListener = ( const requestId = message.payload.id const request = parseWorkerRequest(message.payload) + const requestCloneForLogs = request.clone() try { await handleRequest( @@ -41,10 +42,7 @@ export const createRequestListener = ( onPassthroughResponse() { messageChannel.postMessage('NOT_FOUND') }, - async onMockedResponse( - response, - { request, handler, parsedRequest }, - ) { + async onMockedResponse(response, { handler, parsedRequest }) { // Clone the mocked response so its body could be read // to buffer to be sent to the worker and also in the // ".log()" method of the request handler. @@ -65,7 +63,7 @@ export const createRequestListener = ( if (!options.quiet) { context.emitter.once('response:mocked', (response) => { - handler.log(request, response, parsedRequest) + handler.log(requestCloneForLogs, response, parsedRequest) }) } }, diff --git a/src/core/SetupApi.ts b/src/core/SetupApi.ts index 20a19c584..ea37b85d9 100644 --- a/src/core/SetupApi.ts +++ b/src/core/SetupApi.ts @@ -8,11 +8,12 @@ import { LifeCycleEventEmitter } from './sharedOptions' import { devUtils } from './utils/internal/devUtils' import { pipeEvents } from './utils/internal/pipeEvents' import { toReadonlyArray } from './utils/internal/toReadonlyArray' +import { Disposable } from './utils/internal/Disposable' /** * Generic class for the mock API setup. */ -export abstract class SetupApi { +export abstract class SetupApi extends Disposable { protected initialHandlers: ReadonlyArray protected currentHandlers: Array protected readonly emitter: Emitter @@ -21,6 +22,8 @@ export abstract class SetupApi { public readonly events: LifeCycleEventEmitter constructor(...initialHandlers: Array) { + super() + this.validateHandlers(...initialHandlers) this.initialHandlers = toReadonlyArray(initialHandlers) @@ -31,6 +34,11 @@ export abstract class SetupApi { pipeEvents(this.emitter, this.publicEmitter) this.events = this.createLifeCycleEvents() + + this.subscriptions.push(() => { + this.emitter.removeAllListeners() + this.publicEmitter.removeAllListeners() + }) } private validateHandlers(...handlers: ReadonlyArray): void { @@ -46,11 +54,6 @@ export abstract class SetupApi { } } - protected dispose(): void { - this.emitter.removeAllListeners() - this.publicEmitter.removeAllListeners() - } - public use(...runtimeHandlers: Array): void { this.currentHandlers.unshift(...runtimeHandlers) } diff --git a/src/core/handlers/RequestHandler.ts b/src/core/handlers/RequestHandler.ts index 90621f30f..bf2ce0cd2 100644 --- a/src/core/handlers/RequestHandler.ts +++ b/src/core/handlers/RequestHandler.ts @@ -2,7 +2,7 @@ import { invariant } from 'outvariant' import { getCallFrame } from '../utils/internal/getCallFrame' import { isIterable } from '../utils/internal/isIterable' import type { ResponseResolutionContext } from '../utils/getResponse' -import type { MaybePromise } from '..//typeUtils' +import type { MaybePromise } from '../typeUtils' import { StrictRequest, StrictResponse } from '..//HttpResponse' export type DefaultRequestMultipartBody = Record< @@ -177,16 +177,19 @@ export abstract class RequestHandler< return null } + const mainRequestRef = request.clone() + // Immediately mark the handler as used. // Can't await the resolver to be resolved because it's potentially // asynchronous, and there may be multiple requests hitting this handler. this.isUsed = true - const requestClone = request.clone() - - const parsedResult = await this.parse(request.clone(), resolutionContext) + const parsedResult = await this.parse( + mainRequestRef.clone(), + resolutionContext, + ) const shouldInterceptRequest = this.predicate( - request.clone(), + mainRequestRef.clone(), parsedResult, resolutionContext, ) @@ -208,7 +211,7 @@ export abstract class RequestHandler< const executionResult = this.createExecutionResult( // Pass the cloned request to the result so that logging // and other consumers could read its body once more. - requestClone, + mainRequestRef, parsedResult, mockedResponse, ) diff --git a/src/core/utils/getResponse.ts b/src/core/utils/getResponse.ts index ebf31dd83..2644ebf28 100644 --- a/src/core/utils/getResponse.ts +++ b/src/core/utils/getResponse.ts @@ -4,8 +4,7 @@ import { } from '../handlers/RequestHandler' export interface ResponseLookupResult { - handler?: RequestHandler - request: Request + handler: RequestHandler parsedRequest?: any response?: Response } @@ -14,14 +13,6 @@ export interface ResponseResolutionContext { baseUrl?: string } -async function filterAsync( - target: Array, - predicate: (item: Item) => Promise, -): Promise> { - const results = await Promise.all(target.map(predicate)) - return target.filter((_, index) => results[index]) -} - /** * Returns a mocked response for a given request using following request handlers. */ @@ -29,61 +20,36 @@ export const getResponse = async >( request: Request, handlers: Handler, resolutionContext?: ResponseResolutionContext, -): Promise => { - const relevantHandlers = await filterAsync(handlers, (handler) => { - return handler.test(request, resolutionContext).catch(() => false) - }) - - if (relevantHandlers.length === 0) { - return { - request, - handler: undefined, - response: undefined, - } - } +): Promise => { + let matchingHandler: RequestHandler | null = null + let result: RequestHandlerExecutionResult | null = null - const result = await relevantHandlers.reduce< - Promise | null> - >(async (executionResult, handler) => { - const previousResults = await executionResult + for (const handler of handlers) { + result = await handler.run(request, resolutionContext) - if (!!previousResults?.response) { - return executionResult + // If the handler produces some result for this request, + // it automatically becomes matching. + if (result !== null) { + matchingHandler = handler } - const result = await handler.run(request, resolutionContext) - - if (result === null) { - return null - } - - if (!result.response) { - return { - request: result.request, - handler: result.handler, - response: undefined, - parsedResult: result.parsedResult, - } + // Stop the lookup if this handler returns a mocked response. + // If it doesn't, it will still be considered the last matching + // handler until any of them returns a response. This way we can + // distinguish between fallthrough handlers without responses + // and the lack of a matching handler. + if (result?.response) { + break } + } - return result - }, Promise.resolve(null)) - - // Although reducing a list of relevant request handlers, it's possible - // that in the end there will be no handler associted with the request - // (i.e. if relevant handlers are fall-through). - if (!result) { + if (matchingHandler) { return { - request, - handler: undefined, - response: undefined, + handler: matchingHandler, + parsedRequest: result?.parsedResult, + response: result?.response, } } - return { - handler: result.handler, - request: result.request, - parsedRequest: result.parsedResult, - response: result.response, - } + return null } diff --git a/src/core/utils/handleRequest.test.ts b/src/core/utils/handleRequest.test.ts index 677e54748..cbc729563 100644 --- a/src/core/utils/handleRequest.test.ts +++ b/src/core/utils/handleRequest.test.ts @@ -137,7 +137,7 @@ test('reports request as unhandled when it has no matching request handlers', as expect(callbacks.onMockedResponse).not.toHaveBeenCalled() }) -test('returns undefined and warns on a request handler that returns no response', async () => { +test('returns undefined on a request handler that returns no response', async () => { const { emitter, events } = setup() const requestId = uuidv4() @@ -167,14 +167,10 @@ test('returns undefined and warns on a request handler that returns no response' expect(callbacks.onPassthroughResponse).toHaveBeenNthCalledWith(1, request) expect(callbacks.onMockedResponse).not.toHaveBeenCalled() - expect(console.warn).toHaveBeenCalledTimes(1) - const warning = (console.warn as unknown as jest.SpyInstance).mock.calls[0][0] - - expect(warning).toContain( - '[MSW] Expected response resolver to return a mocked response Object, but got undefined. The original response is going to be used instead.', - ) - expect(warning).toContain('GET /user') - expect(warning).toMatch(/\d+:\d+/) + /** + * @note Returning undefined from a resolver no longer prints a warning. + */ + expect(console.warn).toHaveBeenCalledTimes(0) }) test('returns the mocked response for a request with a matching request handler', async () => { @@ -229,10 +225,6 @@ test('returns the mocked response for a request with a matching request handler' expect(lookupResultParam).toEqual({ handler: lookupResult.handler, parsedRequest: lookupResult.parsedRequest, - request: expect.objectContaining({ - method: lookupResult.request.method, - url: lookupResult.request.url, - }), response: expect.objectContaining({ status: lookupResult.response.status, statusText: lookupResult.response.statusText, @@ -319,10 +311,6 @@ test('returns a transformed response if the "transformResponse" option is provid expect(lookupResultParam).toEqual({ handler: lookupResult.handler, parsedRequest: lookupResult.parsedRequest, - request: expect.objectContaining({ - method: lookupResult.request.method, - url: lookupResult.request.url, - }), response: expect.objectContaining({ status: lookupResult.response.status, statusText: lookupResult.response.statusText, diff --git a/src/core/utils/handleRequest.ts b/src/core/utils/handleRequest.ts index 4c06ecbca..9209f85d3 100644 --- a/src/core/utils/handleRequest.ts +++ b/src/core/utils/handleRequest.ts @@ -4,7 +4,6 @@ import { RequestHandler } from '../handlers/RequestHandler' import { LifeCycleEventsMap, SharedOptions } from '../sharedOptions' import { RequiredDeep } from '../typeUtils' import { ResponseLookupResult, getResponse } from './getResponse' -import { devUtils } from './internal/devUtils' import { onUnhandledRequest } from './request/onUnhandledRequest' import { readResponseCookies } from './request/readResponseCookies' @@ -68,11 +67,9 @@ export async function handleRequest( throw lookupResult.error } - const { handler, response } = lookupResult.data - - // When there's no handler for the request, consider it unhandled. - // Allow the developer to react to such cases. - if (!handler) { + // If the handler lookup returned nothing, no request handler was found + // matching this request. Report the request as unhandled. + if (!lookupResult.data) { await onUnhandledRequest(request, handlers, options.onUnhandledRequest) emitter.emit('request:unhandled', request, requestId) emitter.emit('request:end', request, requestId) @@ -80,28 +77,18 @@ export async function handleRequest( return } + const { response } = lookupResult.data + // When the handled request returned no mocked response, warn the developer, // as it may be an oversight on their part. Perform the request as-is. if (!response) { - devUtils.warn( - `\ -Expected response resolver to return a mocked response Object, but got %s. The original response is going to be used instead.\ -\n - \u2022 %s - %s\ -`, - response, - handler.info.header, - handler.info.callFrame, - ) - emitter.emit('request:end', request, requestId) handleRequestOptions?.onPassthroughResponse?.(request) return } - // When the developer explicitly returned "req.passthrough()" do not warn them. - // Perform the request as-is. + // Perform the request as-is when the developer explicitly returned "req.passthrough()". + // This produces no warning as the request was handled. if ( response.status === 302 && response.headers.get('x-msw-intention') === 'passthrough' diff --git a/src/core/utils/internal/Disposable.ts b/src/core/utils/internal/Disposable.ts new file mode 100644 index 000000000..ca61652ab --- /dev/null +++ b/src/core/utils/internal/Disposable.ts @@ -0,0 +1,9 @@ +export type DisposableSubscription = () => Promise | void + +export class Disposable { + protected subscriptions: Array = [] + + public async dispose() { + await Promise.all(this.subscriptions.map((subscription) => subscription())) + } +} diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 4984511db..1b809a232 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -83,6 +83,10 @@ export class SetupServerApi // Apply the interceptor when starting the server. this.interceptor.apply() + this.subscriptions.push(() => { + this.interceptor.dispose() + }) + // Assert that the interceptor has been applied successfully. // Also guards us from forgetting to call "interceptor.apply()" // as a part of the "listen" method. @@ -115,7 +119,6 @@ ${`${pragma} ${header}`} } public close(): void { - super.dispose() - this.interceptor.dispose() + this.dispose() } } diff --git a/test/browser/msw-api/req/passthrough.test.ts b/test/browser/msw-api/req/passthrough.test.ts index 9e1d911a0..25e916ded 100644 --- a/test/browser/msw-api/req/passthrough.test.ts +++ b/test/browser/msw-api/req/passthrough.test.ts @@ -1,4 +1,5 @@ -import { HttpResponse, passthrough, rest, SetupWorkerApi } from 'msw' +import { HttpResponse, passthrough, rest } from 'msw' +import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../playwright.extend' const PASSTHROUGH_EXAMPLE = require.resolve('./passthrough.mocks.ts') @@ -94,10 +95,9 @@ test('does not allow fall-through when returning "req.passthrough" call in the r expect(consoleSpy.get('warning')).toBeUndefined() }) -test('prints a warning and performs a request as-is if nothing was returned from the resolver', async ({ +test('performs a request as-is if nothing was returned from the resolver', async ({ createServer, loadExample, - spyOnConsole, fetch, page, }) => { @@ -107,7 +107,6 @@ test('prints a warning and performs a request as-is if nothing was returned from }) }) - const consoleSpy = spyOnConsole() await loadExample(PASSTHROUGH_EXAMPLE) const endpointUrl = server.http.url('/user') @@ -128,12 +127,4 @@ test('prints a warning and performs a request as-is if nothing was returned from expect(json).toEqual({ name: 'John', }) - - expect(consoleSpy.get('warning')).toEqual( - expect.arrayContaining([ - expect.stringContaining( - '[MSW] Expected response resolver to return a mocked response Object, but got undefined. The original response is going to be used instead.', - ), - ]), - ) }) diff --git a/test/browser/msw-api/setup-worker/life-cycle-events/on.test.ts b/test/browser/msw-api/setup-worker/life-cycle-events/on.test.ts index 5ac2a5596..fe576b330 100644 --- a/test/browser/msw-api/setup-worker/life-cycle-events/on.test.ts +++ b/test/browser/msw-api/setup-worker/life-cycle-events/on.test.ts @@ -79,9 +79,6 @@ test('emits events for a handled request with no response', async ({ expect(consoleSpy.get('warning')).toEqual([ `[request:start] POST ${url} ${requestId}`, - expect.stringContaining( - '[MSW] Expected response resolver to return a mocked response Object', - ), `[request:end] POST ${url} ${requestId}`, `[response:bypass] original-response ${requestId}`, ]) diff --git a/test/node/msw-api/req/passthrough.node.test.ts b/test/node/msw-api/req/passthrough.node.test.ts index 030a37a5b..b7c3b5da5 100644 --- a/test/node/msw-api/req/passthrough.node.test.ts +++ b/test/node/msw-api/req/passthrough.node.test.ts @@ -74,7 +74,7 @@ it('does not allow fall-through when returning "req.passthrough" call in the res expect(console.warn).not.toHaveBeenCalled() }) -it('prints a warning and performs a request as-is if nothing was returned from the resolver', async () => { +it('performs a request as-is if nothing was returned from the resolver', async () => { const endpointUrl = httpServer.http.url('/user') server.use( rest.post(endpointUrl, () => { @@ -88,12 +88,4 @@ it('prints a warning and performs a request as-is if nothing was returned from t expect(json).toEqual({ name: 'John', }) - - const warning = (console.warn as any as jest.SpyInstance).mock.calls[0][0] - - expect(warning).toContain( - '[MSW] Expected response resolver to return a mocked response Object, but got undefined. The original response is going to be used instead.', - ) - expect(warning).toContain(`POST ${endpointUrl}`) - expect(console.warn).toHaveBeenCalledTimes(1) }) diff --git a/test/node/msw-api/setup-server/scenarios/fall-through.node.test.ts b/test/node/msw-api/setup-server/scenarios/fall-through.node.test.ts index 6f1547d95..c093efbcf 100644 --- a/test/node/msw-api/setup-server/scenarios/fall-through.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/fall-through.node.test.ts @@ -20,13 +20,14 @@ const server = setupServer( ) beforeAll(() => { - // Supress the "Expeted mocking resolver function to return a mocked response" warnings. - jest.spyOn(global.console, 'warn').mockImplementation() server.listen() }) +afterEach(() => { + jest.resetAllMocks() +}) + afterAll(() => { - jest.restoreAllMocks() server.close() }) @@ -37,8 +38,8 @@ test('falls through all relevant request handlers until response is returned', a expect(body).toEqual({ firstName: 'John', }) - expect(log).toBeCalledWith('[get] first') - expect(log).toBeCalledWith('[get] second') + expect(log).toHaveBeenNthCalledWith(1, '[get] first') + expect(log).toHaveBeenNthCalledWith(2, '[get] second') expect(log).not.toBeCalledWith('[get] third') }) @@ -49,6 +50,6 @@ test('falls through all relevant handlers even if none return response', async ( const { status } = res expect(status).toBe(404) - expect(log).toBeCalledWith('[post] first') - expect(log).toBeCalledWith('[post] second') + expect(log).toHaveBeenNthCalledWith(1, '[post] first') + expect(log).toHaveBeenNthCalledWith(2, '[post] second') }) From b159c288441447071a624e22097827e6080aa6b6 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 8 May 2023 17:46:37 +0200 Subject: [PATCH 128/210] chore(release): v0.0.0-fetch.rc-14 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2fc05f721..391917399 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-13", + "version": "0.0.0-fetch.rc-14", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/core/index.js", "module": "./lib/core/index.mjs", From ed9275a8120212366e659705525ecdef574cc43f Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 9 May 2023 12:10:08 +0200 Subject: [PATCH 129/210] test: add response FormData browser test --- .../response/body/body-formdata.mocks.ts | 14 +++++++++++++ .../response/body/body-formdata.test.ts | 21 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 test/browser/rest-api/response/body/body-formdata.mocks.ts create mode 100644 test/browser/rest-api/response/body/body-formdata.test.ts diff --git a/test/browser/rest-api/response/body/body-formdata.mocks.ts b/test/browser/rest-api/response/body/body-formdata.mocks.ts new file mode 100644 index 000000000..4fcf3ea45 --- /dev/null +++ b/test/browser/rest-api/response/body/body-formdata.mocks.ts @@ -0,0 +1,14 @@ +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' + +const worker = setupWorker( + rest.get('/user', async () => { + const data = new FormData() + data.append('name', 'Alice') + data.append('age', '32') + + return HttpResponse.formData(data) + }), +) + +worker.start() diff --git a/test/browser/rest-api/response/body/body-formdata.test.ts b/test/browser/rest-api/response/body/body-formdata.test.ts new file mode 100644 index 000000000..13991ee68 --- /dev/null +++ b/test/browser/rest-api/response/body/body-formdata.test.ts @@ -0,0 +1,21 @@ +import { test, expect } from '../.././../playwright.extend' + +test('sends a FormData in a mocked response', async ({ + loadExample, + fetch, +}) => { + await loadExample(require.resolve('./body-formdata.mocks.ts')) + const res = await fetch('/user') + + const headers = await res.allHeaders() + expect(headers).toHaveProperty( + 'content-type', + expect.stringContaining('multipart/form-data'), + ) + expect(headers).toHaveProperty('x-powered-by', 'msw') + + const text = await res.text() + expect(text).toMatch( + /------WebKitFormBoundary.+?\r\nContent-Disposition: form-data; name="name"\r\n\r\nAlice\r\n------WebKitFormBoundary.+?\r\nContent-Disposition: form-data; name="age"\r\n\r\n32\r\n------WebKitFormBoundary.+?--/gm, + ) +}) From f663eebf980b90ad3927e1efa8bc66baf84d96b7 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 9 May 2023 12:12:00 +0200 Subject: [PATCH 130/210] test: add Blob response browser test --- .../rest-api/response/body/body-blob.mocks.ts | 14 ++++++++++++++ .../rest-api/response/body/body-blob.test.ts | 13 +++++++++++++ .../rest-api/response/body/body-formdata.test.ts | 5 +---- 3 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 test/browser/rest-api/response/body/body-blob.mocks.ts create mode 100644 test/browser/rest-api/response/body/body-blob.test.ts diff --git a/test/browser/rest-api/response/body/body-blob.mocks.ts b/test/browser/rest-api/response/body/body-blob.mocks.ts new file mode 100644 index 000000000..c79c4718a --- /dev/null +++ b/test/browser/rest-api/response/body/body-blob.mocks.ts @@ -0,0 +1,14 @@ +import { rest, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' + +const worker = setupWorker( + rest.get('/greeting', async () => { + const blob = new Blob(['hello world'], { + type: 'text/plain', + }) + + return new HttpResponse(blob) + }), +) + +worker.start() diff --git a/test/browser/rest-api/response/body/body-blob.test.ts b/test/browser/rest-api/response/body/body-blob.test.ts new file mode 100644 index 000000000..655be8fec --- /dev/null +++ b/test/browser/rest-api/response/body/body-blob.test.ts @@ -0,0 +1,13 @@ +import { test, expect } from '../.././../playwright.extend' + +test('responds to a request with a Blob', async ({ loadExample, fetch }) => { + await loadExample(require.resolve('./body-blob.mocks.ts')) + const res = await fetch('/greeting') + + const headers = await res.allHeaders() + expect(headers).toHaveProperty('content-type', 'text/plain') + expect(headers).toHaveProperty('x-powered-by', 'msw') + + const text = await res.text() + expect(text).toBe('hello world') +}) diff --git a/test/browser/rest-api/response/body/body-formdata.test.ts b/test/browser/rest-api/response/body/body-formdata.test.ts index 13991ee68..1e9a97475 100644 --- a/test/browser/rest-api/response/body/body-formdata.test.ts +++ b/test/browser/rest-api/response/body/body-formdata.test.ts @@ -1,9 +1,6 @@ import { test, expect } from '../.././../playwright.extend' -test('sends a FormData in a mocked response', async ({ - loadExample, - fetch, -}) => { +test('responds to a request with FormData', async ({ loadExample, fetch }) => { await loadExample(require.resolve('./body-formdata.mocks.ts')) const res = await fetch('/user') From 9c73b7db6cbb64d4c216626bf5b37671ff51942c Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 9 May 2023 12:24:05 +0200 Subject: [PATCH 131/210] test: add Blob json to request browser tests --- test/browser/rest-api/request/body/body-form-data.page.html | 6 ++++++ test/browser/rest-api/request/body/body-form-data.test.ts | 5 ++++- test/browser/rest-api/request/body/body.mocks.ts | 5 ++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/test/browser/rest-api/request/body/body-form-data.page.html b/test/browser/rest-api/request/body/body-form-data.page.html index 002fc728d..a02c0e95a 100644 --- a/test/browser/rest-api/request/body/body-form-data.page.html +++ b/test/browser/rest-api/request/body/body-form-data.page.html @@ -6,6 +6,12 @@ const data = new FormData() data.set('name', 'Alice') data.set('file', new File(['hello world'], 'file.txt')) + data.set( + 'ids', + new Blob([JSON.stringify([1, 2, 3])], { + type: 'application/json', + }), + ) fetch('/formData', { method: 'POST', diff --git a/test/browser/rest-api/request/body/body-form-data.test.ts b/test/browser/rest-api/request/body/body-form-data.test.ts index 3df07b278..2cb9e899c 100644 --- a/test/browser/rest-api/request/body/body-form-data.test.ts +++ b/test/browser/rest-api/request/body/body-form-data.test.ts @@ -17,6 +17,8 @@ test('handles FormData as a request body', async ({ await page.evaluate(() => window.makeRequest()) + await page.pause() + const res = await page.waitForResponse(makeUrl('/formData')) const status = res.status() const json = await res.json() @@ -24,6 +26,7 @@ test('handles FormData as a request body', async ({ expect(status).toBe(200) expect(json).toEqual({ name: 'Alice', - fileText: 'hello world', + file: 'hello world', + ids: [1, 2, 3], }) }) diff --git a/test/browser/rest-api/request/body/body.mocks.ts b/test/browser/rest-api/request/body/body.mocks.ts index 9a9f3a4ae..9b8266dbc 100644 --- a/test/browser/rest-api/request/body/body.mocks.ts +++ b/test/browser/rest-api/request/body/body.mocks.ts @@ -16,10 +16,13 @@ const worker = setupWorker( const name = data.get('name') const file = data.get('file') as File const fileText = await file.text() + const ids = data.get('ids') as File + const idsJson = JSON.parse(await ids.text()) return HttpResponse.json({ name, - fileText, + file: fileText, + ids: idsJson, }) }), ) From 2a287bcd99ba2de5596f0ddc292563e033f1b63e Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 12 May 2023 19:16:32 +0200 Subject: [PATCH 132/210] feat: add "useRemoteHandlers" sync layer --- package.json | 3 + pnpm-lock.yaml | 59 +++++++++++------ src/node/SetupServerApi.ts | 81 ++++++++++++++++++++++- src/node/glossary.ts | 2 +- src/node/index.ts | 1 + src/node/useRemoteHandler.ts | 121 +++++++++++++++++++++++++++++++++++ 6 files changed, 244 insertions(+), 23 deletions(-) create mode 100644 src/node/useRemoteHandler.ts diff --git a/package.json b/package.json index 391917399..d9ca62f6e 100644 --- a/package.json +++ b/package.json @@ -114,6 +114,7 @@ "@bundled-es-modules/statuses": "^1.0.1", "@mswjs/cookies": "^1.0.0", "@mswjs/interceptors": "^0.22.13", + "@open-draft/deferred-promise": "^2.1.0", "@open-draft/until": "^2.1.0", "@types/cookie": "^0.4.1", "@types/js-levenshtein": "^1.1.1", @@ -129,6 +130,8 @@ "node-fetch": "^2.6.7", "outvariant": "^1.4.0", "path-to-regexp": "^6.2.0", + "socket.io": "^4.6.1", + "socket.io-client": "^4.6.1", "strict-event-emitter": "^0.5.0", "type-fest": "^2.19.0", "yargs": "^17.3.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f85bd0d6e..a8daa9cde 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,6 +13,7 @@ specifiers: '@commitlint/config-conventional': ^16.0.0 '@mswjs/cookies': ^1.0.0 '@mswjs/interceptors': ^0.22.13 + '@open-draft/deferred-promise': ^2.1.0 '@open-draft/test-server': ^0.4.2 '@open-draft/until': ^2.1.0 '@ossjs/release': ^0.4.0 @@ -68,6 +69,8 @@ specifiers: regenerator-runtime: ^0.13.9 rimraf: ^3.0.2 simple-git-hooks: ^2.8.0 + socket.io: ^4.6.1 + socket.io-client: ^4.6.1 strict-event-emitter: ^0.5.0 ts-node: ^10.9.1 tsup: ^6.7.0 @@ -86,6 +89,7 @@ dependencies: '@bundled-es-modules/statuses': 1.0.1 '@mswjs/cookies': 1.0.0 '@mswjs/interceptors': 0.22.13 + '@open-draft/deferred-promise': 2.1.0 '@open-draft/until': 2.1.0 '@types/cookie': 0.4.1 '@types/js-levenshtein': 1.1.1 @@ -101,6 +105,8 @@ dependencies: node-fetch: 2.6.9 outvariant: 1.4.0 path-to-regexp: 6.2.1 + socket.io: 4.6.1 + socket.io-client: 4.6.1 strict-event-emitter: 0.5.0 type-fest: 2.19.0 yargs: 17.7.1 @@ -2512,7 +2518,6 @@ packages: /@socket.io/component-emitter/3.1.0: resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} - dev: true /@swc/core-darwin-arm64/1.3.49: resolution: {integrity: sha512-g7aIfXh6uPHmhLXdjXQq5t3HAyS/EdvujasW1DIS5k8UqOBaSoCcSGtLIjzcLv3KujqNfYcm118E+12H0nY6fQ==} @@ -2736,7 +2741,6 @@ packages: resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==} dependencies: '@types/node': 18.15.11 - dev: true /@types/debug/4.1.7: resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} @@ -2920,7 +2924,6 @@ packages: /@types/node/18.15.11: resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} - dev: true /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -3363,7 +3366,6 @@ packages: dependencies: mime-types: 2.1.35 negotiator: 0.6.3 - dev: true /acorn-globals/7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} @@ -4017,7 +4019,6 @@ packages: /base64id/2.0.0: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} - dev: true /batch/0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} @@ -4647,7 +4648,6 @@ packages: /cookie/0.4.2: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} - dev: true /cookie/0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} @@ -4682,7 +4682,6 @@ packages: dependencies: object-assign: 4.1.1 vary: 1.1.2 - dev: true /cosmiconfig-typescript-loader/2.0.2_faublg25f7qpbcz6w4cw6yyzse: resolution: {integrity: sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==} @@ -4888,7 +4887,6 @@ packages: optional: true dependencies: ms: 2.1.2 - dev: true /debug/4.3.4_supports-color@6.1.0: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -5176,10 +5174,23 @@ packages: once: 1.4.0 dev: true + /engine.io-client/6.4.0: + resolution: {integrity: sha512-GyKPDyoEha+XZ7iEqam49vz6auPnNJ9ZBfy89f+rMMas8AuiMWOZ9PVzu8xb9ZC6rafUqiGHSCfu22ih66E+1g==} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + engine.io-parser: 5.0.6 + ws: 8.11.0 + xmlhttprequest-ssl: 2.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + /engine.io-parser/5.0.6: resolution: {integrity: sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==} engines: {node: '>=10.0.0'} - dev: true /engine.io/6.4.1: resolution: {integrity: sha512-JFYQurD/nbsA5BSPmbaOSLa3tSVj8L6o4srSwXXY3NqE+gGUNmmPTbhn8tjzcCtSqhFgIeqef81ngny8JM25hw==} @@ -5199,7 +5210,6 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true /enhanced-resolve/5.12.0: resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} @@ -8124,14 +8134,12 @@ packages: /mime-db/1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - dev: true /mime-types/2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 - dev: true /mime/1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} @@ -8229,7 +8237,6 @@ packages: /ms/2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true /ms/2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -8297,7 +8304,6 @@ packages: /negotiator/0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} - dev: true /neo-async/2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -8400,7 +8406,6 @@ packages: /object-assign/4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - dev: true /object-copy/0.1.0: resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} @@ -9706,7 +9711,20 @@ packages: transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true + + /socket.io-client/4.6.1: + resolution: {integrity: sha512-5UswCV6hpaRsNg5kkEHVcbBIXEYoVbMQaHJBXJCyEQ+CiFPV1NIOY0XOFWG4XR4GZcB8Kn6AsRs/9cy9TbqVMQ==} + engines: {node: '>=10.0.0'} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + engine.io-client: 6.4.0 + socket.io-parser: 4.2.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false /socket.io-parser/4.2.2: resolution: {integrity: sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==} @@ -9716,7 +9734,6 @@ packages: debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true /socket.io/4.6.1: resolution: {integrity: sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==} @@ -9732,7 +9749,6 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true /sockjs-client/1.6.1_supports-color@6.1.0: resolution: {integrity: sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==} @@ -10743,7 +10759,6 @@ packages: /vary/1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - dev: true /w3c-xmlserializer/4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} @@ -11123,7 +11138,6 @@ packages: optional: true utf-8-validate: optional: true - dev: true /ws/8.13.0: resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} @@ -11147,6 +11161,11 @@ packages: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true + /xmlhttprequest-ssl/2.0.0: + resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} + engines: {node: '>=0.4.0'} + dev: false + /xtend/4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 1b809a232..e9b891074 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -5,6 +5,11 @@ import { Interceptor, InterceptorReadyState, } from '@mswjs/interceptors' + +import { io, Socket } from 'socket.io-client' +import { DeferredPromise } from '@open-draft/deferred-promise' +import { rest } from '~/core' + import { SetupApi } from '~/core/SetupApi' import { RequestHandler } from '~/core/handlers/RequestHandler' import { LifeCycleEventsMap, SharedOptions } from '~/core/sharedOptions' @@ -50,10 +55,56 @@ export class SetupServerApi */ private init(): void { this.interceptor.on('request', async (request, requestId) => { + console.log('[server] handling request:', request.method, request.url) + + const { syncServer } = this + const response = await handleRequest( request, requestId, - this.currentHandlers, + [ + /** + * Try to resolve the request from the sync WebSocket server. + */ + rest.all('*', async ({ request }) => { + console.log('[server] fixed handler:', request.method, request.url) + + if (syncServer == null) { + console.log('[server] no sync ws open, skipping...') + return + } + + console.log('[server] ws:', syncServer.connected) + + console.log('[server] sync ws is open! emitting "request"...') + syncServer.emit( + 'request', + { + method: request.method, + url: request.url, + // headers: Object.fromEntries(request.headers.entries()), + body: ['HEAD', 'GET'].includes(request.method) + ? undefined + : await request.clone().arrayBuffer(), + }, + requestId, + ) + + return new Promise((resolve) => { + syncServer.on('response', (responseInit: Record) => { + console.log('[server] response from WS:', responseInit) + + if (!responseInit) { + return resolve() + } + + const response = new Response(responseInit.body, responseInit) + resolve(response) + }) + }) + }), + ...this.currentHandlers, + ], this.resolvedOptions, this.emitter, ) @@ -74,12 +125,15 @@ export class SetupServerApi }) } - public listen(options: Partial = {}): void { + public async listen(options: Partial = {}): Promise { this.resolvedOptions = mergeRight( DEFAULT_LISTEN_OPTIONS, options, ) as RequiredDeep + // Lazily connect to the sync server, if it exists. + this.syncServer = await this.connectToSyncServer() + // Apply the interceptor when starting the server. this.interceptor.apply() @@ -121,4 +175,27 @@ ${`${pragma} ${header}`} public close(): void { this.dispose() } + + private syncServer: Socket | null = null + + private async connectToSyncServer(): Promise { + const connectionPromise = new DeferredPromise() + const socket = io('http://localhost:50222', { + // timeout: 300, + }) + + console.log('[server] connecting to the sync server...') + + socket.on('connect', () => { + console.log('[server] CONNECTED TO THE SYNC SERVER!') + connectionPromise.resolve(socket) + }) + + socket.io.on('error', (error) => { + console.error('[server] sync server connection error:', error.message) + connectionPromise.resolve(null) + }) + + return connectionPromise + } } diff --git a/src/node/glossary.ts b/src/node/glossary.ts index 42951a8ff..486e448d3 100644 --- a/src/node/glossary.ts +++ b/src/node/glossary.ts @@ -14,7 +14,7 @@ export interface SetupServer { * Starts requests interception based on the previously provided request handlers. * @see {@link https://mswjs.io/docs/api/setup-server/listen `server.listen()`} */ - listen(options?: PartialDeep): void + listen(options?: PartialDeep): Promise /** * Stops requests interception by restoring all augmented modules. diff --git a/src/node/index.ts b/src/node/index.ts index d9b2ea46c..40e28259a 100644 --- a/src/node/index.ts +++ b/src/node/index.ts @@ -1,3 +1,4 @@ export type { SetupServer } from './glossary' export { SetupServerApi } from './SetupServerApi' export { setupServer } from './setupServer' +export { useRemoteHandlers } from './useRemoteHandler' diff --git a/src/node/useRemoteHandler.ts b/src/node/useRemoteHandler.ts new file mode 100644 index 000000000..48bedfdfd --- /dev/null +++ b/src/node/useRemoteHandler.ts @@ -0,0 +1,121 @@ +import * as http from 'http' +import { Server as WebSocketServer } from 'socket.io' +import { Emitter } from 'strict-event-emitter' +import { DeferredPromise } from '@open-draft/deferred-promise' +import { RequestHandler, handleRequest } from '~/core' + +declare global { + var syncServer: WebSocketServer | undefined +} + +export async function useRemoteHandlers( + ...handlers: Array +): Promise { + console.log('[useRemoteHandlers] call, creating a server...') + + /** + * Phase 1: Create a sync WS server. + */ + const ws = await createSyncServer() + + console.log('[useRemoteHandlers] created a WS server (*)!', typeof ws) + + const emitter = new Emitter() + + /** + * @todo Need to remove these listeners because hot updates + * cause them to accumulate, resulting in a memory leak. + */ + ws.on('connection', (socket) => { + console.log('[useRemoteHandlers] incoming "connection"', socket.id) + + /** + * Phase 2: Handle incoming requests from other processes. + */ + socket.on( + 'request', + async (requestInit: Record, requestId: string) => { + console.log('[useRemoteHandlers] incoming "request":', requestInit) + + const request = new Request(requestInit.url, requestInit) + + const response = await handleRequest( + request, + requestId, + handlers, + { onUnhandledRequest() {} }, + emitter, + ) + + console.log('[useRemoteHandlers] outgoing "response":', response) + + if (response) { + socket.emit('response', { + status: response.status, + statusText: response.statusText, + // headers: Object.fromEntries(response.headers.entries()), + body: await response.arrayBuffer(), + }) + return + } + + socket.emit('response', undefined) + }, + ) + }) + + process.on('SIGTERM', () => closeSyncServer(ws)) + process.on('SIGINT', () => closeSyncServer(ws)) + + return +} + +async function createSyncServer(): Promise { + const existingSyncServer = globalThis.syncServer + + if (existingSyncServer) { + console.log('[useRemoteHandlers] reusing existing sync server') + return existingSyncServer + } + + const serverReady = new DeferredPromise() + + const httpServer = http.createServer() + const ws = + globalThis.syncServer || + new WebSocketServer(httpServer, { + cors: { + origin: '*', + methods: ['GET', 'POST'], + }, + }) + + // Assign the server instance on global scope + // so it could survive hot updates. + globalThis.syncServer = ws + + httpServer.listen(50222, 'localhost', () => { + serverReady.resolve(ws) + }) + + return serverReady +} + +async function closeSyncServer(server: WebSocketServer): Promise { + console.log('[useRemoteHandlers] closing sync server...') + + const serverClosePromise = new DeferredPromise() + + server.close((error) => { + if (error) { + console.log('[useRemoteHandlers] error closing sync server:', error) + return serverClosePromise.reject(error) + } + + console.log('[useRemoteHandlers] closed sync server!') + globalThis.syncServer = undefined + serverClosePromise.resolve() + }) + + return serverClosePromise +} From a20d446f3785417c97c98ae4fa69b318aeb47ad0 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 13 May 2023 13:41:45 +0200 Subject: [PATCH 133/210] fix: defer server connection to the first handler --- src/node/SetupServerApi.ts | 43 ++++++++++++++++++++++++++---------- src/node/glossary.ts | 2 +- src/node/useRemoteHandler.ts | 9 +++++++- 3 files changed, 40 insertions(+), 14 deletions(-) diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index e9b891074..f6559f06c 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -47,6 +47,8 @@ export class SetupServerApi }) this.resolvedOptions = {} as RequiredDeep + this.syncServerPromise = this.connectToSyncServer() + this.init() } @@ -55,9 +57,11 @@ export class SetupServerApi */ private init(): void { this.interceptor.on('request', async (request, requestId) => { - console.log('[server] handling request:', request.method, request.url) - - const { syncServer } = this + console.log( + '[server] interceptor "request" event:', + request.method, + request.url, + ) const response = await handleRequest( request, @@ -67,6 +71,26 @@ export class SetupServerApi * Try to resolve the request from the sync WebSocket server. */ rest.all('*', async ({ request }) => { + console.log( + '[server] [handleRequest] rest.all("*")', + request.method, + request.url, + ) + + /** + * @note Bypass the socket.io HTTP handshake + * so the WS connection doesn't hang forever. + */ + if (request.url.includes('socket.io')) { + return + } + + const syncServer = await this.syncServerPromise + console.log( + '\n\n [server] awaited sync server promise:', + typeof syncServer, + ) + console.log('[server] fixed handler:', request.method, request.url) if (syncServer == null) { @@ -125,15 +149,12 @@ export class SetupServerApi }) } - public async listen(options: Partial = {}): Promise { + public listen(options: Partial = {}): void { this.resolvedOptions = mergeRight( DEFAULT_LISTEN_OPTIONS, options, ) as RequiredDeep - // Lazily connect to the sync server, if it exists. - this.syncServer = await this.connectToSyncServer() - // Apply the interceptor when starting the server. this.interceptor.apply() @@ -176,18 +197,16 @@ ${`${pragma} ${header}`} this.dispose() } - private syncServer: Socket | null = null + private syncServerPromise: Promise private async connectToSyncServer(): Promise { const connectionPromise = new DeferredPromise() - const socket = io('http://localhost:50222', { - // timeout: 300, - }) + const socket = io('http://localhost:50222') console.log('[server] connecting to the sync server...') socket.on('connect', () => { - console.log('[server] CONNECTED TO THE SYNC SERVER!') + console.log('>>> `[server] CONNECTED TO THE SYNC SERVER!') connectionPromise.resolve(socket) }) diff --git a/src/node/glossary.ts b/src/node/glossary.ts index 486e448d3..42951a8ff 100644 --- a/src/node/glossary.ts +++ b/src/node/glossary.ts @@ -14,7 +14,7 @@ export interface SetupServer { * Starts requests interception based on the previously provided request handlers. * @see {@link https://mswjs.io/docs/api/setup-server/listen `server.listen()`} */ - listen(options?: PartialDeep): Promise + listen(options?: PartialDeep): void /** * Stops requests interception by restoring all augmented modules. diff --git a/src/node/useRemoteHandler.ts b/src/node/useRemoteHandler.ts index 48bedfdfd..609f32b0d 100644 --- a/src/node/useRemoteHandler.ts +++ b/src/node/useRemoteHandler.ts @@ -17,6 +17,7 @@ export async function useRemoteHandlers( * Phase 1: Create a sync WS server. */ const ws = await createSyncServer() + ws.removeAllListeners() console.log('[useRemoteHandlers] created a WS server (*)!', typeof ws) @@ -47,9 +48,15 @@ export async function useRemoteHandlers( emitter, ) - console.log('[useRemoteHandlers] outgoing "response":', response) + console.log('[useRemoteHandlers] outgoing "response":', typeof response) if (response) { + console.log( + '[useRemoteHandlers]', + response.status, + response.statusText, + ) + socket.emit('response', { status: response.status, statusText: response.statusText, From e9cc15386e7a2d9d70b90b97f4269517785293d8 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 13 May 2023 14:39:41 +0200 Subject: [PATCH 134/210] chore: use request/response serialize/deserialize utils --- src/core/utils/request/serializeUtils.ts | 87 ++++++++++++++++++++++++ src/node/SetupServerApi.ts | 74 +++++++++----------- src/node/useRemoteHandler.ts | 77 +++++++-------------- 3 files changed, 142 insertions(+), 96 deletions(-) create mode 100644 src/core/utils/request/serializeUtils.ts diff --git a/src/core/utils/request/serializeUtils.ts b/src/core/utils/request/serializeUtils.ts new file mode 100644 index 000000000..6964db4c4 --- /dev/null +++ b/src/core/utils/request/serializeUtils.ts @@ -0,0 +1,87 @@ +import { + headersToObject, + flattenHeadersObject, + type FlatHeadersObject, +} from 'headers-polyfill' + +export interface SerializedRequest { + method: string + url: string + headers: FlatHeadersObject + body?: ArrayBuffer +} + +export interface SerializedResponse { + status: number + statusText?: string + headers: FlatHeadersObject + body?: ArrayBuffer +} + +/** + * Serialize a given Fetch API `Request` into its + * plain object representation. Useful if you want + * to send this request over a message channel. + */ +export async function serializeRequest( + request: Request, +): Promise { + const requestBody = ['HEAD', 'GET'].includes(request.method) + ? undefined + : await request.clone().arrayBuffer() + + return { + method: request.method, + url: request.url, + headers: flattenHeadersObject(headersToObject(request.headers)), + body: requestBody, + } +} + +/** + * Create a Fetch API `Request` instance out of the + * given serialized request object. Useful to revive + * serialized requests during a message channel transfer. + */ +export function deserializeRequest(serialized: SerializedRequest): Request { + const request = new Request(serialized.url, { + method: serialized.method, + headers: serialized.headers, + body: serialized.body, + }) + + return request +} + +/** + * Serialize a given Fetch API `Response` into its + * plain object representation. Useful if you want + * to send this response over a message channel. + */ +export async function serializeResponse( + response: Response, +): Promise { + const responseBody = await response.clone().arrayBuffer() + + return { + status: response.status, + statusText: response.statusText, + headers: flattenHeadersObject(headersToObject(response.headers)), + body: responseBody, + } +} + +/** + * Create a Fetch API `Response` instance out of the + * given serialized response object. Useful to revive + * serialized responses during a message channel transfer. + */ +export function deserializeResponse(serialized: SerializedResponse): Response { + const response = new Response(serialized.body, { + status: serialized.status, + statusText: serialized.statusText, + headers: serialized.headers, + }) + + return response +} diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index f6559f06c..546ff48c7 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -18,6 +18,11 @@ import { mergeRight } from '~/core/utils/internal/mergeRight' import { handleRequest } from '~/core/utils/handleRequest' import { devUtils } from '~/core/utils/internal/devUtils' import { SetupServer } from './glossary' +import { + deserializeResponse, + SerializedResponse, + serializeRequest, +} from '~/core/utils/request/serializeUtils' const DEFAULT_LISTEN_OPTIONS: RequiredDeep = { onUnhandledRequest: 'warn', @@ -57,75 +62,58 @@ export class SetupServerApi */ private init(): void { this.interceptor.on('request', async (request, requestId) => { - console.log( - '[server] interceptor "request" event:', - request.method, - request.url, - ) - const response = await handleRequest( request, requestId, [ - /** - * Try to resolve the request from the sync WebSocket server. - */ rest.all('*', async ({ request }) => { - console.log( - '[server] [handleRequest] rest.all("*")', - request.method, - request.url, - ) - /** * @note Bypass the socket.io HTTP handshake - * so the WS connection doesn't hang forever. + * so the sync WS server connection doesn't hang forever. + * Check this as the first thing to unblock the handling. + * + * @todo Rely on the internal request header instead so + * we don't interfere if the user is using socket.io. */ if (request.url.includes('socket.io')) { return } const syncServer = await this.syncServerPromise - console.log( - '\n\n [server] awaited sync server promise:', - typeof syncServer, - ) - - console.log('[server] fixed handler:', request.method, request.url) + // If the sync server hasn't been started or failed to connect, + // skip this request handler altogether, it has no effect. if (syncServer == null) { console.log('[server] no sync ws open, skipping...') return } - console.log('[server] ws:', syncServer.connected) - - console.log('[server] sync ws is open! emitting "request"...') syncServer.emit( 'request', - { - method: request.method, - url: request.url, - // headers: Object.fromEntries(request.headers.entries()), - body: ['HEAD', 'GET'].includes(request.method) - ? undefined - : await request.clone().arrayBuffer(), - }, + await serializeRequest(request), requestId, ) - return new Promise((resolve) => { - syncServer.on('response', (responseInit: Record) => { - console.log('[server] response from WS:', responseInit) + const responsePromise = new DeferredPromise() - if (!responseInit) { - return resolve() - } + /** + * @todo Handle timeouts. + * @todo Handle socket errors. + */ + syncServer.on( + 'response', + (serializedResponse: SerializedResponse) => { + console.log('[server] response from WS:', serializedResponse) + + responsePromise.resolve( + serializedResponse + ? deserializeResponse(serializedResponse) + : undefined, + ) + }, + ) - const response = new Response(responseInit.body, responseInit) - resolve(response) - }) - }) + return await responsePromise }), ...this.currentHandlers, ], diff --git a/src/node/useRemoteHandler.ts b/src/node/useRemoteHandler.ts index 609f32b0d..cc29a2c45 100644 --- a/src/node/useRemoteHandler.ts +++ b/src/node/useRemoteHandler.ts @@ -3,6 +3,11 @@ import { Server as WebSocketServer } from 'socket.io' import { Emitter } from 'strict-event-emitter' import { DeferredPromise } from '@open-draft/deferred-promise' import { RequestHandler, handleRequest } from '~/core' +import { + SerializedRequest, + deserializeRequest, + serializeResponse, +} from '~/core/utils/request/serializeUtils' declare global { var syncServer: WebSocketServer | undefined @@ -11,35 +16,20 @@ declare global { export async function useRemoteHandlers( ...handlers: Array ): Promise { - console.log('[useRemoteHandlers] call, creating a server...') - - /** - * Phase 1: Create a sync WS server. - */ const ws = await createSyncServer() - ws.removeAllListeners() - console.log('[useRemoteHandlers] created a WS server (*)!', typeof ws) + // Remove all the listeners from the persisted WS instance. + // This ensures that there's no memory leak between hot updates + // since the code below adds the socket listeners once again. + ws.removeAllListeners() const emitter = new Emitter() - /** - * @todo Need to remove these listeners because hot updates - * cause them to accumulate, resulting in a memory leak. - */ ws.on('connection', (socket) => { - console.log('[useRemoteHandlers] incoming "connection"', socket.id) - - /** - * Phase 2: Handle incoming requests from other processes. - */ socket.on( 'request', - async (requestInit: Record, requestId: string) => { - console.log('[useRemoteHandlers] incoming "request":', requestInit) - - const request = new Request(requestInit.url, requestInit) - + async (serializedRequest: SerializedRequest, requestId: string) => { + const request = deserializeRequest(serializedRequest) const response = await handleRequest( request, requestId, @@ -48,25 +38,10 @@ export async function useRemoteHandlers( emitter, ) - console.log('[useRemoteHandlers] outgoing "response":', typeof response) - - if (response) { - console.log( - '[useRemoteHandlers]', - response.status, - response.statusText, - ) - - socket.emit('response', { - status: response.status, - statusText: response.statusText, - // headers: Object.fromEntries(response.headers.entries()), - body: await response.arrayBuffer(), - }) - return - } - - socket.emit('response', undefined) + socket.emit( + 'response', + response ? await serializeResponse(response) : undefined, + ) }, ) }) @@ -80,28 +55,24 @@ export async function useRemoteHandlers( async function createSyncServer(): Promise { const existingSyncServer = globalThis.syncServer + // Reuse the existing WebSocket server reference if it exists. + // It persists on the global scope between hot updates. if (existingSyncServer) { - console.log('[useRemoteHandlers] reusing existing sync server') return existingSyncServer } const serverReady = new DeferredPromise() const httpServer = http.createServer() - const ws = - globalThis.syncServer || - new WebSocketServer(httpServer, { - cors: { - origin: '*', - methods: ['GET', 'POST'], - }, - }) - - // Assign the server instance on global scope - // so it could survive hot updates. - globalThis.syncServer = ws + const ws = new WebSocketServer(httpServer, { + cors: { + origin: '*', + methods: ['GET', 'POST'], + }, + }) httpServer.listen(50222, 'localhost', () => { + globalThis.syncServer = ws serverReady.resolve(ws) }) From 7587800a8f1a8131a44ba23cf294b0f6b9376645 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 13 May 2023 14:45:56 +0200 Subject: [PATCH 135/210] chore: reuse req/res serialization for logging --- src/core/handlers/GraphQLHandler.ts | 8 +++--- src/core/handlers/RestHandler.ts | 8 +++--- ...est.ts => requestToLoggableObject.test.ts} | 6 ++--- .../utils/logging/requestToLoggableObject.ts | 22 ++++++++++++++++ ...st.ts => responseToLoggableObject.test.ts} | 14 +++++------ .../utils/logging/responseToLoggableObject.ts | 23 +++++++++++++++++ src/core/utils/logging/serializeRequest.ts | 25 ------------------- src/core/utils/logging/serializeResponse.ts | 22 ---------------- 8 files changed, 63 insertions(+), 65 deletions(-) rename src/core/utils/logging/{serializeRequest.test.ts => requestToLoggableObject.test.ts} (77%) create mode 100644 src/core/utils/logging/requestToLoggableObject.ts rename src/core/utils/logging/{serializeResponse.test.ts => responseToLoggableObject.test.ts} (80%) create mode 100644 src/core/utils/logging/responseToLoggableObject.ts delete mode 100644 src/core/utils/logging/serializeRequest.ts delete mode 100644 src/core/utils/logging/serializeResponse.ts diff --git a/src/core/handlers/GraphQLHandler.ts b/src/core/handlers/GraphQLHandler.ts index b6b7996f0..7085690dc 100644 --- a/src/core/handlers/GraphQLHandler.ts +++ b/src/core/handlers/GraphQLHandler.ts @@ -7,8 +7,8 @@ import { } from './RequestHandler' import { getTimestamp } from '../utils/logging/getTimestamp' import { getStatusCodeColor } from '../utils/logging/getStatusCodeColor' -import { serializeRequest } from '../utils/logging/serializeRequest' -import { serializeResponse } from '../utils/logging/serializeResponse' +import { requestToLoggableObject } from '../utils/logging/requestToLoggableObject' +import { responseToLoggableObject } from '../utils/logging/responseToLoggableObject' import { matchRequestUrl, Path } from '../utils/matching/matchRequestUrl' import { ParsedGraphQLRequest, @@ -167,8 +167,8 @@ Consider naming this operation or using "graphql.operation()" request handler to response: Response, parsedRequest: ParsedGraphQLRequest, ) { - const loggedRequest = await serializeRequest(request) - const loggedResponse = await serializeResponse(response) + const loggedRequest = await requestToLoggableObject(request) + const loggedResponse = await responseToLoggableObject(response) const statusColor = getStatusCodeColor(response.status) const requestInfo = parsedRequest?.operationName ? `${parsedRequest?.operationType} ${parsedRequest?.operationName}` diff --git a/src/core/handlers/RestHandler.ts b/src/core/handlers/RestHandler.ts index c90f7360a..53d7aaa09 100644 --- a/src/core/handlers/RestHandler.ts +++ b/src/core/handlers/RestHandler.ts @@ -3,8 +3,8 @@ import { devUtils } from '../utils/internal/devUtils' import { isStringEqual } from '../utils/internal/isStringEqual' import { getStatusCodeColor } from '../utils/logging/getStatusCodeColor' import { getTimestamp } from '../utils/logging/getTimestamp' -import { serializeRequest } from '../utils/logging/serializeRequest' -import { serializeResponse } from '../utils/logging/serializeResponse' +import { requestToLoggableObject } from '../utils/logging/requestToLoggableObject' +import { responseToLoggableObject } from '../utils/logging/responseToLoggableObject' import { Match, matchRequestUrl, @@ -145,8 +145,8 @@ export class RestHandler extends RequestHandler< async log(request: Request, response: Response) { const publicUrl = getPublicUrlFromRequest(request) - const loggedRequest = await serializeRequest(request) - const loggedResponse = await serializeResponse(response) + const loggedRequest = await requestToLoggableObject(request) + const loggedResponse = await responseToLoggableObject(response) const statusColor = getStatusCodeColor(response.status) console.groupCollapsed( diff --git a/src/core/utils/logging/serializeRequest.test.ts b/src/core/utils/logging/requestToLoggableObject.test.ts similarity index 77% rename from src/core/utils/logging/serializeRequest.test.ts rename to src/core/utils/logging/requestToLoggableObject.test.ts index 3a964033a..6a6cdbccb 100644 --- a/src/core/utils/logging/serializeRequest.test.ts +++ b/src/core/utils/logging/requestToLoggableObject.test.ts @@ -1,9 +1,9 @@ import { encodeBuffer } from '@mswjs/interceptors' import { Headers } from 'headers-polyfill' -import { serializeRequest } from './serializeRequest' +import { requestToLoggableObject } from './requestToLoggableObject' test('serializes given Request instance into a plain object', async () => { - const request = await serializeRequest( + const request = await requestToLoggableObject( new Request(new URL('http://test.mswjs.io/user'), { method: 'POST', headers: new Headers({ @@ -15,7 +15,7 @@ test('serializes given Request instance into a plain object', async () => { ) expect(request.method).toBe('POST') - expect(request.url.href).toBe('http://test.mswjs.io/user') + expect(request.url).toBe('http://test.mswjs.io/user') expect(request.headers).toEqual({ 'content-type': 'text/plain', 'x-header': 'secret', diff --git a/src/core/utils/logging/requestToLoggableObject.ts b/src/core/utils/logging/requestToLoggableObject.ts new file mode 100644 index 000000000..9a3800d99 --- /dev/null +++ b/src/core/utils/logging/requestToLoggableObject.ts @@ -0,0 +1,22 @@ +import { SerializedRequest, serializeRequest } from '../request/serializeUtils' + +export interface LoggableRequestObject extends Omit { + body: string +} + +const textDecoder = new TextDecoder() + +/** + * Formats a mocked request for introspection in browser's console. + */ +export async function requestToLoggableObject( + request: Request, +): Promise { + const serializedRequest = await serializeRequest(request) + const requestText = textDecoder.decode(serializedRequest.body) + + return { + ...serializedRequest, + body: requestText, + } +} diff --git a/src/core/utils/logging/serializeResponse.test.ts b/src/core/utils/logging/responseToLoggableObject.test.ts similarity index 80% rename from src/core/utils/logging/serializeResponse.test.ts rename to src/core/utils/logging/responseToLoggableObject.test.ts index 171df65e7..ab0c612d6 100644 --- a/src/core/utils/logging/serializeResponse.test.ts +++ b/src/core/utils/logging/responseToLoggableObject.test.ts @@ -2,10 +2,10 @@ * @jest-environment node */ import { encodeBuffer } from '@mswjs/interceptors' -import { serializeResponse } from './serializeResponse' +import { responseToLoggableObject } from './responseToLoggableObject' it('serializes response without body', async () => { - const result = await serializeResponse(new Response(null)) + const result = await responseToLoggableObject(new Response(null)) expect(result.status).toBe(200) expect(result.statusText).toBe('') @@ -14,7 +14,7 @@ it('serializes response without body', async () => { }) it('serializes a plain text response', async () => { - const result = await serializeResponse( + const result = await responseToLoggableObject( new Response('hello world', { status: 201, statusText: 'Created', @@ -38,7 +38,7 @@ it('serializes a JSON response', async () => { 'Content-Type': 'application/json', }, }) - const result = await serializeResponse(response) + const result = await responseToLoggableObject(response) expect(result.headers).toEqual({ 'content-type': 'application/json', @@ -49,14 +49,14 @@ it('serializes a JSON response', async () => { it('serializes a ArrayBuffer response', async () => { const data = encodeBuffer('hello world') const response = new Response(data) - const result = await serializeResponse(response) + const result = await responseToLoggableObject(response) expect(result.body).toBe('hello world') }) it('serializes a Blob response', async () => { const response = new Response(new Blob(['hello world'])) - const result = await serializeResponse(response) + const result = await responseToLoggableObject(response) expect(result.body).toBe('hello world') }) @@ -66,7 +66,7 @@ it('serializes a FormData response', async () => { data.set('firstName', 'Alice') data.set('age', '32') const response = new Response(data) - const result = await serializeResponse(response) + const result = await responseToLoggableObject(response) expect(result.body).toContain( `Content-Disposition: form-data; name="firstName"\r\n\r\nAlice`, diff --git a/src/core/utils/logging/responseToLoggableObject.ts b/src/core/utils/logging/responseToLoggableObject.ts new file mode 100644 index 000000000..f864eafa0 --- /dev/null +++ b/src/core/utils/logging/responseToLoggableObject.ts @@ -0,0 +1,23 @@ +import { + SerializedResponse, + serializeResponse, +} from '../request/serializeUtils' + +export interface LoggableResponseObject + extends Omit { + body: string +} + +const textDecoder = new TextDecoder() + +export async function responseToLoggableObject( + response: Response, +): Promise { + const serializedResponse = await serializeResponse(response) + const responseText = textDecoder.decode(serializedResponse.body) + + return { + ...serializedResponse, + body: responseText, + } +} diff --git a/src/core/utils/logging/serializeRequest.ts b/src/core/utils/logging/serializeRequest.ts deleted file mode 100644 index f0e5d9780..000000000 --- a/src/core/utils/logging/serializeRequest.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { HeadersObject, headersToObject } from 'headers-polyfill' - -export interface LoggedRequest { - url: URL - method: string - headers: HeadersObject - body: string -} - -/** - * Formats a mocked request for introspection in browser's console. - */ -export async function serializeRequest( - request: Request, -): Promise { - const requestClone = request.clone() - const requestText = await requestClone.text() - - return { - url: new URL(request.url), - method: request.method, - headers: headersToObject(request.headers), - body: requestText, - } -} diff --git a/src/core/utils/logging/serializeResponse.ts b/src/core/utils/logging/serializeResponse.ts deleted file mode 100644 index fd33dc37a..000000000 --- a/src/core/utils/logging/serializeResponse.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { HeadersObject, headersToObject } from 'headers-polyfill' - -export interface SerializedResponse { - status: number - statusText: string - headers: HeadersObject - body: string -} - -export async function serializeResponse( - response: Response, -): Promise { - const responseClone = response.clone() - const responseText = await responseClone.text() - - return { - status: responseClone.status, - statusText: responseClone.statusText, - headers: headersToObject(responseClone.headers), - body: responseText, - } -} From 68727ebc6c13ce80f3b3105f3e3bb732d0ae9022 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 13 May 2023 14:50:35 +0200 Subject: [PATCH 136/210] chore: annotate sync server events map --- src/node/SetupServerApi.ts | 28 ++++++++---------- src/node/useRemoteHandler.ts | 55 ++++++++++++++++++++++-------------- 2 files changed, 45 insertions(+), 38 deletions(-) diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 546ff48c7..07889e9ea 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -5,11 +5,9 @@ import { Interceptor, InterceptorReadyState, } from '@mswjs/interceptors' - import { io, Socket } from 'socket.io-client' import { DeferredPromise } from '@open-draft/deferred-promise' import { rest } from '~/core' - import { SetupApi } from '~/core/SetupApi' import { RequestHandler } from '~/core/handlers/RequestHandler' import { LifeCycleEventsMap, SharedOptions } from '~/core/sharedOptions' @@ -20,9 +18,9 @@ import { devUtils } from '~/core/utils/internal/devUtils' import { SetupServer } from './glossary' import { deserializeResponse, - SerializedResponse, serializeRequest, } from '~/core/utils/request/serializeUtils' +import { SyncServerEventsMap } from './useRemoteHandler' const DEFAULT_LISTEN_OPTIONS: RequiredDeep = { onUnhandledRequest: 'warn', @@ -100,18 +98,13 @@ export class SetupServerApi * @todo Handle timeouts. * @todo Handle socket errors. */ - syncServer.on( - 'response', - (serializedResponse: SerializedResponse) => { - console.log('[server] response from WS:', serializedResponse) - - responsePromise.resolve( - serializedResponse - ? deserializeResponse(serializedResponse) - : undefined, - ) - }, - ) + syncServer.on('response', (serializedResponse) => { + responsePromise.resolve( + serializedResponse + ? deserializeResponse(serializedResponse) + : undefined, + ) + }) return await responsePromise }), @@ -185,10 +178,11 @@ ${`${pragma} ${header}`} this.dispose() } - private syncServerPromise: Promise + private syncServerPromise: Promise | null> private async connectToSyncServer(): Promise { - const connectionPromise = new DeferredPromise() + const connectionPromise = + new DeferredPromise | null>() const socket = io('http://localhost:50222') console.log('[server] connecting to the sync server...') diff --git a/src/node/useRemoteHandler.ts b/src/node/useRemoteHandler.ts index cc29a2c45..6d98ba0d1 100644 --- a/src/node/useRemoteHandler.ts +++ b/src/node/useRemoteHandler.ts @@ -5,6 +5,7 @@ import { DeferredPromise } from '@open-draft/deferred-promise' import { RequestHandler, handleRequest } from '~/core' import { SerializedRequest, + SerializedResponse, deserializeRequest, serializeResponse, } from '~/core/utils/request/serializeUtils' @@ -13,6 +14,14 @@ declare global { var syncServer: WebSocketServer | undefined } +export interface SyncServerEventsMap { + request( + serializedRequest: SerializedRequest, + requestId: string, + ): Promise | void + response(serializedResponse?: SerializedResponse): Promise | void +} + export async function useRemoteHandlers( ...handlers: Array ): Promise { @@ -23,27 +32,27 @@ export async function useRemoteHandlers( // since the code below adds the socket listeners once again. ws.removeAllListeners() + /** + * @todo Decide if remote handlers expose life-cycle events API. + */ const emitter = new Emitter() ws.on('connection', (socket) => { - socket.on( - 'request', - async (serializedRequest: SerializedRequest, requestId: string) => { - const request = deserializeRequest(serializedRequest) - const response = await handleRequest( - request, - requestId, - handlers, - { onUnhandledRequest() {} }, - emitter, - ) - - socket.emit( - 'response', - response ? await serializeResponse(response) : undefined, - ) - }, - ) + socket.on('request', async (serializedRequest, requestId) => { + const request = deserializeRequest(serializedRequest) + const response = await handleRequest( + request, + requestId, + handlers, + { onUnhandledRequest() {} }, + emitter, + ) + + socket.emit( + 'response', + response ? await serializeResponse(response) : undefined, + ) + }) }) process.on('SIGTERM', () => closeSyncServer(ws)) @@ -52,7 +61,9 @@ export async function useRemoteHandlers( return } -async function createSyncServer(): Promise { +async function createSyncServer(): Promise< + WebSocketServer +> { const existingSyncServer = globalThis.syncServer // Reuse the existing WebSocket server reference if it exists. @@ -61,10 +72,12 @@ async function createSyncServer(): Promise { return existingSyncServer } - const serverReady = new DeferredPromise() + const serverReady = new DeferredPromise< + WebSocketServer + >() const httpServer = http.createServer() - const ws = new WebSocketServer(httpServer, { + const ws = new WebSocketServer(httpServer, { cors: { origin: '*', methods: ['GET', 'POST'], From a2efc2944e219d303772fa17e70493c0d392ece9 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 13 May 2023 14:55:03 +0200 Subject: [PATCH 137/210] fix: bypass internal socket requests using "x-msw-request-type" header --- src/node/SetupServerApi.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 07889e9ea..577f5aff9 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -65,15 +65,11 @@ export class SetupServerApi requestId, [ rest.all('*', async ({ request }) => { - /** - * @note Bypass the socket.io HTTP handshake - * so the sync WS server connection doesn't hang forever. - * Check this as the first thing to unblock the handling. - * - * @todo Rely on the internal request header instead so - * we don't interfere if the user is using socket.io. - */ - if (request.url.includes('socket.io')) { + // Bypass the socket.io HTTP handshake so the sync WS server connection + // doesn't hang forever. Check this as the first thing to unblock the handling. + if ( + request.headers.get('x-msw-request-type') === 'internal-request' + ) { return } @@ -183,7 +179,11 @@ ${`${pragma} ${header}`} private async connectToSyncServer(): Promise { const connectionPromise = new DeferredPromise | null>() - const socket = io('http://localhost:50222') + const socket = io('http://localhost:50222', { + extraHeaders: { + 'x-msw-request-type': 'internal-request', + }, + }) console.log('[server] connecting to the sync server...') From df07102a20057f247a2bfd4e489b294578aedf2d Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 13 May 2023 15:29:27 +0200 Subject: [PATCH 138/210] chore: use a single SYNC_SERVER_URL variable --- src/node/SetupServerApi.ts | 81 +++++++++++++----------------------- src/node/useRemoteHandler.ts | 54 ++++++++++++++++++++---- 2 files changed, 77 insertions(+), 58 deletions(-) diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 577f5aff9..4969ff85a 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -7,7 +7,6 @@ import { } from '@mswjs/interceptors' import { io, Socket } from 'socket.io-client' import { DeferredPromise } from '@open-draft/deferred-promise' -import { rest } from '~/core' import { SetupApi } from '~/core/SetupApi' import { RequestHandler } from '~/core/handlers/RequestHandler' import { LifeCycleEventsMap, SharedOptions } from '~/core/sharedOptions' @@ -17,10 +16,10 @@ import { handleRequest } from '~/core/utils/handleRequest' import { devUtils } from '~/core/utils/internal/devUtils' import { SetupServer } from './glossary' import { - deserializeResponse, - serializeRequest, -} from '~/core/utils/request/serializeUtils' -import { SyncServerEventsMap } from './useRemoteHandler' + SYNC_SERVER_URL, + SyncServerEventsMap, + syncServerResolver, +} from './useRemoteHandler' const DEFAULT_LISTEN_OPTIONS: RequiredDeep = { onUnhandledRequest: 'warn', @@ -50,7 +49,7 @@ export class SetupServerApi }) this.resolvedOptions = {} as RequiredDeep - this.syncServerPromise = this.connectToSyncServer() + this.syncSocketPromise = this.connectToSyncServer() this.init() } @@ -64,46 +63,15 @@ export class SetupServerApi request, requestId, [ - rest.all('*', async ({ request }) => { - // Bypass the socket.io HTTP handshake so the sync WS server connection - // doesn't hang forever. Check this as the first thing to unblock the handling. - if ( - request.headers.get('x-msw-request-type') === 'internal-request' - ) { - return - } - - const syncServer = await this.syncServerPromise - - // If the sync server hasn't been started or failed to connect, - // skip this request handler altogether, it has no effect. - if (syncServer == null) { - console.log('[server] no sync ws open, skipping...') - return - } - - syncServer.emit( - 'request', - await serializeRequest(request), - requestId, - ) - - const responsePromise = new DeferredPromise() - - /** - * @todo Handle timeouts. - * @todo Handle socket errors. - */ - syncServer.on('response', (serializedResponse) => { - responsePromise.resolve( - serializedResponse - ? deserializeResponse(serializedResponse) - : undefined, - ) - }) - - return await responsePromise + syncServerResolver({ + requestId, + socketPromise: this.syncSocketPromise, }), + /** + * @todo Spreading the list of all request handlers can be costly. + * Consider finding another way of always running the sync server resolver + * first. + */ ...this.currentHandlers, ], this.resolvedOptions, @@ -174,26 +142,37 @@ ${`${pragma} ${header}`} this.dispose() } - private syncServerPromise: Promise | null> + private syncSocketPromise: Promise | null> + + private async pingSyncServer(): Promise { + return fetch(SYNC_SERVER_URL, { + method: 'HEAD', + }).then( + (res) => res.ok, + () => false, + ) + } private async connectToSyncServer(): Promise { + if (!(await this.pingSyncServer())) { + return Promise.resolve(null) + } + const connectionPromise = new DeferredPromise | null>() - const socket = io('http://localhost:50222', { + const socket = io(SYNC_SERVER_URL, { + timeout: 200, + reconnection: false, extraHeaders: { 'x-msw-request-type': 'internal-request', }, }) - console.log('[server] connecting to the sync server...') - socket.on('connect', () => { - console.log('>>> `[server] CONNECTED TO THE SYNC SERVER!') connectionPromise.resolve(socket) }) socket.io.on('error', (error) => { - console.error('[server] sync server connection error:', error.message) connectionPromise.resolve(null) }) diff --git a/src/node/useRemoteHandler.ts b/src/node/useRemoteHandler.ts index 6d98ba0d1..1b22faedc 100644 --- a/src/node/useRemoteHandler.ts +++ b/src/node/useRemoteHandler.ts @@ -1,12 +1,15 @@ import * as http from 'http' -import { Server as WebSocketServer } from 'socket.io' import { Emitter } from 'strict-event-emitter' +import { Server as WebSocketServer } from 'socket.io' +import { Socket } from 'socket.io-client' import { DeferredPromise } from '@open-draft/deferred-promise' -import { RequestHandler, handleRequest } from '~/core' +import { RequestHandler, handleRequest, rest } from '~/core' import { SerializedRequest, SerializedResponse, deserializeRequest, + deserializeResponse, + serializeRequest, serializeResponse, } from '~/core/utils/request/serializeUtils' @@ -14,6 +17,8 @@ declare global { var syncServer: WebSocketServer | undefined } +export const SYNC_SERVER_URL = new URL('http://localhost:50222') + export interface SyncServerEventsMap { request( serializedRequest: SerializedRequest, @@ -84,7 +89,7 @@ async function createSyncServer(): Promise< }, }) - httpServer.listen(50222, 'localhost', () => { + httpServer.listen(+SYNC_SERVER_URL.port, SYNC_SERVER_URL.hostname, () => { globalThis.syncServer = ws serverReady.resolve(ws) }) @@ -93,20 +98,55 @@ async function createSyncServer(): Promise< } async function closeSyncServer(server: WebSocketServer): Promise { - console.log('[useRemoteHandlers] closing sync server...') - const serverClosePromise = new DeferredPromise() server.close((error) => { if (error) { - console.log('[useRemoteHandlers] error closing sync server:', error) return serverClosePromise.reject(error) } - console.log('[useRemoteHandlers] closed sync server!') globalThis.syncServer = undefined serverClosePromise.resolve() }) return serverClosePromise } + +export function syncServerResolver(options: { + requestId: string + socketPromise: Promise | null> +}) { + return rest.all('*', async ({ request }) => { + // Bypass the socket.io HTTP handshake so the sync WS server connection + // doesn't hang forever. Check this as the first thing to unblock the handling. + if (request.headers.get('x-msw-request-type') === 'internal-request') { + return + } + + const socket = await options.socketPromise + + // If the sync server hasn't been started or failed to connect, + // skip this request handler altogether, it has no effect. + if (socket == null) { + return + } + + socket.emit('request', await serializeRequest(request), options.requestId) + + const responsePromise = new DeferredPromise() + + /** + * @todo Handle timeouts. + * @todo Handle socket errors. + */ + socket.on('response', (serializedResponse) => { + responsePromise.resolve( + serializedResponse + ? deserializeResponse(serializedResponse) + : undefined, + ) + }) + + return await responsePromise + }) +} From ceb507a4cb2742e36e61f6ffb23bea3d82cdcaa4 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 13 May 2023 15:48:27 +0200 Subject: [PATCH 139/210] chore: use node polyfills for node tests in jest --- test/jest.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/jest.config.js b/test/jest.config.js index 1e384c902..0d1de2351 100644 --- a/test/jest.config.js +++ b/test/jest.config.js @@ -10,6 +10,7 @@ module.exports = { moduleNameMapper: { '^msw(.*)': '/../..$1', }, + setupFilesAfterEnv: ['/../../jest.setup.js'], testEnvironmentOptions: { // Force JSDOM to use the Node module resolution because we're still in Node.js. // Using browser resolution won't work by design because JSDOM is not a browser From 8bff5a0324520c7c9d2bdf00fac74ffa7971b93e Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 16 May 2023 18:41:32 +0000 Subject: [PATCH 140/210] feat: add "setupRemoteServer" API --- pnpm-lock.yaml | 3914 ++++++++++++++++----------------- src/node/SetupServerApi.ts | 31 +- src/node/index.ts | 2 +- src/node/setupRemoteServer.ts | 212 ++ src/node/useRemoteHandler.ts | 152 -- 5 files changed, 2138 insertions(+), 2173 deletions(-) create mode 100644 src/node/setupRemoteServer.ts delete mode 100644 src/node/useRemoteHandler.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a8daa9cde..12ca03f06 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,173 +1,249 @@ -lockfileVersion: 5.4 +lockfileVersion: '6.0' overrides: chokidar: 3.4.1 -specifiers: - '@babel/core': ^7.17.2 - '@babel/preset-env': ^7.16.11 - '@bundled-es-modules/cookie': ^2.0.0 - '@bundled-es-modules/js-levenshtein': ^2.0.1 - '@bundled-es-modules/statuses': ^1.0.1 - '@commitlint/cli': ^16.1.0 - '@commitlint/config-conventional': ^16.0.0 - '@mswjs/cookies': ^1.0.0 - '@mswjs/interceptors': ^0.22.13 - '@open-draft/deferred-promise': ^2.1.0 - '@open-draft/test-server': ^0.4.2 - '@open-draft/until': ^2.1.0 - '@ossjs/release': ^0.4.0 - '@playwright/test': ^1.30.0 - '@swc/core': ^1.3.35 - '@swc/jest': ^0.2.24 - '@types/cookie': ^0.4.1 - '@types/express': ^4.17.17 - '@types/fs-extra': ^9.0.13 - '@types/glob': ^8.1.0 - '@types/jest': ^29.4.0 - '@types/js-levenshtein': ^1.1.1 - '@types/json-bigint': ^1.0.1 - '@types/node': 18.x - '@types/node-fetch': ^2.5.11 - '@types/puppeteer': ^5.4.4 - '@types/statuses': ^2.0.1 - '@typescript-eslint/eslint-plugin': ^5.11.0 - '@typescript-eslint/parser': ^5.11.0 - '@web/dev-server': ^0.1.38 - babel-loader: ^8.2.3 - babel-minify: ^0.5.1 - chalk: ^4.1.2 - chokidar: 3.4.1 - commitizen: ^4.2.4 - cross-env: ^7.0.3 - cross-fetch: ^3.1.5 - cz-conventional-changelog: 3.3.0 - esbuild: ^0.17.15 - esbuild-loader: ^2.21.0 - eslint: ^7.30.0 - eslint-config-prettier: ^8.3.0 - eslint-plugin-prettier: ^3.4.0 - express: ^4.18.2 - formdata-node: 4.4.1 - fs-extra: ^10.0.0 - fs-teardown: ^0.3.0 - glob: ^9.3.4 - graphql: ^15.0.0 || ^16.0.0 - headers-polyfill: ^3.1.2 - inquirer: ^8.2.0 - is-node-process: ^1.2.0 - jest: ^29.4.3 - jest-environment-jsdom: ^29.4.3 - js-levenshtein: ^1.1.6 - json-bigint: ^1.0.0 - lint-staged: ^13.0.3 - node-fetch: ^2.6.7 - outvariant: ^1.4.0 - page-with: ^0.6.1 - path-to-regexp: ^6.2.0 - prettier: ^2.7.1 - regenerator-runtime: ^0.13.9 - rimraf: ^3.0.2 - simple-git-hooks: ^2.8.0 - socket.io: ^4.6.1 - socket.io-client: ^4.6.1 - strict-event-emitter: ^0.5.0 - ts-node: ^10.9.1 - tsup: ^6.7.0 - type-fest: ^2.19.0 - typescript: ^5.0.2 - undici: ^5.20.0 - url-loader: ^4.1.1 - webpack: ^5.68.0 - webpack-dev-server: ^3.11.2 - webpack-http-server: ^0.5.0 - yargs: ^17.3.1 - dependencies: - '@bundled-es-modules/cookie': 2.0.0 - '@bundled-es-modules/js-levenshtein': 2.0.1 - '@bundled-es-modules/statuses': 1.0.1 - '@mswjs/cookies': 1.0.0 - '@mswjs/interceptors': 0.22.13 - '@open-draft/deferred-promise': 2.1.0 - '@open-draft/until': 2.1.0 - '@types/cookie': 0.4.1 - '@types/js-levenshtein': 1.1.1 - '@types/statuses': 2.0.1 - chalk: 4.1.2 - chokidar: 3.4.1 - formdata-node: 4.4.1 - graphql: 16.6.0 - headers-polyfill: 3.1.2 - inquirer: 8.2.5 - is-node-process: 1.2.0 - js-levenshtein: 1.1.6 - node-fetch: 2.6.9 - outvariant: 1.4.0 - path-to-regexp: 6.2.1 - socket.io: 4.6.1 - socket.io-client: 4.6.1 - strict-event-emitter: 0.5.0 - type-fest: 2.19.0 - yargs: 17.7.1 + '@bundled-es-modules/cookie': + specifier: ^2.0.0 + version: 2.0.0 + '@bundled-es-modules/js-levenshtein': + specifier: ^2.0.1 + version: 2.0.1 + '@bundled-es-modules/statuses': + specifier: ^1.0.1 + version: 1.0.1 + '@mswjs/cookies': + specifier: ^1.0.0 + version: 1.0.0 + '@mswjs/interceptors': + specifier: ^0.22.13 + version: 0.22.13 + '@open-draft/deferred-promise': + specifier: ^2.1.0 + version: 2.1.0 + '@open-draft/until': + specifier: ^2.1.0 + version: 2.1.0 + '@types/cookie': + specifier: ^0.4.1 + version: 0.4.1 + '@types/js-levenshtein': + specifier: ^1.1.1 + version: 1.1.1 + '@types/statuses': + specifier: ^2.0.1 + version: 2.0.1 + chalk: + specifier: ^4.1.2 + version: 4.1.2 + chokidar: + specifier: 3.4.1 + version: 3.4.1 + formdata-node: + specifier: 4.4.1 + version: 4.4.1 + graphql: + specifier: ^15.0.0 || ^16.0.0 + version: 16.6.0 + headers-polyfill: + specifier: ^3.1.2 + version: 3.1.2 + inquirer: + specifier: ^8.2.0 + version: 8.2.5 + is-node-process: + specifier: ^1.2.0 + version: 1.2.0 + js-levenshtein: + specifier: ^1.1.6 + version: 1.1.6 + node-fetch: + specifier: ^2.6.7 + version: 2.6.9 + outvariant: + specifier: ^1.4.0 + version: 1.4.0 + path-to-regexp: + specifier: ^6.2.0 + version: 6.2.1 + socket.io: + specifier: ^4.6.1 + version: 4.6.1 + socket.io-client: + specifier: ^4.6.1 + version: 4.6.1 + strict-event-emitter: + specifier: ^0.5.0 + version: 0.5.0 + type-fest: + specifier: ^2.19.0 + version: 2.19.0 + yargs: + specifier: ^17.3.1 + version: 17.7.1 devDependencies: - '@babel/core': 7.21.4 - '@babel/preset-env': 7.21.4_@babel+core@7.21.4 - '@commitlint/cli': 16.3.0_@swc+core@1.3.49 - '@commitlint/config-conventional': 16.2.4 - '@open-draft/test-server': 0.4.2 - '@ossjs/release': 0.4.0 - '@playwright/test': 1.32.3 - '@swc/core': 1.3.49 - '@swc/jest': 0.2.24_@swc+core@1.3.49 - '@types/express': 4.17.17 - '@types/fs-extra': 9.0.13 - '@types/glob': 8.1.0 - '@types/jest': 29.5.0 - '@types/json-bigint': 1.0.1 - '@types/node': 18.15.11 - '@types/node-fetch': 2.6.3 - '@types/puppeteer': 5.4.7 - '@typescript-eslint/eslint-plugin': 5.58.0_ug56riyzsilszklzuxgwlsssqe - '@typescript-eslint/parser': 5.58.0_cgdknpc562nnyruteofhkegnom - '@web/dev-server': 0.1.38 - babel-loader: 8.3.0_c3tfwv7p35clwcmkb5fnkshzei - babel-minify: 0.5.2 - commitizen: 4.3.0_@swc+core@1.3.49 - cross-env: 7.0.3 - cross-fetch: 3.1.5 - cz-conventional-changelog: 3.3.0_@swc+core@1.3.49 - esbuild: 0.17.16 - esbuild-loader: 2.21.0_webpack@5.79.0 - eslint: 7.32.0 - eslint-config-prettier: 8.8.0_eslint@7.32.0 - eslint-plugin-prettier: 3.4.1_mouiu7tdcm2dtderipseaggmee - express: 4.18.2 - fs-extra: 10.1.0 - fs-teardown: 0.3.2 - glob: 9.3.5 - jest: 29.5.0_rrli7kzx2akox3oq6aahu3rvje - jest-environment-jsdom: 29.5.0 - json-bigint: 1.0.0 - lint-staged: 13.2.1 - page-with: 0.6.1_57233mj27fjz7synoeubptyy7e - prettier: 2.8.7 - regenerator-runtime: 0.13.11 - rimraf: 3.0.2 - simple-git-hooks: 2.8.1 - ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e - tsup: 6.7.0_kpvxmbmtx6ydv4unklsjw2abeq - typescript: 5.0.4 - undici: 5.21.2 - url-loader: 4.1.1_webpack@5.79.0 - webpack: 5.79.0_57233mj27fjz7synoeubptyy7e - webpack-dev-server: 3.11.3_webpack@5.79.0 - webpack-http-server: 0.5.0_57233mj27fjz7synoeubptyy7e + '@babel/core': + specifier: ^7.17.2 + version: 7.21.4 + '@babel/preset-env': + specifier: ^7.16.11 + version: 7.21.4(@babel/core@7.21.4) + '@commitlint/cli': + specifier: ^16.1.0 + version: 16.3.0(@swc/core@1.3.49) + '@commitlint/config-conventional': + specifier: ^16.0.0 + version: 16.2.4 + '@open-draft/test-server': + specifier: ^0.4.2 + version: 0.4.2 + '@ossjs/release': + specifier: ^0.4.0 + version: 0.4.0 + '@playwright/test': + specifier: ^1.30.0 + version: 1.32.3 + '@swc/core': + specifier: ^1.3.35 + version: 1.3.49 + '@swc/jest': + specifier: ^0.2.24 + version: 0.2.24(@swc/core@1.3.49) + '@types/express': + specifier: ^4.17.17 + version: 4.17.17 + '@types/fs-extra': + specifier: ^9.0.13 + version: 9.0.13 + '@types/glob': + specifier: ^8.1.0 + version: 8.1.0 + '@types/jest': + specifier: ^29.4.0 + version: 29.5.0 + '@types/json-bigint': + specifier: ^1.0.1 + version: 1.0.1 + '@types/node': + specifier: 18.x + version: 18.15.11 + '@types/node-fetch': + specifier: ^2.5.11 + version: 2.6.3 + '@types/puppeteer': + specifier: ^5.4.4 + version: 5.4.7 + '@typescript-eslint/eslint-plugin': + specifier: ^5.11.0 + version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@7.32.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: ^5.11.0 + version: 5.58.0(eslint@7.32.0)(typescript@5.0.4) + '@web/dev-server': + specifier: ^0.1.38 + version: 0.1.38 + babel-loader: + specifier: ^8.2.3 + version: 8.3.0(@babel/core@7.21.4)(webpack@5.79.0) + babel-minify: + specifier: ^0.5.1 + version: 0.5.2 + commitizen: + specifier: ^4.2.4 + version: 4.3.0(@swc/core@1.3.49) + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + cross-fetch: + specifier: ^3.1.5 + version: 3.1.5 + cz-conventional-changelog: + specifier: 3.3.0 + version: 3.3.0(@swc/core@1.3.49) + esbuild: + specifier: ^0.17.15 + version: 0.17.16 + esbuild-loader: + specifier: ^2.21.0 + version: 2.21.0(webpack@5.79.0) + eslint: + specifier: ^7.30.0 + version: 7.32.0 + eslint-config-prettier: + specifier: ^8.3.0 + version: 8.8.0(eslint@7.32.0) + eslint-plugin-prettier: + specifier: ^3.4.0 + version: 3.4.1(eslint-config-prettier@8.8.0)(eslint@7.32.0)(prettier@2.8.7) + express: + specifier: ^4.18.2 + version: 4.18.2(supports-color@6.1.0) + fs-extra: + specifier: ^10.0.0 + version: 10.1.0 + fs-teardown: + specifier: ^0.3.0 + version: 0.3.2 + glob: + specifier: ^9.3.4 + version: 9.3.5 + jest: + specifier: ^29.4.3 + version: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + jest-environment-jsdom: + specifier: ^29.4.3 + version: 29.5.0 + json-bigint: + specifier: ^1.0.0 + version: 1.0.0 + lint-staged: + specifier: ^13.0.3 + version: 13.2.1 + page-with: + specifier: ^0.6.1 + version: 0.6.1(@swc/core@1.3.49)(esbuild@0.17.16) + prettier: + specifier: ^2.7.1 + version: 2.8.7 + regenerator-runtime: + specifier: ^0.13.9 + version: 0.13.11 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + simple-git-hooks: + specifier: ^2.8.0 + version: 2.8.1 + ts-node: + specifier: ^10.9.1 + version: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4) + tsup: + specifier: ^6.7.0 + version: 6.7.0(@swc/core@1.3.49)(ts-node@10.9.1)(typescript@5.0.4) + typescript: + specifier: ^5.0.2 + version: 5.0.4 + undici: + specifier: ^5.20.0 + version: 5.21.2 + url-loader: + specifier: ^4.1.1 + version: 4.1.1(webpack@5.79.0) + webpack: + specifier: ^5.68.0 + version: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) + webpack-dev-server: + specifier: ^3.11.2 + version: 3.11.3(webpack@5.79.0) + webpack-http-server: + specifier: ^0.5.0 + version: 0.5.0(@swc/core@1.3.49)(esbuild@0.17.16) packages: - /@75lb/deep-merge/1.1.1: + /@75lb/deep-merge@1.1.1: resolution: {integrity: sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw==} engines: {node: '>=12.17'} dependencies: @@ -175,7 +251,7 @@ packages: typical: 7.1.1 dev: true - /@ampproject/remapping/2.2.1: + /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: @@ -183,32 +259,32 @@ packages: '@jridgewell/trace-mapping': 0.3.18 dev: true - /@babel/code-frame/7.12.11: + /@babel/code-frame@7.12.11: resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} dependencies: '@babel/highlight': 7.18.6 dev: true - /@babel/code-frame/7.21.4: + /@babel/code-frame@7.21.4: resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 dev: true - /@babel/compat-data/7.21.4: + /@babel/compat-data@7.21.4: resolution: {integrity: sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==} engines: {node: '>=6.9.0'} dev: true - /@babel/core/7.21.4: + /@babel/core@7.21.4: resolution: {integrity: sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.21.4 '@babel/generator': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) '@babel/helper-module-transforms': 7.21.2 '@babel/helpers': 7.21.0 '@babel/parser': 7.21.4 @@ -216,7 +292,7 @@ packages: '@babel/traverse': 7.21.4 '@babel/types': 7.21.4 convert-source-map: 1.9.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.0 @@ -224,7 +300,7 @@ packages: - supports-color dev: true - /@babel/generator/7.21.4: + /@babel/generator@7.21.4: resolution: {integrity: sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==} engines: {node: '>=6.9.0'} dependencies: @@ -234,14 +310,14 @@ packages: jsesc: 2.5.2 dev: true - /@babel/helper-annotate-as-pure/7.18.6: + /@babel/helper-annotate-as-pure@7.18.6: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9: + /@babel/helper-builder-binary-assignment-operator-visitor@7.18.9: resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==} engines: {node: '>=6.9.0'} dependencies: @@ -249,7 +325,7 @@ packages: '@babel/types': 7.21.4 dev: true - /@babel/helper-compilation-targets/7.21.4_@babel+core@7.21.4: + /@babel/helper-compilation-targets@7.21.4(@babel/core@7.21.4): resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -263,7 +339,7 @@ packages: semver: 6.3.0 dev: true - /@babel/helper-create-class-features-plugin/7.21.4_@babel+core@7.21.4: + /@babel/helper-create-class-features-plugin@7.21.4(@babel/core@7.21.4): resolution: {integrity: sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -282,7 +358,7 @@ packages: - supports-color dev: true - /@babel/helper-create-regexp-features-plugin/7.21.4_@babel+core@7.21.4: + /@babel/helper-create-regexp-features-plugin@7.21.4(@babel/core@7.21.4): resolution: {integrity: sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -293,15 +369,15 @@ packages: regexpu-core: 5.3.2 dev: true - /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.21.4: + /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.21.4): resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) lodash.debounce: 4.0.8 resolve: 1.22.2 semver: 6.3.0 @@ -309,19 +385,19 @@ packages: - supports-color dev: true - /@babel/helper-environment-visitor/7.18.9: + /@babel/helper-environment-visitor@7.18.9: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-explode-assignable-expression/7.18.6: + /@babel/helper-explode-assignable-expression@7.18.6: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-function-name/7.21.0: + /@babel/helper-function-name@7.21.0: resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} engines: {node: '>=6.9.0'} dependencies: @@ -329,28 +405,28 @@ packages: '@babel/types': 7.21.4 dev: true - /@babel/helper-hoist-variables/7.18.6: + /@babel/helper-hoist-variables@7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-member-expression-to-functions/7.21.0: + /@babel/helper-member-expression-to-functions@7.21.0: resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-module-imports/7.21.4: + /@babel/helper-module-imports@7.21.4: resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-module-transforms/7.21.2: + /@babel/helper-module-transforms@7.21.2: resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} engines: {node: '>=6.9.0'} dependencies: @@ -366,19 +442,19 @@ packages: - supports-color dev: true - /@babel/helper-optimise-call-expression/7.18.6: + /@babel/helper-optimise-call-expression@7.18.6: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-plugin-utils/7.20.2: + /@babel/helper-plugin-utils@7.20.2: resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.21.4: + /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -393,7 +469,7 @@ packages: - supports-color dev: true - /@babel/helper-replace-supers/7.20.7: + /@babel/helper-replace-supers@7.20.7: resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==} engines: {node: '>=6.9.0'} dependencies: @@ -407,43 +483,43 @@ packages: - supports-color dev: true - /@babel/helper-simple-access/7.20.2: + /@babel/helper-simple-access@7.20.2: resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-skip-transparent-expression-wrappers/7.20.0: + /@babel/helper-skip-transparent-expression-wrappers@7.20.0: resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-split-export-declaration/7.18.6: + /@babel/helper-split-export-declaration@7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-string-parser/7.19.4: + /@babel/helper-string-parser@7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-identifier/7.19.1: + /@babel/helper-validator-identifier@7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option/7.21.0: + /@babel/helper-validator-option@7.21.0: resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-wrap-function/7.20.5: + /@babel/helper-wrap-function@7.20.5: resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} engines: {node: '>=6.9.0'} dependencies: @@ -455,7 +531,7 @@ packages: - supports-color dev: true - /@babel/helpers/7.21.0: + /@babel/helpers@7.21.0: resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} engines: {node: '>=6.9.0'} dependencies: @@ -466,7 +542,7 @@ packages: - supports-color dev: true - /@babel/highlight/7.18.6: + /@babel/highlight@7.18.6: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} dependencies: @@ -475,7 +551,7 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser/7.21.4: + /@babel/parser@7.21.4: resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==} engines: {node: '>=6.0.0'} hasBin: true @@ -483,7 +559,7 @@ packages: '@babel/types': 7.21.4 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.21.4: + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -493,7 +569,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.21.4: + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -502,10 +578,10 @@ packages: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.4) dev: true - /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.21.4: + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -514,40 +590,40 @@ packages: '@babel/core': 7.21.4 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.4 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.4 + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.21.4: + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-static-block/7.21.0_@babel+core@7.21.4: + /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.21.4): resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.4 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.4) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.21.4: + /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -555,10 +631,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.4) dev: true - /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.21.4: + /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -566,10 +642,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.4) dev: true - /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.21.4: + /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -577,10 +653,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) dev: true - /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.21.4: + /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} engines: {node: '>=6.9.0'} peerDependencies: @@ -588,10 +664,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) dev: true - /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.21.4: + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -599,10 +675,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) dev: true - /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.21.4: + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -610,10 +686,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) dev: true - /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.21.4: + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -621,13 +697,13 @@ packages: dependencies: '@babel/compat-data': 7.21.4 '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.4 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.4) dev: true - /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.21.4: + /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -635,10 +711,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) dev: true - /@babel/plugin-proposal-optional-chaining/7.21.0_@babel+core@7.21.4: + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.21.4): resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -647,23 +723,23 @@ packages: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) dev: true - /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.21.4: + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object/7.21.0_@babel+core@7.21.4: + /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.21.4): resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -671,25 +747,25 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.4 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.4) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.21.4: + /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.4: + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.4): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -698,7 +774,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.21.4: + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -707,7 +783,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.4: + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.4): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -716,7 +792,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.21.4: + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.4): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -726,7 +802,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.21.4: + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -735,7 +811,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.21.4: + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -744,7 +820,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.21.4: + /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.21.4): resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -754,7 +830,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.21.4: + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.21.4): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -763,7 +839,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.4: + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -772,7 +848,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-jsx/7.21.4_@babel+core@7.21.4: + /@babel/plugin-syntax-jsx@7.21.4(@babel/core@7.21.4): resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -782,7 +858,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.4: + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.4): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -791,7 +867,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.4: + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -800,7 +876,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.4: + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.4): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -809,7 +885,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.4: + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -818,7 +894,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.4: + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -827,7 +903,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.4: + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -836,7 +912,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.21.4: + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.4): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -846,7 +922,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.4: + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.4): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -856,7 +932,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-typescript/7.21.4_@babel+core@7.21.4: + /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.21.4): resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -866,7 +942,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.21.4: + /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -876,7 +952,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.21.4: + /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -885,12 +961,12 @@ packages: '@babel/core': 7.21.4 '@babel/helper-module-imports': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.4 + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.4) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -900,7 +976,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-block-scoping/7.21.0_@babel+core@7.21.4: + /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.4): resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -910,7 +986,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-classes/7.21.0_@babel+core@7.21.4: + /@babel/plugin-transform-classes@7.21.0(@babel/core@7.21.4): resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -918,7 +994,7 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 @@ -930,7 +1006,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.21.4: + /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -941,7 +1017,7 @@ packages: '@babel/template': 7.20.7 dev: true - /@babel/plugin-transform-destructuring/7.21.3_@babel+core@7.21.4: + /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.21.4): resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -951,18 +1027,18 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.21.4: + /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -972,7 +1048,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -983,7 +1059,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-for-of/7.21.0_@babel+core@7.21.4: + /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.21.4): resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -993,19 +1069,19 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.21.4: + /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) '@babel/helper-function-name': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-literals/7.18.9_@babel+core@7.21.4: + /@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1015,7 +1091,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1025,7 +1101,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.21.4: + /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.21.4): resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1038,7 +1114,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-commonjs/7.21.2_@babel+core@7.21.4: + /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.21.4): resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1052,7 +1128,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.21.4: + /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.21.4): resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1067,7 +1143,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1080,18 +1156,18 @@ packages: - supports-color dev: true - /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.21.4: + /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.21.4): resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1101,7 +1177,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1114,7 +1190,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-parameters/7.21.3_@babel+core@7.21.4: + /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.21.4): resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1124,7 +1200,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1134,7 +1210,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.21.4: + /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.21.4): resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1145,7 +1221,7 @@ packages: regenerator-transform: 0.15.1 dev: true - /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1155,7 +1231,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1165,7 +1241,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-spread/7.20.7_@babel+core@7.21.4: + /@babel/plugin-transform-spread@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1176,7 +1252,7 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 dev: true - /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1186,7 +1262,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.21.4: + /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1196,7 +1272,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.21.4: + /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1206,7 +1282,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.21.4: + /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.21.4): resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1216,18 +1292,18 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.21.4: + /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/preset-env/7.21.4_@babel+core@7.21.4: + /@babel/preset-env@7.21.4(@babel/core@7.21.4): resolution: {integrity: sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1235,109 +1311,109 @@ packages: dependencies: '@babel/compat-data': 7.21.4 '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.21.4 - '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.21.4 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-proposal-class-static-block': 7.21.0_@babel+core@7.21.4 - '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.21.4 - '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.21.4 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.21.4 - '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.4 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-proposal-private-property-in-object': 7.21.0_@babel+core@7.21.4 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.4 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.4 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.4 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.21.4 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.4 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.4 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.4 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.4 - '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.21.4 - '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.21.4 - '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-block-scoping': 7.21.0_@babel+core@7.21.4 - '@babel/plugin-transform-classes': 7.21.0_@babel+core@7.21.4 - '@babel/plugin-transform-computed-properties': 7.20.7_@babel+core@7.21.4 - '@babel/plugin-transform-destructuring': 7.21.3_@babel+core@7.21.4 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.21.4 - '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-for-of': 7.21.0_@babel+core@7.21.4 - '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.21.4 - '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.21.4 - '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.21.4 - '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.21.4 - '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.21.4 - '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.21.4 - '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.4 - '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-regenerator': 7.20.5_@babel+core@7.21.4 - '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.21.4 - '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.4 - '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.21.4 - '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.21.4 - '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.21.4 - '@babel/preset-modules': 0.1.5_@babel+core@7.21.4 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.4) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.4) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.21.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.4) + '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.4) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.4) + '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.4) + '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.21.4) + '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.4) + '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.4) + '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.21.4) + '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.21.4) + '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.4) + '@babel/preset-modules': 0.1.5(@babel/core@7.21.4) '@babel/types': 7.21.4 - babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.21.4 - babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.21.4 - babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.21.4 + babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.4) + babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.4) + babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.4) core-js-compat: 3.30.0 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules/0.1.5_@babel+core@7.21.4: + /@babel/preset-modules@0.1.5(@babel/core@7.21.4): resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.4 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.4) '@babel/types': 7.21.4 esutils: 2.0.3 dev: true - /@babel/regjsgen/0.8.0: + /@babel/regjsgen@0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: true - /@babel/runtime/7.21.0: + /@babel/runtime@7.21.0: resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 dev: true - /@babel/template/7.20.7: + /@babel/template@7.20.7: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} dependencies: @@ -1346,7 +1422,7 @@ packages: '@babel/types': 7.21.4 dev: true - /@babel/traverse/7.21.4: + /@babel/traverse@7.21.4: resolution: {integrity: sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==} engines: {node: '>=6.9.0'} dependencies: @@ -1358,13 +1434,13 @@ packages: '@babel/helper-split-export-declaration': 7.18.6 '@babel/parser': 7.21.4 '@babel/types': 7.21.4 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types/7.21.4: + /@babel/types@7.21.4: resolution: {integrity: sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==} engines: {node: '>=6.9.0'} dependencies: @@ -1373,36 +1449,36 @@ packages: to-fast-properties: 2.0.0 dev: true - /@bcoe/v8-coverage/0.2.3: + /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /@bundled-es-modules/cookie/2.0.0: + /@bundled-es-modules/cookie@2.0.0: resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==} dependencies: cookie: 0.5.0 dev: false - /@bundled-es-modules/js-levenshtein/2.0.1: + /@bundled-es-modules/js-levenshtein@2.0.1: resolution: {integrity: sha512-DERMS3yfbAljKsQc0U2wcqGKUWpdFjwqWuoMugEJlqBnKO180/n+4SR/J8MRDt1AN48X1ovgoD9KrdVXcaa3Rg==} dependencies: js-levenshtein: 1.1.6 dev: false - /@bundled-es-modules/statuses/1.0.1: + /@bundled-es-modules/statuses@1.0.1: resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} dependencies: statuses: 2.0.1 dev: false - /@commitlint/cli/16.3.0_@swc+core@1.3.49: + /@commitlint/cli@16.3.0(@swc/core@1.3.49): resolution: {integrity: sha512-P+kvONlfsuTMnxSwWE1H+ZcPMY3STFaHb2kAacsqoIkNx66O0T7sTpBxpxkMrFPyhkJiLJnJWMhk4bbvYD3BMA==} engines: {node: '>=v12'} hasBin: true dependencies: '@commitlint/format': 16.2.1 '@commitlint/lint': 16.2.4 - '@commitlint/load': 16.3.0_@swc+core@1.3.49 + '@commitlint/load': 16.3.0(@swc/core@1.3.49) '@commitlint/read': 16.2.1 '@commitlint/types': 16.2.1 lodash: 4.17.21 @@ -1414,14 +1490,14 @@ packages: - '@swc/wasm' dev: true - /@commitlint/config-conventional/16.2.4: + /@commitlint/config-conventional@16.2.4: resolution: {integrity: sha512-av2UQJa3CuE5P0dzxj/o/B9XVALqYzEViHrMXtDrW9iuflrqCStWBAioijppj9URyz6ONpohJKAtSdgAOE0gkA==} engines: {node: '>=v12'} dependencies: conventional-changelog-conventionalcommits: 4.6.3 dev: true - /@commitlint/config-validator/16.2.1: + /@commitlint/config-validator@16.2.1: resolution: {integrity: sha512-hogSe0WGg7CKmp4IfNbdNES3Rq3UEI4XRPB8JL4EPgo/ORq5nrGTVzxJh78omibNuB8Ho4501Czb1Er1MoDWpw==} engines: {node: '>=v12'} dependencies: @@ -1429,7 +1505,7 @@ packages: ajv: 6.12.6 dev: true - /@commitlint/config-validator/17.4.4: + /@commitlint/config-validator@17.4.4: resolution: {integrity: sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==} engines: {node: '>=v14'} dependencies: @@ -1438,7 +1514,7 @@ packages: dev: true optional: true - /@commitlint/ensure/16.2.1: + /@commitlint/ensure@16.2.1: resolution: {integrity: sha512-/h+lBTgf1r5fhbDNHOViLuej38i3rZqTQnBTk+xEg+ehOwQDXUuissQ5GsYXXqI5uGy+261ew++sT4EA3uBJ+A==} engines: {node: '>=v12'} dependencies: @@ -1446,18 +1522,18 @@ packages: lodash: 4.17.21 dev: true - /@commitlint/execute-rule/16.2.1: + /@commitlint/execute-rule@16.2.1: resolution: {integrity: sha512-oSls82fmUTLM6cl5V3epdVo4gHhbmBFvCvQGHBRdQ50H/690Uq1Dyd7hXMuKITCIdcnr9umyDkr8r5C6HZDF3g==} engines: {node: '>=v12'} dev: true - /@commitlint/execute-rule/17.4.0: + /@commitlint/execute-rule@17.4.0: resolution: {integrity: sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==} engines: {node: '>=v14'} dev: true optional: true - /@commitlint/format/16.2.1: + /@commitlint/format@16.2.1: resolution: {integrity: sha512-Yyio9bdHWmNDRlEJrxHKglamIk3d6hC0NkEUW6Ti6ipEh2g0BAhy8Od6t4vLhdZRa1I2n+gY13foy+tUgk0i1Q==} engines: {node: '>=v12'} dependencies: @@ -1465,7 +1541,7 @@ packages: chalk: 4.1.2 dev: true - /@commitlint/is-ignored/16.2.4: + /@commitlint/is-ignored@16.2.4: resolution: {integrity: sha512-Lxdq9aOAYCOOOjKi58ulbwK/oBiiKz+7Sq0+/SpFIEFwhHkIVugvDvWjh2VRBXmRC/x5lNcjDcYEwS/uYUvlYQ==} engines: {node: '>=v12'} dependencies: @@ -1473,7 +1549,7 @@ packages: semver: 7.3.7 dev: true - /@commitlint/lint/16.2.4: + /@commitlint/lint@16.2.4: resolution: {integrity: sha512-AUDuwOxb2eGqsXbTMON3imUGkc1jRdtXrbbohiLSCSk3jFVXgJLTMaEcr39pR00N8nE9uZ+V2sYaiILByZVmxQ==} engines: {node: '>=v12'} dependencies: @@ -1483,7 +1559,7 @@ packages: '@commitlint/types': 16.2.1 dev: true - /@commitlint/load/16.3.0_@swc+core@1.3.49: + /@commitlint/load@16.3.0(@swc/core@1.3.49): resolution: {integrity: sha512-3tykjV/iwbkv2FU9DG+NZ/JqmP0Nm3b7aDwgCNQhhKV5P74JAuByULkafnhn+zsFGypG1qMtI5u+BZoa9APm0A==} engines: {node: '>=v12'} dependencies: @@ -1494,7 +1570,7 @@ packages: '@types/node': 18.15.11 chalk: 4.1.2 cosmiconfig: 7.1.0 - cosmiconfig-typescript-loader: 2.0.2_faublg25f7qpbcz6w4cw6yyzse + cosmiconfig-typescript-loader: 2.0.2(@swc/core@1.3.49)(@types/node@18.15.11)(cosmiconfig@7.1.0)(typescript@4.9.5) lodash: 4.17.21 resolve-from: 5.0.0 typescript: 4.9.5 @@ -1503,7 +1579,7 @@ packages: - '@swc/wasm' dev: true - /@commitlint/load/17.5.0_@swc+core@1.3.49: + /@commitlint/load@17.5.0(@swc/core@1.3.49): resolution: {integrity: sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q==} engines: {node: '>=v14'} requiresBuild: true @@ -1515,12 +1591,12 @@ packages: '@types/node': 18.15.11 chalk: 4.1.2 cosmiconfig: 8.1.3 - cosmiconfig-typescript-loader: 4.3.0_zulaepqzabcjiyzbkdbfeduf6u + cosmiconfig-typescript-loader: 4.3.0(@types/node@18.15.11)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@5.0.4) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e + ts-node: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4) typescript: 5.0.4 transitivePeerDependencies: - '@swc/core' @@ -1528,12 +1604,12 @@ packages: dev: true optional: true - /@commitlint/message/16.2.1: + /@commitlint/message@16.2.1: resolution: {integrity: sha512-2eWX/47rftViYg7a3axYDdrgwKv32mxbycBJT6OQY/MJM7SUfYNYYvbMFOQFaA4xIVZt7t2Alyqslbl6blVwWw==} engines: {node: '>=v12'} dev: true - /@commitlint/parse/16.2.1: + /@commitlint/parse@16.2.1: resolution: {integrity: sha512-2NP2dDQNL378VZYioLrgGVZhWdnJO4nAxQl5LXwYb08nEcN+cgxHN1dJV8OLJ5uxlGJtDeR8UZZ1mnQ1gSAD/g==} engines: {node: '>=v12'} dependencies: @@ -1542,7 +1618,7 @@ packages: conventional-commits-parser: 3.2.4 dev: true - /@commitlint/read/16.2.1: + /@commitlint/read@16.2.1: resolution: {integrity: sha512-tViXGuaxLTrw2r7PiYMQOFA2fueZxnnt0lkOWqKyxT+n2XdEMGYcI9ID5ndJKXnfPGPppD0w/IItKsIXlZ+alw==} engines: {node: '>=v12'} dependencies: @@ -1552,7 +1628,7 @@ packages: git-raw-commits: 2.0.11 dev: true - /@commitlint/resolve-extends/16.2.1: + /@commitlint/resolve-extends@16.2.1: resolution: {integrity: sha512-NbbCMPKTFf2J805kwfP9EO+vV+XvnaHRcBy6ud5dF35dxMsvdJqke54W3XazXF1ZAxC4a3LBy4i/GNVBAthsEg==} engines: {node: '>=v12'} dependencies: @@ -1564,7 +1640,7 @@ packages: resolve-global: 1.0.0 dev: true - /@commitlint/resolve-extends/17.4.4: + /@commitlint/resolve-extends@17.4.4: resolution: {integrity: sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==} engines: {node: '>=v14'} dependencies: @@ -1577,7 +1653,7 @@ packages: dev: true optional: true - /@commitlint/rules/16.2.4: + /@commitlint/rules@16.2.4: resolution: {integrity: sha512-rK5rNBIN2ZQNQK+I6trRPK3dWa0MtaTN4xnwOma1qxa4d5wQMQJtScwTZjTJeallFxhOgbNOgr48AMHkdounVg==} engines: {node: '>=v12'} dependencies: @@ -1588,26 +1664,26 @@ packages: execa: 5.1.1 dev: true - /@commitlint/to-lines/16.2.1: + /@commitlint/to-lines@16.2.1: resolution: {integrity: sha512-9/VjpYj5j1QeY3eiog1zQWY6axsdWAc0AonUUfyZ7B0MVcRI0R56YsHAfzF6uK/g/WwPZaoe4Lb1QCyDVnpVaQ==} engines: {node: '>=v12'} dev: true - /@commitlint/top-level/16.2.1: + /@commitlint/top-level@16.2.1: resolution: {integrity: sha512-lS6GSieHW9y6ePL73ied71Z9bOKyK+Ib9hTkRsB8oZFAyQZcyRwq2w6nIa6Fngir1QW51oKzzaXfJL94qwImyw==} engines: {node: '>=v12'} dependencies: find-up: 5.0.0 dev: true - /@commitlint/types/16.2.1: + /@commitlint/types@16.2.1: resolution: {integrity: sha512-7/z7pA7BM0i8XvMSBynO7xsB3mVQPUZbVn6zMIlp/a091XJ3qAXRXc+HwLYhiIdzzS5fuxxNIHZMGHVD4HJxdA==} engines: {node: '>=v12'} dependencies: chalk: 4.1.2 dev: true - /@commitlint/types/17.4.4: + /@commitlint/types@17.4.4: resolution: {integrity: sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==} engines: {node: '>=v14'} dependencies: @@ -1615,50 +1691,50 @@ packages: dev: true optional: true - /@cspotcode/source-map-support/0.8.1: + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@esbuild/android-arm/0.16.17: - resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} + /@esbuild/android-arm64@0.16.17: + resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-arm/0.17.16: - resolution: {integrity: sha512-baLqRpLe4JnKrUXLJChoTN0iXZH7El/mu58GE3WIA6/H834k0XWvLRmGLG8y8arTRS9hJJibPnF0tiGhmWeZgw==} + /@esbuild/android-arm64@0.17.16: + resolution: {integrity: sha512-QX48qmsEZW+gcHgTmAj+x21mwTz8MlYQBnzF6861cNdQGvj2jzzFjqH0EBabrIa/WVZ2CHolwMoqxVryqKt8+Q==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-arm64/0.16.17: - resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} + /@esbuild/android-arm@0.16.17: + resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-arm64/0.17.16: - resolution: {integrity: sha512-QX48qmsEZW+gcHgTmAj+x21mwTz8MlYQBnzF6861cNdQGvj2jzzFjqH0EBabrIa/WVZ2CHolwMoqxVryqKt8+Q==} + /@esbuild/android-arm@0.17.16: + resolution: {integrity: sha512-baLqRpLe4JnKrUXLJChoTN0iXZH7El/mu58GE3WIA6/H834k0XWvLRmGLG8y8arTRS9hJJibPnF0tiGhmWeZgw==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-x64/0.16.17: + /@esbuild/android-x64@0.16.17: resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} engines: {node: '>=12'} cpu: [x64] @@ -1667,7 +1743,7 @@ packages: dev: true optional: true - /@esbuild/android-x64/0.17.16: + /@esbuild/android-x64@0.17.16: resolution: {integrity: sha512-G4wfHhrrz99XJgHnzFvB4UwwPxAWZaZBOFXh+JH1Duf1I4vIVfuYY9uVLpx4eiV2D/Jix8LJY+TAdZ3i40tDow==} engines: {node: '>=12'} cpu: [x64] @@ -1676,7 +1752,7 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64/0.16.17: + /@esbuild/darwin-arm64@0.16.17: resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} engines: {node: '>=12'} cpu: [arm64] @@ -1685,7 +1761,7 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64/0.17.16: + /@esbuild/darwin-arm64@0.17.16: resolution: {integrity: sha512-/Ofw8UXZxuzTLsNFmz1+lmarQI6ztMZ9XktvXedTbt3SNWDn0+ODTwxExLYQ/Hod91EZB4vZPQJLoqLF0jvEzA==} engines: {node: '>=12'} cpu: [arm64] @@ -1694,7 +1770,7 @@ packages: dev: true optional: true - /@esbuild/darwin-x64/0.16.17: + /@esbuild/darwin-x64@0.16.17: resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} engines: {node: '>=12'} cpu: [x64] @@ -1703,7 +1779,7 @@ packages: dev: true optional: true - /@esbuild/darwin-x64/0.17.16: + /@esbuild/darwin-x64@0.17.16: resolution: {integrity: sha512-SzBQtCV3Pdc9kyizh36Ol+dNVhkDyIrGb/JXZqFq8WL37LIyrXU0gUpADcNV311sCOhvY+f2ivMhb5Tuv8nMOQ==} engines: {node: '>=12'} cpu: [x64] @@ -1712,7 +1788,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64/0.16.17: + /@esbuild/freebsd-arm64@0.16.17: resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} engines: {node: '>=12'} cpu: [arm64] @@ -1721,7 +1797,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64/0.17.16: + /@esbuild/freebsd-arm64@0.17.16: resolution: {integrity: sha512-ZqftdfS1UlLiH1DnS2u3It7l4Bc3AskKeu+paJSfk7RNOMrOxmeFDhLTMQqMxycP1C3oj8vgkAT6xfAuq7ZPRA==} engines: {node: '>=12'} cpu: [arm64] @@ -1730,7 +1806,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64/0.16.17: + /@esbuild/freebsd-x64@0.16.17: resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} engines: {node: '>=12'} cpu: [x64] @@ -1739,7 +1815,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64/0.17.16: + /@esbuild/freebsd-x64@0.17.16: resolution: {integrity: sha512-rHV6zNWW1tjgsu0dKQTX9L0ByiJHHLvQKrWtnz8r0YYJI27FU3Xu48gpK2IBj1uCSYhJ+pEk6Y0Um7U3rIvV8g==} engines: {node: '>=12'} cpu: [x64] @@ -1748,43 +1824,43 @@ packages: dev: true optional: true - /@esbuild/linux-arm/0.16.17: - resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} + /@esbuild/linux-arm64@0.16.17: + resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-arm/0.17.16: - resolution: {integrity: sha512-n4O8oVxbn7nl4+m+ISb0a68/lcJClIbaGAoXwqeubj/D1/oMMuaAXmJVfFlRjJLu/ZvHkxoiFJnmbfp4n8cdSw==} + /@esbuild/linux-arm64@0.17.16: + resolution: {integrity: sha512-8yoZhGkU6aHu38WpaM4HrRLTFc7/VVD9Q2SvPcmIQIipQt2I/GMTZNdEHXoypbbGao5kggLcxg0iBKjo0SQYKA==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-arm64/0.16.17: - resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} + /@esbuild/linux-arm@0.16.17: + resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-arm64/0.17.16: - resolution: {integrity: sha512-8yoZhGkU6aHu38WpaM4HrRLTFc7/VVD9Q2SvPcmIQIipQt2I/GMTZNdEHXoypbbGao5kggLcxg0iBKjo0SQYKA==} + /@esbuild/linux-arm@0.17.16: + resolution: {integrity: sha512-n4O8oVxbn7nl4+m+ISb0a68/lcJClIbaGAoXwqeubj/D1/oMMuaAXmJVfFlRjJLu/ZvHkxoiFJnmbfp4n8cdSw==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-ia32/0.16.17: + /@esbuild/linux-ia32@0.16.17: resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} engines: {node: '>=12'} cpu: [ia32] @@ -1793,7 +1869,7 @@ packages: dev: true optional: true - /@esbuild/linux-ia32/0.17.16: + /@esbuild/linux-ia32@0.17.16: resolution: {integrity: sha512-9ZBjlkdaVYxPNO8a7OmzDbOH9FMQ1a58j7Xb21UfRU29KcEEU3VTHk+Cvrft/BNv0gpWJMiiZ/f4w0TqSP0gLA==} engines: {node: '>=12'} cpu: [ia32] @@ -1802,7 +1878,7 @@ packages: dev: true optional: true - /@esbuild/linux-loong64/0.16.17: + /@esbuild/linux-loong64@0.16.17: resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==} engines: {node: '>=12'} cpu: [loong64] @@ -1811,7 +1887,7 @@ packages: dev: true optional: true - /@esbuild/linux-loong64/0.17.16: + /@esbuild/linux-loong64@0.17.16: resolution: {integrity: sha512-TIZTRojVBBzdgChY3UOG7BlPhqJz08AL7jdgeeu+kiObWMFzGnQD7BgBBkWRwOtKR1i2TNlO7YK6m4zxVjjPRQ==} engines: {node: '>=12'} cpu: [loong64] @@ -1820,7 +1896,7 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el/0.16.17: + /@esbuild/linux-mips64el@0.16.17: resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} engines: {node: '>=12'} cpu: [mips64el] @@ -1829,7 +1905,7 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el/0.17.16: + /@esbuild/linux-mips64el@0.17.16: resolution: {integrity: sha512-UPeRuFKCCJYpBbIdczKyHLAIU31GEm0dZl1eMrdYeXDH+SJZh/i+2cAmD3A1Wip9pIc5Sc6Kc5cFUrPXtR0XHA==} engines: {node: '>=12'} cpu: [mips64el] @@ -1838,7 +1914,7 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64/0.16.17: + /@esbuild/linux-ppc64@0.16.17: resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} engines: {node: '>=12'} cpu: [ppc64] @@ -1847,7 +1923,7 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64/0.17.16: + /@esbuild/linux-ppc64@0.17.16: resolution: {integrity: sha512-io6yShgIEgVUhExJejJ21xvO5QtrbiSeI7vYUnr7l+v/O9t6IowyhdiYnyivX2X5ysOVHAuyHW+Wyi7DNhdw6Q==} engines: {node: '>=12'} cpu: [ppc64] @@ -1856,7 +1932,7 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64/0.16.17: + /@esbuild/linux-riscv64@0.16.17: resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} engines: {node: '>=12'} cpu: [riscv64] @@ -1865,7 +1941,7 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64/0.17.16: + /@esbuild/linux-riscv64@0.17.16: resolution: {integrity: sha512-WhlGeAHNbSdG/I2gqX2RK2gfgSNwyJuCiFHMc8s3GNEMMHUI109+VMBfhVqRb0ZGzEeRiibi8dItR3ws3Lk+cA==} engines: {node: '>=12'} cpu: [riscv64] @@ -1874,7 +1950,7 @@ packages: dev: true optional: true - /@esbuild/linux-s390x/0.16.17: + /@esbuild/linux-s390x@0.16.17: resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} engines: {node: '>=12'} cpu: [s390x] @@ -1883,7 +1959,7 @@ packages: dev: true optional: true - /@esbuild/linux-s390x/0.17.16: + /@esbuild/linux-s390x@0.17.16: resolution: {integrity: sha512-gHRReYsJtViir63bXKoFaQ4pgTyah4ruiMRQ6im9YZuv+gp3UFJkNTY4sFA73YDynmXZA6hi45en4BGhNOJUsw==} engines: {node: '>=12'} cpu: [s390x] @@ -1892,7 +1968,7 @@ packages: dev: true optional: true - /@esbuild/linux-x64/0.16.17: + /@esbuild/linux-x64@0.16.17: resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} engines: {node: '>=12'} cpu: [x64] @@ -1901,7 +1977,7 @@ packages: dev: true optional: true - /@esbuild/linux-x64/0.17.16: + /@esbuild/linux-x64@0.17.16: resolution: {integrity: sha512-mfiiBkxEbUHvi+v0P+TS7UnA9TeGXR48aK4XHkTj0ZwOijxexgMF01UDFaBX7Q6CQsB0d+MFNv9IiXbIHTNd4g==} engines: {node: '>=12'} cpu: [x64] @@ -1910,7 +1986,7 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64/0.16.17: + /@esbuild/netbsd-x64@0.16.17: resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} engines: {node: '>=12'} cpu: [x64] @@ -1919,7 +1995,7 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64/0.17.16: + /@esbuild/netbsd-x64@0.17.16: resolution: {integrity: sha512-n8zK1YRDGLRZfVcswcDMDM0j2xKYLNXqei217a4GyBxHIuPMGrrVuJ+Ijfpr0Kufcm7C1k/qaIrGy6eG7wvgmA==} engines: {node: '>=12'} cpu: [x64] @@ -1928,7 +2004,7 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64/0.16.17: + /@esbuild/openbsd-x64@0.16.17: resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} engines: {node: '>=12'} cpu: [x64] @@ -1937,7 +2013,7 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64/0.17.16: + /@esbuild/openbsd-x64@0.17.16: resolution: {integrity: sha512-lEEfkfsUbo0xC47eSTBqsItXDSzwzwhKUSsVaVjVji07t8+6KA5INp2rN890dHZeueXJAI8q0tEIfbwVRYf6Ew==} engines: {node: '>=12'} cpu: [x64] @@ -1946,7 +2022,7 @@ packages: dev: true optional: true - /@esbuild/sunos-x64/0.16.17: + /@esbuild/sunos-x64@0.16.17: resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} engines: {node: '>=12'} cpu: [x64] @@ -1955,7 +2031,7 @@ packages: dev: true optional: true - /@esbuild/sunos-x64/0.17.16: + /@esbuild/sunos-x64@0.17.16: resolution: {integrity: sha512-jlRjsuvG1fgGwnE8Afs7xYDnGz0dBgTNZfgCK6TlvPH3Z13/P5pi6I57vyLE8qZYLrGVtwcm9UbUx1/mZ8Ukag==} engines: {node: '>=12'} cpu: [x64] @@ -1964,7 +2040,7 @@ packages: dev: true optional: true - /@esbuild/win32-arm64/0.16.17: + /@esbuild/win32-arm64@0.16.17: resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} engines: {node: '>=12'} cpu: [arm64] @@ -1973,7 +2049,7 @@ packages: dev: true optional: true - /@esbuild/win32-arm64/0.17.16: + /@esbuild/win32-arm64@0.17.16: resolution: {integrity: sha512-TzoU2qwVe2boOHl/3KNBUv2PNUc38U0TNnzqOAcgPiD/EZxT2s736xfC2dYQbszAwo4MKzzwBV0iHjhfjxMimg==} engines: {node: '>=12'} cpu: [arm64] @@ -1982,7 +2058,7 @@ packages: dev: true optional: true - /@esbuild/win32-ia32/0.16.17: + /@esbuild/win32-ia32@0.16.17: resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} engines: {node: '>=12'} cpu: [ia32] @@ -1991,7 +2067,7 @@ packages: dev: true optional: true - /@esbuild/win32-ia32/0.17.16: + /@esbuild/win32-ia32@0.17.16: resolution: {integrity: sha512-B8b7W+oo2yb/3xmwk9Vc99hC9bNolvqjaTZYEfMQhzdpBsjTvZBlXQ/teUE55Ww6sg//wlcDjOaqldOKyigWdA==} engines: {node: '>=12'} cpu: [ia32] @@ -2000,7 +2076,7 @@ packages: dev: true optional: true - /@esbuild/win32-x64/0.16.17: + /@esbuild/win32-x64@0.16.17: resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} engines: {node: '>=12'} cpu: [x64] @@ -2009,7 +2085,7 @@ packages: dev: true optional: true - /@esbuild/win32-x64/0.17.16: + /@esbuild/win32-x64@0.17.16: resolution: {integrity: sha512-xJ7OH/nanouJO9pf03YsL9NAFQBHd8AqfrQd7Pf5laGyyTt/gToul6QYOA/i5i/q8y9iaM5DQFNTgpi995VkOg==} engines: {node: '>=12'} cpu: [x64] @@ -2018,7 +2094,7 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils/4.4.0_eslint@7.32.0: + /@eslint-community/eslint-utils@4.4.0(eslint@7.32.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2028,17 +2104,17 @@ packages: eslint-visitor-keys: 3.4.0 dev: true - /@eslint-community/regexpp/4.5.0: + /@eslint-community/regexpp@4.5.0: resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc/0.4.3: + /@eslint/eslintrc@0.4.3: resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) espree: 7.3.1 globals: 13.20.0 ignore: 4.0.6 @@ -2050,22 +2126,22 @@ packages: - supports-color dev: true - /@humanwhocodes/config-array/0.5.0: + /@humanwhocodes/config-array@0.5.0: resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color dev: true - /@humanwhocodes/object-schema/1.2.1: + /@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@istanbuljs/load-nyc-config/1.1.0: + /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} dependencies: @@ -2076,12 +2152,12 @@ packages: resolve-from: 5.0.0 dev: true - /@istanbuljs/schema/0.1.3: + /@istanbuljs/schema@0.1.3: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} dev: true - /@jest/console/29.5.0: + /@jest/console@29.5.0: resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2093,7 +2169,7 @@ packages: slash: 3.0.0 dev: true - /@jest/core/29.5.0_ts-node@10.9.1: + /@jest/core@29.5.0(ts-node@10.9.1): resolution: {integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2114,7 +2190,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.5.0 - jest-config: 29.5.0_rrli7kzx2akox3oq6aahu3rvje + jest-config: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) jest-haste-map: 29.5.0 jest-message-util: 29.5.0 jest-regex-util: 29.4.3 @@ -2135,14 +2211,14 @@ packages: - ts-node dev: true - /@jest/create-cache-key-function/27.5.1: + /@jest/create-cache-key-function@27.5.1: resolution: {integrity: sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 dev: true - /@jest/environment/29.5.0: + /@jest/environment@29.5.0: resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2152,14 +2228,14 @@ packages: jest-mock: 29.5.0 dev: true - /@jest/expect-utils/29.5.0: + /@jest/expect-utils@29.5.0: resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.3 dev: true - /@jest/expect/29.5.0: + /@jest/expect@29.5.0: resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2169,7 +2245,7 @@ packages: - supports-color dev: true - /@jest/fake-timers/29.5.0: + /@jest/fake-timers@29.5.0: resolution: {integrity: sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2181,7 +2257,7 @@ packages: jest-util: 29.5.0 dev: true - /@jest/globals/29.5.0: + /@jest/globals@29.5.0: resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2193,7 +2269,7 @@ packages: - supports-color dev: true - /@jest/reporters/29.5.0: + /@jest/reporters@29.5.0: resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2230,14 +2306,14 @@ packages: - supports-color dev: true - /@jest/schemas/29.4.3: + /@jest/schemas@29.4.3: resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@sinclair/typebox': 0.25.24 dev: true - /@jest/source-map/29.4.3: + /@jest/source-map@29.4.3: resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2246,7 +2322,7 @@ packages: graceful-fs: 4.2.11 dev: true - /@jest/test-result/29.5.0: + /@jest/test-result@29.5.0: resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2256,7 +2332,7 @@ packages: collect-v8-coverage: 1.0.1 dev: true - /@jest/test-sequencer/29.5.0: + /@jest/test-sequencer@29.5.0: resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2266,7 +2342,7 @@ packages: slash: 3.0.0 dev: true - /@jest/transform/29.5.0: + /@jest/transform@29.5.0: resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2289,7 +2365,7 @@ packages: - supports-color dev: true - /@jest/types/27.5.1: + /@jest/types@27.5.1: resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: @@ -2300,7 +2376,7 @@ packages: chalk: 4.1.2 dev: true - /@jest/types/29.5.0: + /@jest/types@29.5.0: resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2312,7 +2388,7 @@ packages: chalk: 4.1.2 dev: true - /@jridgewell/gen-mapping/0.3.3: + /@jridgewell/gen-mapping@0.3.3: resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} dependencies: @@ -2321,56 +2397,56 @@ packages: '@jridgewell/trace-mapping': 0.3.18 dev: true - /@jridgewell/resolve-uri/3.1.0: + /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/resolve-uri/3.1.1: + /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/set-array/1.1.2: + /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/source-map/0.3.3: + /@jridgewell/source-map@0.3.3: resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} dependencies: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 dev: true - /@jridgewell/sourcemap-codec/1.4.14: + /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true - /@jridgewell/sourcemap-codec/1.4.15: + /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true - /@jridgewell/trace-mapping/0.3.18: + /@jridgewell/trace-mapping@0.3.18: resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@jridgewell/trace-mapping/0.3.9: + /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /@mswjs/cookies/1.0.0: + /@mswjs/cookies@1.0.0: resolution: {integrity: sha512-TdXoBdI+h/EDTsVLCX/34s4+9U0sWi92qFnIGUEikpMCSKLhBeujovyYVSoORNbYgsBH5ga7/tfxyWcEZAxiYA==} engines: {node: '>=14'} dev: false - /@mswjs/interceptors/0.22.13: + /@mswjs/interceptors@0.22.13: resolution: {integrity: sha512-JMnl/eoF3cne6kvtJo9vZTpYum3ES1X6okfmSMRpvrCaodulN+QfVQ79Oyb/fZkHuI+pYpLVrTjGpBTOmZ6xcw==} engines: {node: '>=18'} dependencies: @@ -2382,7 +2458,7 @@ packages: strict-event-emitter: 0.5.0 dev: false - /@nodelib/fs.scandir/2.1.5: + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} dependencies: @@ -2390,12 +2466,12 @@ packages: run-parallel: 1.2.0 dev: true - /@nodelib/fs.stat/2.0.5: + /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} dev: true - /@nodelib/fs.walk/1.2.8: + /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} dependencies: @@ -2403,25 +2479,25 @@ packages: fastq: 1.15.0 dev: true - /@open-draft/deferred-promise/2.1.0: + /@open-draft/deferred-promise@2.1.0: resolution: {integrity: sha512-Rzd5JrXZX8zErHzgcGyngh4fmEbSHqTETdGj9rXtejlqMIgXFlyKBA7Jn1Xp0Ls0M0Y22+xHcWiEzbmdWl0BOA==} dev: false - /@open-draft/logger/0.3.0: + /@open-draft/logger@0.3.0: resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} dependencies: is-node-process: 1.2.0 outvariant: 1.4.0 dev: false - /@open-draft/test-server/0.4.2: + /@open-draft/test-server@0.4.2: resolution: {integrity: sha512-J9wbdQkPx5WKcDNtgfnXsx5ew4UJd6BZyGr89YlHeaUkOShkO2iO5QIyCCsG4qpjIvr2ZTkEYJA9ujOXXyO6Pg==} dependencies: '@types/body-parser': 1.19.2 '@types/cors': 2.8.13 '@types/express': 4.17.17 cors: 2.8.5 - express: 4.18.2 + express: 4.18.2(supports-color@6.1.0) outvariant: 1.4.0 socket.io: 4.6.1 transitivePeerDependencies: @@ -2430,10 +2506,10 @@ packages: - utf-8-validate dev: true - /@open-draft/until/2.1.0: + /@open-draft/until@2.1.0: resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - /@ossjs/release/0.4.0: + /@ossjs/release@0.4.0: resolution: {integrity: sha512-cfW+gk3GdVqjrawkAG8q6MXPmTJouwwPegmBAVNvYvKq/tKQHgluxiueTlNTdJRryI76rpe6y5+EXlHdisrwdg==} hasBin: true dependencies: @@ -2462,7 +2538,7 @@ packages: - encoding dev: true - /@playwright/test/1.32.3: + /@playwright/test@1.32.3: resolution: {integrity: sha512-BvWNvK0RfBriindxhLVabi8BRe3X0J9EVjKlcmhxjg4giWBD/xleLcg2dz7Tx0agu28rczjNIPQWznwzDwVsZQ==} engines: {node: '>=14'} hasBin: true @@ -2473,13 +2549,13 @@ packages: fsevents: 2.3.2 dev: true - /@rollup/plugin-node-resolve/13.3.0_rollup@2.79.1: + /@rollup/plugin-node-resolve@13.3.0(rollup@2.79.1): resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==} engines: {node: '>= 10.0.0'} peerDependencies: rollup: ^2.42.0 dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.79.1 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) '@types/resolve': 1.17.1 deepmerge: 4.3.1 is-builtin-module: 3.2.1 @@ -2488,7 +2564,7 @@ packages: rollup: 2.79.1 dev: true - /@rollup/pluginutils/3.1.0_rollup@2.79.1: + /@rollup/pluginutils@3.1.0(rollup@2.79.1): resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} engines: {node: '>= 8.0.0'} peerDependencies: @@ -2500,26 +2576,26 @@ packages: rollup: 2.79.1 dev: true - /@sinclair/typebox/0.25.24: + /@sinclair/typebox@0.25.24: resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} dev: true - /@sinonjs/commons/2.0.0: + /@sinonjs/commons@2.0.0: resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} dependencies: type-detect: 4.0.8 dev: true - /@sinonjs/fake-timers/10.0.2: + /@sinonjs/fake-timers@10.0.2: resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} dependencies: '@sinonjs/commons': 2.0.0 dev: true - /@socket.io/component-emitter/3.1.0: + /@socket.io/component-emitter@3.1.0: resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} - /@swc/core-darwin-arm64/1.3.49: + /@swc/core-darwin-arm64@1.3.49: resolution: {integrity: sha512-g7aIfXh6uPHmhLXdjXQq5t3HAyS/EdvujasW1DIS5k8UqOBaSoCcSGtLIjzcLv3KujqNfYcm118E+12H0nY6fQ==} engines: {node: '>=10'} cpu: [arm64] @@ -2528,7 +2604,7 @@ packages: dev: true optional: true - /@swc/core-darwin-x64/1.3.49: + /@swc/core-darwin-x64@1.3.49: resolution: {integrity: sha512-eSIxVX0YDw40Bre5sAx2BV3DzdIGzmQvCf2yiBvLqiiL6GC0mmuDeWbUCAzdUX6fJ6FUVEBMUVqNOc9oJ2/d5w==} engines: {node: '>=10'} cpu: [x64] @@ -2537,7 +2613,7 @@ packages: dev: true optional: true - /@swc/core-linux-arm-gnueabihf/1.3.49: + /@swc/core-linux-arm-gnueabihf@1.3.49: resolution: {integrity: sha512-8mj3IcRVr/OJY0mVITz6Z5osNAMJK5GiKDaZ+3QejPLbl6aiu4sH4GmTHDRN14RnaVXOpecsGcUoQmNoNa3u3w==} engines: {node: '>=10'} cpu: [arm] @@ -2546,7 +2622,7 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-gnu/1.3.49: + /@swc/core-linux-arm64-gnu@1.3.49: resolution: {integrity: sha512-Rmg9xw6tmpOpf6GKKjpHQGmjfHzqSths5ebI2ahrHlhekzZF2HYmPkVw4bHda8Bja6mbaw8FVBgBHjPU8mMeDA==} engines: {node: '>=10'} cpu: [arm64] @@ -2555,7 +2631,7 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-musl/1.3.49: + /@swc/core-linux-arm64-musl@1.3.49: resolution: {integrity: sha512-nlKPYMogAI3Aak6Mlkag8/2AlHAZ/DpH7RjhfMazsaGhD/sQOmYdyY9Al69ejpa419YJuREeeeLoojFlSsd30g==} engines: {node: '>=10'} cpu: [arm64] @@ -2564,7 +2640,7 @@ packages: dev: true optional: true - /@swc/core-linux-x64-gnu/1.3.49: + /@swc/core-linux-x64-gnu@1.3.49: resolution: {integrity: sha512-QOyeJQ6NVi73SJcizbwvIZTiGA/N+BxX9liRrvibumaQmRh8fWjJiLNsv3ODSHeuonak7E8Bf7a7NnSTyu48Mw==} engines: {node: '>=10'} cpu: [x64] @@ -2573,7 +2649,7 @@ packages: dev: true optional: true - /@swc/core-linux-x64-musl/1.3.49: + /@swc/core-linux-x64-musl@1.3.49: resolution: {integrity: sha512-WlDMz+SOpYC9O/ZBUw1oiyWI7HyUCMlf/HS8Fy/kRI3eGoGCUxVTCJ1mP57GdQr4Wg32Y/ZpO2KSNQFWnT8mAw==} engines: {node: '>=10'} cpu: [x64] @@ -2582,7 +2658,7 @@ packages: dev: true optional: true - /@swc/core-win32-arm64-msvc/1.3.49: + /@swc/core-win32-arm64-msvc@1.3.49: resolution: {integrity: sha512-41LZOeI94Za3twib8KOIjnHYAZ+nkBFmboaREsFR1760S7jiMVywqWX8nFZvn/CXj15Fjjgdgyuig+zMREwXwQ==} engines: {node: '>=10'} cpu: [arm64] @@ -2591,7 +2667,7 @@ packages: dev: true optional: true - /@swc/core-win32-ia32-msvc/1.3.49: + /@swc/core-win32-ia32-msvc@1.3.49: resolution: {integrity: sha512-IdqLPoMKssyAoOCZdNXmnAd6/uyx+Hb9KSfZUHepZaNfwMy6J5XXrOsbYs3v53FH8MtekUUdV+mMX4me9bcv9w==} engines: {node: '>=10'} cpu: [ia32] @@ -2600,7 +2676,7 @@ packages: dev: true optional: true - /@swc/core-win32-x64-msvc/1.3.49: + /@swc/core-win32-x64-msvc@1.3.49: resolution: {integrity: sha512-7Fqjo5pS3uIohhSbYSaR0+e/bJdxmQb4oG97FIh5qvlCCGQaQ9UiaEeYy4uK0Ad+Menum1IXCAEiG7RHcl6Eyw==} engines: {node: '>=10'} cpu: [x64] @@ -2609,7 +2685,7 @@ packages: dev: true optional: true - /@swc/core/1.3.49: + /@swc/core@1.3.49: resolution: {integrity: sha512-br44ZHOfE9YyRGcORSLkHFQHTvhwRcaithBJ1Q5y5iMGpLbH0Wai3GN49L60RvmGwxNJfWzT+E7+rNNR7ewKgA==} engines: {node: '>=10'} requiresBuild: true @@ -2631,7 +2707,7 @@ packages: '@swc/core-win32-x64-msvc': 1.3.49 dev: true - /@swc/jest/0.2.24_@swc+core@1.3.49: + /@swc/jest@0.2.24(@swc/core@1.3.49): resolution: {integrity: sha512-fwgxQbM1wXzyKzl1+IW0aGrRvAA8k0Y3NxFhKigbPjOJ4mCKnWEcNX9HQS3gshflcxq8YKhadabGUVfdwjCr6Q==} engines: {npm: '>= 7.0.0'} peerDependencies: @@ -2642,34 +2718,34 @@ packages: jsonc-parser: 3.2.0 dev: true - /@tootallnate/once/2.0.0: + /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} dev: true - /@tsconfig/node10/1.0.9: + /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true - /@tsconfig/node12/1.0.11: + /@tsconfig/node12@1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} dev: true - /@tsconfig/node14/1.0.3: + /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} dev: true - /@tsconfig/node16/1.0.3: + /@tsconfig/node16@1.0.3: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true - /@types/accepts/1.3.5: + /@types/accepts@1.3.5: resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==} dependencies: '@types/node': 18.15.11 dev: true - /@types/babel__core/7.20.0: + /@types/babel__core@7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: '@babel/parser': 7.21.4 @@ -2679,56 +2755,56 @@ packages: '@types/babel__traverse': 7.18.3 dev: true - /@types/babel__generator/7.6.4: + /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: '@babel/types': 7.21.4 dev: true - /@types/babel__template/7.4.1: + /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: '@babel/parser': 7.21.4 '@babel/types': 7.21.4 dev: true - /@types/babel__traverse/7.18.3: + /@types/babel__traverse@7.18.3: resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: '@babel/types': 7.21.4 dev: true - /@types/body-parser/1.19.2: + /@types/body-parser@1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 '@types/node': 18.15.11 dev: true - /@types/command-line-args/5.2.0: + /@types/command-line-args@5.2.0: resolution: {integrity: sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==} dev: true - /@types/connect/3.4.35: + /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: '@types/node': 18.15.11 dev: true - /@types/content-disposition/0.5.5: + /@types/content-disposition@0.5.5: resolution: {integrity: sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==} dev: true - /@types/conventional-commits-parser/3.0.3: + /@types/conventional-commits-parser@3.0.3: resolution: {integrity: sha512-aoUKfRQYvGMH+spFpOTX9jO4nZoz9/BKp4hlHPxL3Cj2r2Xj+jEcwlXtFIyZr5uL8bh1nbWynDEYaAota+XqPg==} dependencies: '@types/node': 18.15.11 dev: true - /@types/cookie/0.4.1: + /@types/cookie@0.4.1: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} - /@types/cookies/0.7.7: + /@types/cookies@0.7.7: resolution: {integrity: sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==} dependencies: '@types/connect': 3.4.35 @@ -2737,40 +2813,40 @@ packages: '@types/node': 18.15.11 dev: true - /@types/cors/2.8.13: + /@types/cors@2.8.13: resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==} dependencies: '@types/node': 18.15.11 - /@types/debug/4.1.7: + /@types/debug@4.1.7: resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} dependencies: '@types/ms': 0.7.31 dev: true - /@types/eslint-scope/3.7.4: + /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: '@types/eslint': 8.37.0 '@types/estree': 1.0.0 dev: true - /@types/eslint/8.37.0: + /@types/eslint@8.37.0: resolution: {integrity: sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==} dependencies: '@types/estree': 1.0.0 '@types/json-schema': 7.0.11 dev: true - /@types/estree/0.0.39: + /@types/estree@0.0.39: resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} dev: true - /@types/estree/1.0.0: + /@types/estree@1.0.0: resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} dev: true - /@types/express-serve-static-core/4.17.33: + /@types/express-serve-static-core@4.17.33: resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} dependencies: '@types/node': 18.15.11 @@ -2778,7 +2854,7 @@ packages: '@types/range-parser': 1.2.4 dev: true - /@types/express/4.17.17: + /@types/express@4.17.17: resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} dependencies: '@types/body-parser': 1.19.2 @@ -2787,72 +2863,72 @@ packages: '@types/serve-static': 1.15.1 dev: true - /@types/fs-extra/9.0.13: + /@types/fs-extra@9.0.13: resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} dependencies: '@types/node': 18.15.11 dev: true - /@types/glob/7.2.0: + /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 '@types/node': 18.15.11 dev: true - /@types/glob/8.1.0: + /@types/glob@8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} dependencies: '@types/minimatch': 5.1.2 '@types/node': 18.15.11 dev: true - /@types/graceful-fs/4.1.6: + /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: '@types/node': 18.15.11 dev: true - /@types/http-assert/1.5.3: + /@types/http-assert@1.5.3: resolution: {integrity: sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==} dev: true - /@types/http-errors/2.0.1: + /@types/http-errors@2.0.1: resolution: {integrity: sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==} dev: true - /@types/issue-parser/3.0.1: + /@types/issue-parser@3.0.1: resolution: {integrity: sha512-cdggbeJIxWoIB8CB57BvenONrQZcBuEf2uddxMRNIy2jgdcnSxnY71tQcNrxdqTG4VmQP5fdLLE9E+jCnMK0Fg==} dev: true - /@types/istanbul-lib-coverage/2.0.4: + /@types/istanbul-lib-coverage@2.0.4: resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} dev: true - /@types/istanbul-lib-report/3.0.0: + /@types/istanbul-lib-report@3.0.0: resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} dependencies: '@types/istanbul-lib-coverage': 2.0.4 dev: true - /@types/istanbul-reports/3.0.1: + /@types/istanbul-reports@3.0.1: resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} dependencies: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest/29.5.0: + /@types/jest@29.5.0: resolution: {integrity: sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg==} dependencies: expect: 29.5.0 pretty-format: 29.5.0 dev: true - /@types/js-levenshtein/1.1.1: + /@types/js-levenshtein@1.1.1: resolution: {integrity: sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==} dev: false - /@types/jsdom/20.0.1: + /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: '@types/node': 18.15.11 @@ -2860,25 +2936,25 @@ packages: parse5: 7.1.2 dev: true - /@types/json-bigint/1.0.1: + /@types/json-bigint@1.0.1: resolution: {integrity: sha512-zpchZLNsNuzJHi6v64UBoFWAvQlPhch7XAi36FkH6tL1bbbmimIF+cS7vwkzY4u5RaSWMoflQfu+TshMPPw8uw==} dev: true - /@types/json-schema/7.0.11: + /@types/json-schema@7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true - /@types/keygrip/1.0.2: + /@types/keygrip@1.0.2: resolution: {integrity: sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==} dev: true - /@types/koa-compose/3.2.5: + /@types/koa-compose@3.2.5: resolution: {integrity: sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==} dependencies: '@types/koa': 2.13.6 dev: true - /@types/koa/2.13.6: + /@types/koa@2.13.6: resolution: {integrity: sha512-diYUfp/GqfWBAiwxHtYJ/FQYIXhlEhlyaU7lB/bWQrx4Il9lCET5UwpFy3StOAohfsxxvEQ11qIJgT1j2tfBvw==} dependencies: '@types/accepts': 1.3.5 @@ -2891,136 +2967,136 @@ packages: '@types/node': 18.15.11 dev: true - /@types/mime/3.0.1: + /@types/mime@3.0.1: resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} dev: true - /@types/minimatch/5.1.2: + /@types/minimatch@5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true - /@types/minimist/1.2.2: + /@types/minimist@1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true - /@types/ms/0.7.31: + /@types/ms@0.7.31: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} dev: true - /@types/mustache/4.2.2: + /@types/mustache@4.2.2: resolution: {integrity: sha512-MUSpfpW0yZbTgjekDbH0shMYBUD+X/uJJJMm9LXN1d5yjl5lCY1vN/eWKD6D1tOtjA6206K0zcIPnUaFMurdNA==} dev: true - /@types/node-fetch/2.6.3: + /@types/node-fetch@2.6.3: resolution: {integrity: sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==} dependencies: '@types/node': 18.15.11 form-data: 3.0.1 dev: true - /@types/node/16.18.23: + /@types/node@16.18.23: resolution: {integrity: sha512-XAMpaw1s1+6zM+jn2tmw8MyaRDIJfXxqmIQIS0HfoGYPuf7dUWeiUKopwq13KFX9lEp1+THGtlaaYx39Nxr58g==} dev: true - /@types/node/18.15.11: + /@types/node@18.15.11: resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} - /@types/normalize-package-data/2.4.1: + /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true - /@types/parse-json/4.0.0: + /@types/parse-json@4.0.0: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} dev: true - /@types/parse5/6.0.3: + /@types/parse5@6.0.3: resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} dev: true - /@types/prettier/2.7.2: + /@types/prettier@2.7.2: resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} dev: true - /@types/puppeteer/5.4.7: + /@types/puppeteer@5.4.7: resolution: {integrity: sha512-JdGWZZYL0vKapXF4oQTC5hLVNfOgdPrqeZ1BiQnGk5cB7HeE91EWUiTdVSdQPobRN8rIcdffjiOgCYJ/S8QrnQ==} dependencies: '@types/node': 18.15.11 dev: true - /@types/qs/6.9.7: + /@types/qs@6.9.7: resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} dev: true - /@types/range-parser/1.2.4: + /@types/range-parser@1.2.4: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} dev: true - /@types/rc/1.2.1: + /@types/rc@1.2.1: resolution: {integrity: sha512-+TRLFmHLnpoV0uw4O/PzqMbPT6bhQM0q2KO0l+R7M3sHYRndPpNL6kv8p7Ee9ZxgQ6noYB18/t+heQi7eijOHA==} dependencies: '@types/minimist': 1.2.2 dev: true - /@types/registry-auth-token/4.2.1: + /@types/registry-auth-token@4.2.1: resolution: {integrity: sha512-VtTUcUaJGiJtlBKYwwFIOSvrcnuKmpPGO+x56XijNZnaDpnzKh2VwoTw5hewrOMW2BgjoU+uFbVAvSCW2FpWmA==} dev: true - /@types/resolve/1.17.1: + /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: '@types/node': 18.15.11 dev: true - /@types/semver/7.3.13: + /@types/semver@7.3.13: resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} dev: true - /@types/serve-static/1.15.1: + /@types/serve-static@1.15.1: resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} dependencies: '@types/mime': 3.0.1 '@types/node': 18.15.11 dev: true - /@types/stack-utils/2.0.1: + /@types/stack-utils@2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} dev: true - /@types/statuses/2.0.1: + /@types/statuses@2.0.1: resolution: {integrity: sha512-vVRgv7WXbhIZzILgr58b4Ki2uqpN/dlVCUBWCMkPbMDlV1CrQrgCl5hnIoUlMrgymGcTmdfVqbs1yWj/IRIRtQ==} dev: false - /@types/tough-cookie/4.0.2: + /@types/tough-cookie@4.0.2: resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} dev: true - /@types/uuid/8.3.4: + /@types/uuid@8.3.4: resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} dev: true - /@types/ws/7.4.7: + /@types/ws@7.4.7: resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} dependencies: '@types/node': 18.15.11 dev: true - /@types/yargs-parser/21.0.0: + /@types/yargs-parser@21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true - /@types/yargs/16.0.5: + /@types/yargs@16.0.5: resolution: {integrity: sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==} dependencies: '@types/yargs-parser': 21.0.0 dev: true - /@types/yargs/17.0.24: + /@types/yargs@17.0.24: resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} dependencies: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin/5.58.0_ug56riyzsilszklzuxgwlsssqe: + /@typescript-eslint/eslint-plugin@5.58.0(@typescript-eslint/parser@5.58.0)(eslint@7.32.0)(typescript@5.0.4): resolution: {integrity: sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3032,23 +3108,23 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.5.0 - '@typescript-eslint/parser': 5.58.0_cgdknpc562nnyruteofhkegnom + '@typescript-eslint/parser': 5.58.0(eslint@7.32.0)(typescript@5.0.4) '@typescript-eslint/scope-manager': 5.58.0 - '@typescript-eslint/type-utils': 5.58.0_cgdknpc562nnyruteofhkegnom - '@typescript-eslint/utils': 5.58.0_cgdknpc562nnyruteofhkegnom - debug: 4.3.4 + '@typescript-eslint/type-utils': 5.58.0(eslint@7.32.0)(typescript@5.0.4) + '@typescript-eslint/utils': 5.58.0(eslint@7.32.0)(typescript@5.0.4) + debug: 4.3.4(supports-color@6.1.0) eslint: 7.32.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 semver: 7.4.0 - tsutils: 3.21.0_typescript@5.0.4 + tsutils: 3.21.0(typescript@5.0.4) typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser/5.58.0_cgdknpc562nnyruteofhkegnom: + /@typescript-eslint/parser@5.58.0(eslint@7.32.0)(typescript@5.0.4): resolution: {integrity: sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3060,15 +3136,15 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.58.0 '@typescript-eslint/types': 5.58.0 - '@typescript-eslint/typescript-estree': 5.58.0_typescript@5.0.4 - debug: 4.3.4 + '@typescript-eslint/typescript-estree': 5.58.0(typescript@5.0.4) + debug: 4.3.4(supports-color@6.1.0) eslint: 7.32.0 typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager/5.58.0: + /@typescript-eslint/scope-manager@5.58.0: resolution: {integrity: sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -3076,7 +3152,7 @@ packages: '@typescript-eslint/visitor-keys': 5.58.0 dev: true - /@typescript-eslint/type-utils/5.58.0_cgdknpc562nnyruteofhkegnom: + /@typescript-eslint/type-utils@5.58.0(eslint@7.32.0)(typescript@5.0.4): resolution: {integrity: sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3086,22 +3162,22 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.58.0_typescript@5.0.4 - '@typescript-eslint/utils': 5.58.0_cgdknpc562nnyruteofhkegnom - debug: 4.3.4 + '@typescript-eslint/typescript-estree': 5.58.0(typescript@5.0.4) + '@typescript-eslint/utils': 5.58.0(eslint@7.32.0)(typescript@5.0.4) + debug: 4.3.4(supports-color@6.1.0) eslint: 7.32.0 - tsutils: 3.21.0_typescript@5.0.4 + tsutils: 3.21.0(typescript@5.0.4) typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types/5.58.0: + /@typescript-eslint/types@5.58.0: resolution: {integrity: sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.58.0_typescript@5.0.4: + /@typescript-eslint/typescript-estree@5.58.0(typescript@5.0.4): resolution: {integrity: sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3112,28 +3188,28 @@ packages: dependencies: '@typescript-eslint/types': 5.58.0 '@typescript-eslint/visitor-keys': 5.58.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) globby: 11.1.0 is-glob: 4.0.3 semver: 7.4.0 - tsutils: 3.21.0_typescript@5.0.4 + tsutils: 3.21.0(typescript@5.0.4) typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils/5.58.0_cgdknpc562nnyruteofhkegnom: + /@typescript-eslint/utils@5.58.0(eslint@7.32.0)(typescript@5.0.4): resolution: {integrity: sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0_eslint@7.32.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@7.32.0) '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 '@typescript-eslint/scope-manager': 5.58.0 '@typescript-eslint/types': 5.58.0 - '@typescript-eslint/typescript-estree': 5.58.0_typescript@5.0.4 + '@typescript-eslint/typescript-estree': 5.58.0(typescript@5.0.4) eslint: 7.32.0 eslint-scope: 5.1.1 semver: 7.4.0 @@ -3142,7 +3218,7 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys/5.58.0: + /@typescript-eslint/visitor-keys@5.58.0: resolution: {integrity: sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -3150,14 +3226,14 @@ packages: eslint-visitor-keys: 3.4.0 dev: true - /@web/config-loader/0.1.3: + /@web/config-loader@0.1.3: resolution: {integrity: sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==} engines: {node: '>=10.0.0'} dependencies: semver: 7.4.0 dev: true - /@web/dev-server-core/0.4.1: + /@web/dev-server-core@0.4.1: resolution: {integrity: sha512-KdYwejXZwIZvb6tYMCqU7yBiEOPfKLQ3V9ezqqEz8DA9V9R3oQWaowckvCpFB9IxxPfS/P8/59OkdzGKQjcIUw==} engines: {node: '>=10.0.0'} dependencies: @@ -3185,11 +3261,11 @@ packages: - utf-8-validate dev: true - /@web/dev-server-rollup/0.4.1: + /@web/dev-server-rollup@0.4.1: resolution: {integrity: sha512-Ebsv7Ovd9MufeH3exvikBJ7GmrZA5OmHnOgaiHcwMJ2eQBJA5/I+/CbRjsLX97ICj/ZwZG//p2ITRz8W3UfSqg==} engines: {node: '>=10.0.0'} dependencies: - '@rollup/plugin-node-resolve': 13.3.0_rollup@2.79.1 + '@rollup/plugin-node-resolve': 13.3.0(rollup@2.79.1) '@web/dev-server-core': 0.4.1 nanocolors: 0.2.13 parse5: 6.0.1 @@ -3201,7 +3277,7 @@ packages: - utf-8-validate dev: true - /@web/dev-server/0.1.38: + /@web/dev-server@0.1.38: resolution: {integrity: sha512-WUq7Zi8KeJ5/UZmmpZ+kzUpUlFlMP/rcreJKYg9Lxiz998KYl4G5Rv24akX0piTuqXG7r6h+zszg8V/hdzjCoA==} engines: {node: '>=10.0.0'} hasBin: true @@ -3219,14 +3295,14 @@ packages: ip: 1.1.8 nanocolors: 0.2.13 open: 8.4.2 - portfinder: 1.0.32 + portfinder: 1.0.32(supports-color@6.1.0) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate dev: true - /@web/parse5-utils/1.3.1: + /@web/parse5-utils@1.3.1: resolution: {integrity: sha512-haCgDchZrAOB9EhBJ5XqiIjBMsS/exsM5Ru7sCSyNkXVEJWskyyKuKMFk66BonnIGMPpDtqDrTUfYEis5Zi3XA==} engines: {node: '>=10.0.0'} dependencies: @@ -3234,26 +3310,26 @@ packages: parse5: 6.0.1 dev: true - /@webassemblyjs/ast/1.11.1: + /@webassemblyjs/ast@1.11.1: resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} dependencies: '@webassemblyjs/helper-numbers': 1.11.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.1 dev: true - /@webassemblyjs/floating-point-hex-parser/1.11.1: + /@webassemblyjs/floating-point-hex-parser@1.11.1: resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==} dev: true - /@webassemblyjs/helper-api-error/1.11.1: + /@webassemblyjs/helper-api-error@1.11.1: resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==} dev: true - /@webassemblyjs/helper-buffer/1.11.1: + /@webassemblyjs/helper-buffer@1.11.1: resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==} dev: true - /@webassemblyjs/helper-numbers/1.11.1: + /@webassemblyjs/helper-numbers@1.11.1: resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==} dependencies: '@webassemblyjs/floating-point-hex-parser': 1.11.1 @@ -3261,11 +3337,11 @@ packages: '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/helper-wasm-bytecode/1.11.1: + /@webassemblyjs/helper-wasm-bytecode@1.11.1: resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==} dev: true - /@webassemblyjs/helper-wasm-section/1.11.1: + /@webassemblyjs/helper-wasm-section@1.11.1: resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3274,23 +3350,23 @@ packages: '@webassemblyjs/wasm-gen': 1.11.1 dev: true - /@webassemblyjs/ieee754/1.11.1: + /@webassemblyjs/ieee754@1.11.1: resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==} dependencies: '@xtuc/ieee754': 1.2.0 dev: true - /@webassemblyjs/leb128/1.11.1: + /@webassemblyjs/leb128@1.11.1: resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==} dependencies: '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/utf8/1.11.1: + /@webassemblyjs/utf8@1.11.1: resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==} dev: true - /@webassemblyjs/wasm-edit/1.11.1: + /@webassemblyjs/wasm-edit@1.11.1: resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3303,7 +3379,7 @@ packages: '@webassemblyjs/wast-printer': 1.11.1 dev: true - /@webassemblyjs/wasm-gen/1.11.1: + /@webassemblyjs/wasm-gen@1.11.1: resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3313,7 +3389,7 @@ packages: '@webassemblyjs/utf8': 1.11.1 dev: true - /@webassemblyjs/wasm-opt/1.11.1: + /@webassemblyjs/wasm-opt@1.11.1: resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3322,7 +3398,7 @@ packages: '@webassemblyjs/wasm-parser': 1.11.1 dev: true - /@webassemblyjs/wasm-parser/1.11.1: + /@webassemblyjs/wasm-parser@1.11.1: resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3333,22 +3409,22 @@ packages: '@webassemblyjs/utf8': 1.11.1 dev: true - /@webassemblyjs/wast-printer/1.11.1: + /@webassemblyjs/wast-printer@1.11.1: resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==} dependencies: '@webassemblyjs/ast': 1.11.1 '@xtuc/long': 4.2.2 dev: true - /@xtuc/ieee754/1.2.0: + /@xtuc/ieee754@1.2.0: resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} dev: true - /@xtuc/long/4.2.2: + /@xtuc/long@4.2.2: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true - /JSONStream/1.3.5: + /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true dependencies: @@ -3356,25 +3432,25 @@ packages: through: 2.3.8 dev: true - /abab/2.0.6: + /abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} dev: true - /accepts/1.3.8: + /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} dependencies: mime-types: 2.1.35 negotiator: 0.6.3 - /acorn-globals/7.0.1: + /acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: acorn: 8.8.2 acorn-walk: 8.2.0 dev: true - /acorn-import-assertions/1.8.0_acorn@8.8.2: + /acorn-import-assertions@1.8.0(acorn@8.8.2): resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} peerDependencies: acorn: ^8 @@ -3382,7 +3458,7 @@ packages: acorn: 8.8.2 dev: true - /acorn-jsx/5.3.2_acorn@7.4.1: + /acorn-jsx@5.3.2(acorn@7.4.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -3390,33 +3466,33 @@ packages: acorn: 7.4.1 dev: true - /acorn-walk/8.2.0: + /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} dev: true - /acorn/7.4.1: + /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /acorn/8.8.2: + /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /agent-base/6.0.2: + /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) transitivePeerDependencies: - supports-color dev: true - /aggregate-error/3.1.0: + /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} dependencies: @@ -3424,7 +3500,7 @@ packages: indent-string: 4.0.0 dev: true - /ajv-errors/1.0.1_ajv@6.12.6: + /ajv-errors@1.0.1(ajv@6.12.6): resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==} peerDependencies: ajv: '>=5.0.0' @@ -3432,7 +3508,7 @@ packages: ajv: 6.12.6 dev: true - /ajv-keywords/3.5.2_ajv@6.12.6: + /ajv-keywords@3.5.2(ajv@6.12.6): resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: ajv: ^6.9.1 @@ -3440,7 +3516,7 @@ packages: ajv: 6.12.6 dev: true - /ajv/6.12.6: + /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 @@ -3449,7 +3525,7 @@ packages: uri-js: 4.4.1 dev: true - /ajv/8.12.0: + /ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} dependencies: fast-deep-equal: 3.1.3 @@ -3458,97 +3534,97 @@ packages: uri-js: 4.4.1 dev: true - /ansi-colors/3.2.4: + /ansi-colors@3.2.4: resolution: {integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==} engines: {node: '>=6'} dev: true - /ansi-colors/4.1.3: + /ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} dev: true - /ansi-escapes/4.3.2: + /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} dependencies: type-fest: 0.21.3 - /ansi-html-community/0.0.8: + /ansi-html-community@0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} engines: {'0': node >= 0.8.0} hasBin: true dev: true - /ansi-regex/2.1.1: + /ansi-regex@2.1.1: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} engines: {node: '>=0.10.0'} dev: true - /ansi-regex/4.1.1: + /ansi-regex@4.1.1: resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} engines: {node: '>=6'} dev: true - /ansi-regex/5.0.1: + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - /ansi-regex/6.0.1: + /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} dev: true - /ansi-styles/3.2.1: + /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} dependencies: color-convert: 1.9.3 dev: true - /ansi-styles/4.3.0: + /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - /ansi-styles/5.2.0: + /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} dev: true - /ansi-styles/6.2.1: + /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} dev: true - /any-promise/1.3.0: + /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} dev: true - /anymatch/3.1.3: + /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - /arg/4.1.3: + /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true - /argparse/1.0.10: + /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 dev: true - /argparse/2.0.1: + /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true optional: true - /args/5.0.3: + /args@5.0.3: resolution: {integrity: sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==} engines: {node: '>= 6.0.0'} dependencies: @@ -3558,77 +3634,77 @@ packages: mri: 1.1.4 dev: true - /argv-formatter/1.0.0: + /argv-formatter@1.0.0: resolution: {integrity: sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==} dev: true - /arr-diff/4.0.0: + /arr-diff@4.0.0: resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} engines: {node: '>=0.10.0'} dev: true - /arr-flatten/1.1.0: + /arr-flatten@1.1.0: resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} engines: {node: '>=0.10.0'} dev: true - /arr-union/3.1.0: + /arr-union@3.1.0: resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} engines: {node: '>=0.10.0'} dev: true - /array-back/3.1.0: + /array-back@3.1.0: resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} engines: {node: '>=6'} dev: true - /array-back/6.2.2: + /array-back@6.2.2: resolution: {integrity: sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==} engines: {node: '>=12.17'} dev: true - /array-buffer-byte-length/1.0.0: + /array-buffer-byte-length@1.0.0: resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: call-bind: 1.0.2 is-array-buffer: 3.0.2 dev: true - /array-flatten/1.1.1: + /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: true - /array-flatten/2.1.2: + /array-flatten@2.1.2: resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} dev: true - /array-ify/1.0.0: + /array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} dev: true - /array-union/1.0.2: + /array-union@1.0.2: resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} engines: {node: '>=0.10.0'} dependencies: array-uniq: 1.0.3 dev: true - /array-union/2.1.0: + /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} dev: true - /array-uniq/1.0.3: + /array-uniq@1.0.3: resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} engines: {node: '>=0.10.0'} dev: true - /array-unique/0.3.2: + /array-unique@0.3.2: resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} engines: {node: '>=0.10.0'} dev: true - /array.prototype.reduce/1.0.5: + /array.prototype.reduce@1.0.5: resolution: {integrity: sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==} engines: {node: '>= 0.4'} dependencies: @@ -3639,85 +3715,85 @@ packages: is-string: 1.0.7 dev: true - /arrify/1.0.1: + /arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} dev: true - /assign-symbols/1.0.0: + /assign-symbols@1.0.0: resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} engines: {node: '>=0.10.0'} dev: true - /astral-regex/2.0.0: + /astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} dev: true - /async-limiter/1.0.1: + /async-limiter@1.0.1: resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} dev: true - /async/2.6.4: + /async@2.6.4: resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} dependencies: lodash: 4.17.21 dev: true - /asynckit/0.4.0: + /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true - /at-least-node/1.0.0: + /at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} dev: true - /atob/2.1.2: + /atob@2.1.2: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} engines: {node: '>= 4.5.0'} hasBin: true dev: true - /atomic-sleep/1.0.0: + /atomic-sleep@1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} dev: true - /available-typed-arrays/1.0.5: + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} dev: true - /babel-helper-evaluate-path/0.5.0: + /babel-helper-evaluate-path@0.5.0: resolution: {integrity: sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==} dev: true - /babel-helper-flip-expressions/0.4.3: + /babel-helper-flip-expressions@0.4.3: resolution: {integrity: sha512-rSrkRW4YQ2ETCWww9gbsWk4N0x1BOtln349Tk0dlCS90oT68WMLyGR7WvaMp3eAnsVrCqdUtC19lo1avyGPejA==} dev: true - /babel-helper-is-nodes-equiv/0.0.1: + /babel-helper-is-nodes-equiv@0.0.1: resolution: {integrity: sha512-ri/nsMFVRqXn7IyT5qW4/hIAGQxuYUFHa3qsxmPtbk6spZQcYlyDogfVpNm2XYOslH/ULS4VEJGUqQX5u7ACQw==} dev: true - /babel-helper-is-void-0/0.4.3: + /babel-helper-is-void-0@0.4.3: resolution: {integrity: sha512-07rBV0xPRM3TM5NVJEOQEkECX3qnHDjaIbFvWYPv+T1ajpUiVLiqTfC+MmiZxY5KOL/Ec08vJdJD9kZiP9UkUg==} dev: true - /babel-helper-mark-eval-scopes/0.4.3: + /babel-helper-mark-eval-scopes@0.4.3: resolution: {integrity: sha512-+d/mXPP33bhgHkdVOiPkmYoeXJ+rXRWi7OdhwpyseIqOS8CmzHQXHUp/+/Qr8baXsT0kjGpMHHofHs6C3cskdA==} dev: true - /babel-helper-remove-or-void/0.4.3: + /babel-helper-remove-or-void@0.4.3: resolution: {integrity: sha512-eYNceYtcGKpifHDir62gHJadVXdg9fAhuZEXiRQnJJ4Yi4oUTpqpNY//1pM4nVyjjDMPYaC2xSf0I+9IqVzwdA==} dev: true - /babel-helper-to-multiple-sequence-expressions/0.5.0: + /babel-helper-to-multiple-sequence-expressions@0.5.0: resolution: {integrity: sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==} dev: true - /babel-jest/29.5.0_@babel+core@7.21.4: + /babel-jest@29.5.0(@babel/core@7.21.4): resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -3727,7 +3803,7 @@ packages: '@jest/transform': 29.5.0 '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.5.0_@babel+core@7.21.4 + babel-preset-jest: 29.5.0(@babel/core@7.21.4) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -3735,7 +3811,7 @@ packages: - supports-color dev: true - /babel-loader/8.3.0_c3tfwv7p35clwcmkb5fnkshzei: + /babel-loader@8.3.0(@babel/core@7.21.4)(webpack@5.79.0): resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} engines: {node: '>= 8.9'} peerDependencies: @@ -3747,10 +3823,10 @@ packages: loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.79.0_57233mj27fjz7synoeubptyy7e + webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) dev: true - /babel-minify/0.5.2: + /babel-minify@0.5.2: resolution: {integrity: sha512-H1ExfmvTxKWQZYcty1My6XRhoZm04/5MNb2DdZsC08r7y/rowipC0s9sszKA7jgW9mYYDdFnU68XohB+zP35qQ==} hasBin: true dependencies: @@ -3765,7 +3841,7 @@ packages: - supports-color dev: true - /babel-plugin-istanbul/6.1.1: + /babel-plugin-istanbul@6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: @@ -3778,7 +3854,7 @@ packages: - supports-color dev: true - /babel-plugin-jest-hoist/29.5.0: + /babel-plugin-jest-hoist@29.5.0: resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3788,17 +3864,17 @@ packages: '@types/babel__traverse': 7.18.3 dev: true - /babel-plugin-minify-builtins/0.5.0: + /babel-plugin-minify-builtins@0.5.0: resolution: {integrity: sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==} dev: true - /babel-plugin-minify-constant-folding/0.5.0: + /babel-plugin-minify-constant-folding@0.5.0: resolution: {integrity: sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==} dependencies: babel-helper-evaluate-path: 0.5.0 dev: true - /babel-plugin-minify-dead-code-elimination/0.5.2: + /babel-plugin-minify-dead-code-elimination@0.5.2: resolution: {integrity: sha512-krq9Lwi0QIzyAlcNBXTL4usqUvevB4BzktdEsb8srcXC1AaYqRJiAQw6vdKdJSaXbz6snBvziGr6ch/aoRCfpA==} dependencies: babel-helper-evaluate-path: 0.5.0 @@ -3807,38 +3883,38 @@ packages: lodash: 4.17.21 dev: true - /babel-plugin-minify-flip-comparisons/0.4.3: + /babel-plugin-minify-flip-comparisons@0.4.3: resolution: {integrity: sha512-8hNwgLVeJzpeLVOVArag2DfTkbKodzOHU7+gAZ8mGBFGPQHK6uXVpg3jh5I/F6gfi5Q5usWU2OKcstn1YbAV7A==} dependencies: babel-helper-is-void-0: 0.4.3 dev: true - /babel-plugin-minify-guarded-expressions/0.4.4: + /babel-plugin-minify-guarded-expressions@0.4.4: resolution: {integrity: sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==} dependencies: babel-helper-evaluate-path: 0.5.0 babel-helper-flip-expressions: 0.4.3 dev: true - /babel-plugin-minify-infinity/0.4.3: + /babel-plugin-minify-infinity@0.4.3: resolution: {integrity: sha512-X0ictxCk8y+NvIf+bZ1HJPbVZKMlPku3lgYxPmIp62Dp8wdtbMLSekczty3MzvUOlrk5xzWYpBpQprXUjDRyMA==} dev: true - /babel-plugin-minify-mangle-names/0.5.1: + /babel-plugin-minify-mangle-names@0.5.1: resolution: {integrity: sha512-8KMichAOae2FHlipjNDTo2wz97MdEb2Q0jrn4NIRXzHH7SJ3c5TaNNBkeTHbk9WUsMnqpNUx949ugM9NFWewzw==} dependencies: babel-helper-mark-eval-scopes: 0.4.3 dev: true - /babel-plugin-minify-numeric-literals/0.4.3: + /babel-plugin-minify-numeric-literals@0.4.3: resolution: {integrity: sha512-5D54hvs9YVuCknfWywq0eaYDt7qYxlNwCqW9Ipm/kYeS9gYhJd0Rr/Pm2WhHKJ8DC6aIlDdqSBODSthabLSX3A==} dev: true - /babel-plugin-minify-replace/0.5.0: + /babel-plugin-minify-replace@0.5.0: resolution: {integrity: sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==} dev: true - /babel-plugin-minify-simplify/0.5.1: + /babel-plugin-minify-simplify@0.5.1: resolution: {integrity: sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==} dependencies: babel-helper-evaluate-path: 0.5.0 @@ -3847,117 +3923,117 @@ packages: babel-helper-to-multiple-sequence-expressions: 0.5.0 dev: true - /babel-plugin-minify-type-constructors/0.4.3: + /babel-plugin-minify-type-constructors@0.4.3: resolution: {integrity: sha512-4ADB0irJ/6BeXWHubjCJmrPbzhxDgjphBMjIjxCc25n4NGJ00NsYqwYt+F/OvE9RXx8KaSW7cJvp+iZX436tnQ==} dependencies: babel-helper-is-void-0: 0.4.3 dev: true - /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.21.4: + /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.21.4): resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.21.4 '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.4 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.21.4: + /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.4): resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.4 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) core-js-compat: 3.30.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.21.4: + /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.21.4): resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.4 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) transitivePeerDependencies: - supports-color dev: true - /babel-plugin-transform-inline-consecutive-adds/0.4.3: + /babel-plugin-transform-inline-consecutive-adds@0.4.3: resolution: {integrity: sha512-8D104wbzzI5RlxeVPYeQb9QsUyepiH1rAO5hpPpQ6NPRgQLpIVwkS/Nbx944pm4K8Z+rx7CgjPsFACz/VCBN0Q==} dev: true - /babel-plugin-transform-member-expression-literals/6.9.4: + /babel-plugin-transform-member-expression-literals@6.9.4: resolution: {integrity: sha512-Xq9/Rarpj+bjOZSl1nBbZYETsNEDDJSrb6Plb1sS3/36FukWFLLRysgecva5KZECjUJTrJoQqjJgtWToaflk5Q==} dev: true - /babel-plugin-transform-merge-sibling-variables/6.9.5: + /babel-plugin-transform-merge-sibling-variables@6.9.5: resolution: {integrity: sha512-xj/KrWi6/uP+DrD844h66Qh2cZN++iugEIgH8QcIxhmZZPNP6VpOE9b4gP2FFW39xDAY43kCmYMM6U0QNKN8fw==} dev: true - /babel-plugin-transform-minify-booleans/6.9.4: + /babel-plugin-transform-minify-booleans@6.9.4: resolution: {integrity: sha512-9pW9ePng6DZpzGPalcrULuhSCcauGAbn8AeU3bE34HcDkGm8Ldt0ysjGkyb64f0K3T5ilV4mriayOVv5fg0ASA==} dev: true - /babel-plugin-transform-property-literals/6.9.4: + /babel-plugin-transform-property-literals@6.9.4: resolution: {integrity: sha512-Pf8JHTjTPxecqVyL6KSwD/hxGpoTZjiEgV7nCx0KFQsJYM0nuuoCajbg09KRmZWeZbJ5NGTySABYv8b/hY1eEA==} dependencies: esutils: 2.0.3 dev: true - /babel-plugin-transform-regexp-constructors/0.4.3: + /babel-plugin-transform-regexp-constructors@0.4.3: resolution: {integrity: sha512-JjymDyEyRNhAoNFp09y/xGwYVYzT2nWTGrBrWaL6eCg2m+B24qH2jR0AA8V8GzKJTgC8NW6joJmc6nabvWBD/g==} dev: true - /babel-plugin-transform-remove-console/6.9.4: + /babel-plugin-transform-remove-console@6.9.4: resolution: {integrity: sha512-88blrUrMX3SPiGkT1GnvVY8E/7A+k6oj3MNvUtTIxJflFzXTw1bHkuJ/y039ouhFMp2prRn5cQGzokViYi1dsg==} dev: true - /babel-plugin-transform-remove-debugger/6.9.4: + /babel-plugin-transform-remove-debugger@6.9.4: resolution: {integrity: sha512-Kd+eTBYlXfwoFzisburVwrngsrz4xh9I0ppoJnU/qlLysxVBRgI4Pj+dk3X8F5tDiehp3hhP8oarRMT9v2Z3lw==} dev: true - /babel-plugin-transform-remove-undefined/0.5.0: + /babel-plugin-transform-remove-undefined@0.5.0: resolution: {integrity: sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==} dependencies: babel-helper-evaluate-path: 0.5.0 dev: true - /babel-plugin-transform-simplify-comparison-operators/6.9.4: + /babel-plugin-transform-simplify-comparison-operators@6.9.4: resolution: {integrity: sha512-GLInxhGAQWJ9YIdjwF6dAFlmh4U+kN8pL6Big7nkDzHoZcaDQOtBm28atEhQJq6m9GpAovbiGEShKqXv4BSp0A==} dev: true - /babel-plugin-transform-undefined-to-void/6.9.4: + /babel-plugin-transform-undefined-to-void@6.9.4: resolution: {integrity: sha512-D2UbwxawEY1xVc9svYAUZQM2xarwSNXue2qDIx6CeV2EuMGaes/0su78zlIDIAgE7BvnMw4UpmSo9fDy+znghg==} dev: true - /babel-preset-current-node-syntax/1.0.1_@babel+core@7.21.4: + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.21.4): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.21.4 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.4 - '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.4 - '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.21.4 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.4 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.4 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.4 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.4 - dev: true - - /babel-preset-jest/29.5.0_@babel+core@7.21.4: + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.4) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.21.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.4) + dev: true + + /babel-preset-jest@29.5.0(@babel/core@7.21.4): resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -3965,10 +4041,10 @@ packages: dependencies: '@babel/core': 7.21.4 babel-plugin-jest-hoist: 29.5.0 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.4 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.4) dev: true - /babel-preset-minify/0.5.2: + /babel-preset-minify@0.5.2: resolution: {integrity: sha512-v4GL+kk0TfovbRIKZnC3HPbu2cAGmPAby7BsOmuPdMJfHV+4FVdsGXTH/OOGQRKYdjemBuL1+MsE6mobobhe9w==} dependencies: babel-plugin-minify-builtins: 0.5.0 @@ -3996,11 +4072,18 @@ packages: lodash: 4.17.21 dev: true - /balanced-match/1.0.2: + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /base/0.11.2: + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + /base64id@2.0.0: + resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} + engines: {node: ^4.5.0 || >= 5.9} + + /base@0.11.2: resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} engines: {node: '>=0.10.0'} dependencies: @@ -4013,43 +4096,36 @@ packages: pascalcase: 0.1.1 dev: true - /base64-js/1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - /base64id/2.0.0: - resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} - engines: {node: ^4.5.0 || >= 5.9} - - /batch/0.6.1: + /batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} dev: true - /big.js/5.2.2: + /big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: true - /bignumber.js/9.1.1: + /bignumber.js@9.1.1: resolution: {integrity: sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==} dev: true - /binary-extensions/2.2.0: + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - /bl/4.1.0: + /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - /body-parser/1.20.1: + /body-parser@1.20.1(supports-color@6.1.0): resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 2.6.9 + debug: 2.6.9(supports-color@6.1.0) depd: 2.0.0 destroy: 1.2.0 http-errors: 2.0.0 @@ -4063,27 +4139,7 @@ packages: - supports-color dev: true - /body-parser/1.20.1_supports-color@6.1.0: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9_supports-color@6.1.0 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.1 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /bonjour/3.5.0: + /bonjour@3.5.0: resolution: {integrity: sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==} dependencies: array-flatten: 2.1.2 @@ -4094,20 +4150,20 @@ packages: multicast-dns-service-types: 1.1.0 dev: true - /brace-expansion/1.1.11: + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 dev: true - /brace-expansion/2.0.1: + /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 dev: true - /braces/2.3.2_supports-color@6.1.0: + /braces@2.3.2(supports-color@6.1.0): resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} engines: {node: '>=0.10.0'} dependencies: @@ -4117,7 +4173,7 @@ packages: fill-range: 4.0.0 isobject: 3.0.1 repeat-element: 1.1.4 - snapdragon: 0.8.2_supports-color@6.1.0 + snapdragon: 0.8.2(supports-color@6.1.0) snapdragon-node: 2.1.1 split-string: 3.1.0 to-regex: 3.0.2 @@ -4125,13 +4181,13 @@ packages: - supports-color dev: true - /braces/3.0.2: + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - /browserslist/4.21.5: + /browserslist@4.21.5: resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -4139,35 +4195,35 @@ packages: caniuse-lite: 1.0.30001478 electron-to-chromium: 1.4.361 node-releases: 2.0.10 - update-browserslist-db: 1.0.10_browserslist@4.21.5 + update-browserslist-db: 1.0.10(browserslist@4.21.5) dev: true - /bser/2.1.1: + /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 dev: true - /buffer-from/1.1.2: + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true - /buffer-indexof/1.1.1: + /buffer-indexof@1.1.1: resolution: {integrity: sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==} dev: true - /buffer/5.7.1: + /buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - /builtin-modules/3.3.0: + /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} dev: true - /bundle-require/4.0.1_esbuild@0.17.16: + /bundle-require@4.0.1(esbuild@0.17.16): resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: @@ -4177,29 +4233,29 @@ packages: load-tsconfig: 0.2.5 dev: true - /busboy/1.6.0: + /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} dependencies: streamsearch: 1.1.0 dev: true - /bytes/3.0.0: + /bytes@3.0.0: resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} engines: {node: '>= 0.8'} dev: true - /bytes/3.1.2: + /bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} dev: true - /cac/6.7.14: + /cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} dev: true - /cache-base/1.0.1: + /cache-base@1.0.1: resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} engines: {node: '>=0.10.0'} dependencies: @@ -4214,7 +4270,7 @@ packages: unset-value: 1.0.0 dev: true - /cache-content-type/1.0.1: + /cache-content-type@1.0.1: resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} engines: {node: '>= 6.0.0'} dependencies: @@ -4222,24 +4278,24 @@ packages: ylru: 1.3.2 dev: true - /cachedir/2.3.0: + /cachedir@2.3.0: resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==} engines: {node: '>=6'} dev: true - /call-bind/1.0.2: + /call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 get-intrinsic: 1.2.0 dev: true - /callsites/3.1.0: + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} dev: true - /camelcase-keys/6.2.2: + /camelcase-keys@6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} engines: {node: '>=8'} dependencies: @@ -4248,38 +4304,38 @@ packages: quick-lru: 4.0.1 dev: true - /camelcase/4.1.0: + /camelcase@4.1.0: resolution: {integrity: sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==} engines: {node: '>=4'} dev: true - /camelcase/5.0.0: + /camelcase@5.0.0: resolution: {integrity: sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==} engines: {node: '>=6'} dev: true - /camelcase/5.3.1: + /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} dev: true - /camelcase/6.3.0: + /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} dev: true - /caniuse-lite/1.0.30001478: + /caniuse-lite@1.0.30001478: resolution: {integrity: sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw==} dev: true - /chalk-template/0.4.0: + /chalk-template@0.4.0: resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} engines: {node: '>=12'} dependencies: chalk: 4.1.2 dev: true - /chalk/2.4.2: + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} dependencies: @@ -4288,27 +4344,27 @@ packages: supports-color: 5.5.0 dev: true - /chalk/4.1.2: + /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - /chalk/5.2.0: + /chalk@5.2.0: resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true - /char-regex/1.0.2: + /char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} dev: true - /chardet/0.7.0: + /chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - /chokidar/3.4.1: + /chokidar@3.4.1: resolution: {integrity: sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==} engines: {node: '>= 8.10.0'} dependencies: @@ -4322,21 +4378,21 @@ packages: optionalDependencies: fsevents: 2.1.3 - /chrome-trace-event/1.0.3: + /chrome-trace-event@1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} dev: true - /ci-info/3.8.0: + /ci-info@3.8.0: resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} dev: true - /cjs-module-lexer/1.2.2: + /cjs-module-lexer@1.2.2: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} dev: true - /class-utils/0.3.6: + /class-utils@0.3.6: resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} engines: {node: '>=0.10.0'} dependencies: @@ -4346,22 +4402,22 @@ packages: static-extend: 0.1.2 dev: true - /clean-stack/2.2.0: + /clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} dev: true - /cli-cursor/3.1.0: + /cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 - /cli-spinners/2.8.0: + /cli-spinners@2.8.0: resolution: {integrity: sha512-/eG5sJcvEIwxcdYM86k5tPwn0MUzkX5YY3eImTGpJOZgVe4SdTMY14vQpcxgBzJ0wXwAYrS8E+c3uHeK4JNyzQ==} engines: {node: '>=6'} - /cli-truncate/2.1.0: + /cli-truncate@2.1.0: resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} engines: {node: '>=8'} dependencies: @@ -4369,7 +4425,7 @@ packages: string-width: 4.2.3 dev: true - /cli-truncate/3.1.0: + /cli-truncate@3.1.0: resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: @@ -4377,11 +4433,11 @@ packages: string-width: 5.1.2 dev: true - /cli-width/3.0.0: + /cli-width@3.0.0: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} - /cliui/5.0.0: + /cliui@5.0.0: resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} dependencies: string-width: 3.1.0 @@ -4389,7 +4445,7 @@ packages: wrap-ansi: 5.1.0 dev: true - /cliui/8.0.1: + /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} dependencies: @@ -4397,7 +4453,7 @@ packages: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - /clone-deep/4.0.1: + /clone-deep@4.0.1: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} engines: {node: '>=6'} dependencies: @@ -4406,25 +4462,25 @@ packages: shallow-clone: 3.0.1 dev: true - /clone/1.0.4: + /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} - /clone/2.1.2: + /clone@2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} dev: true - /co/4.6.0: + /co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} dev: true - /collect-v8-coverage/1.0.1: + /collect-v8-coverage@1.0.1: resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} dev: true - /collection-visit/1.0.0: + /collection-visit@1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} dependencies: @@ -4432,37 +4488,37 @@ packages: object-visit: 1.0.1 dev: true - /color-convert/1.9.3: + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 dev: true - /color-convert/2.0.1: + /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - /color-name/1.1.3: + /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} dev: true - /color-name/1.1.4: + /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - /colorette/2.0.19: + /colorette@2.0.19: resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} dev: true - /combined-stream/1.0.8: + /combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 dev: true - /command-line-args/5.2.1: + /command-line-args@5.2.1: resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} engines: {node: '>=4.0.0'} dependencies: @@ -4472,7 +4528,7 @@ packages: typical: 4.0.0 dev: true - /command-line-usage/7.0.1: + /command-line-usage@7.0.1: resolution: {integrity: sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==} engines: {node: '>=12.20.0'} dependencies: @@ -4482,48 +4538,27 @@ packages: typical: 7.1.1 dev: true - /commander/10.0.0: + /commander@10.0.0: resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==} engines: {node: '>=14'} dev: true - /commander/2.20.3: + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true - /commander/4.1.1: + /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} dev: true - /commitizen/4.3.0: - resolution: {integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==} - engines: {node: '>= 12'} - hasBin: true - dependencies: - cachedir: 2.3.0 - cz-conventional-changelog: 3.3.0_@swc+core@1.3.49 - dedent: 0.7.0 - detect-indent: 6.1.0 - find-node-modules: 2.1.3 - find-root: 1.1.0 - fs-extra: 9.1.0 - glob: 7.2.3 - inquirer: 8.2.5 - is-utf8: 0.2.1 - lodash: 4.17.21 - minimist: 1.2.7 - strip-bom: 4.0.0 - strip-json-comments: 3.1.1 - dev: true - - /commitizen/4.3.0_@swc+core@1.3.49: + /commitizen@4.3.0(@swc/core@1.3.49): resolution: {integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==} engines: {node: '>= 12'} hasBin: true dependencies: cachedir: 2.3.0 - cz-conventional-changelog: 3.3.0_@swc+core@1.3.49 + cz-conventional-changelog: 3.3.0(@swc/core@1.3.49) dedent: 0.7.0 detect-indent: 6.1.0 find-node-modules: 2.1.3 @@ -4541,36 +4576,36 @@ packages: - '@swc/wasm' dev: true - /commondir/1.0.1: + /commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: true - /compare-func/2.0.0: + /compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} dependencies: array-ify: 1.0.0 dot-prop: 5.3.0 dev: true - /component-emitter/1.3.0: + /component-emitter@1.3.0: resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} dev: true - /compressible/2.0.18: + /compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 dev: true - /compression/1.7.4_supports-color@6.1.0: + /compression@1.7.4(supports-color@6.1.0): resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} engines: {node: '>= 0.8.0'} dependencies: accepts: 1.3.8 bytes: 3.0.0 compressible: 2.0.18 - debug: 2.6.9_supports-color@6.1.0 + debug: 2.6.9(supports-color@6.1.0) on-headers: 1.0.2 safe-buffer: 5.1.2 vary: 1.1.2 @@ -4578,28 +4613,28 @@ packages: - supports-color dev: true - /concat-map/0.0.1: + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /connect-history-api-fallback/1.6.0: + /connect-history-api-fallback@1.6.0: resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==} engines: {node: '>=0.8'} dev: true - /content-disposition/0.5.4: + /content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} dependencies: safe-buffer: 5.2.1 dev: true - /content-type/1.0.5: + /content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} dev: true - /conventional-changelog-angular/5.0.13: + /conventional-changelog-angular@5.0.13: resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==} engines: {node: '>=10'} dependencies: @@ -4607,7 +4642,7 @@ packages: q: 1.5.1 dev: true - /conventional-changelog-conventionalcommits/4.6.3: + /conventional-changelog-conventionalcommits@4.6.3: resolution: {integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==} engines: {node: '>=10'} dependencies: @@ -4616,11 +4651,11 @@ packages: q: 1.5.1 dev: true - /conventional-commit-types/3.0.0: + /conventional-commit-types@3.0.0: resolution: {integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==} dev: true - /conventional-commits-parser/3.2.4: + /conventional-commits-parser@3.2.4: resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==} engines: {node: '>=10'} hasBin: true @@ -4633,27 +4668,27 @@ packages: through2: 4.0.2 dev: true - /convert-source-map/1.9.0: + /convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} dev: true - /convert-source-map/2.0.0: + /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true - /cookie-signature/1.0.6: + /cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} dev: true - /cookie/0.4.2: + /cookie@0.4.2: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} - /cookie/0.5.0: + /cookie@0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} - /cookies/0.8.0: + /cookies@0.8.0: resolution: {integrity: sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==} engines: {node: '>= 0.8'} dependencies: @@ -4661,45 +4696,46 @@ packages: keygrip: 1.1.0 dev: true - /copy-descriptor/0.1.1: + /copy-descriptor@0.1.1: resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} engines: {node: '>=0.10.0'} dev: true - /core-js-compat/3.30.0: + /core-js-compat@3.30.0: resolution: {integrity: sha512-P5A2h/9mRYZFIAP+5Ab8ns6083IyVpSclU74UNvbGVQ8VM7n3n3/g2yF3AkKQ9NXz2O+ioxLbEWKnDtgsFamhg==} dependencies: browserslist: 4.21.5 dev: true - /core-util-is/1.0.3: + /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /cors/2.8.5: + /cors@2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} dependencies: object-assign: 4.1.1 vary: 1.1.2 - /cosmiconfig-typescript-loader/2.0.2_faublg25f7qpbcz6w4cw6yyzse: + /cosmiconfig-typescript-loader@2.0.2(@swc/core@1.3.49)(@types/node@18.15.11)(cosmiconfig@7.1.0)(typescript@4.9.5): resolution: {integrity: sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@types/node': '*' + cosmiconfig: '>=7' typescript: '>=3' dependencies: '@types/node': 18.15.11 cosmiconfig: 7.1.0 - ts-node: 10.9.1_faublg25f7qpbcz6w4cw6yyzse + ts-node: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true - /cosmiconfig-typescript-loader/4.3.0_zulaepqzabcjiyzbkdbfeduf6u: + /cosmiconfig-typescript-loader@4.3.0(@types/node@18.15.11)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@5.0.4): resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==} engines: {node: '>=12', npm: '>=6'} peerDependencies: @@ -4710,12 +4746,12 @@ packages: dependencies: '@types/node': 18.15.11 cosmiconfig: 8.1.3 - ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e + ts-node: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4) typescript: 5.0.4 dev: true optional: true - /cosmiconfig/7.1.0: + /cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} dependencies: @@ -4726,7 +4762,7 @@ packages: yaml: 1.10.2 dev: true - /cosmiconfig/8.1.3: + /cosmiconfig@8.1.3: resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==} engines: {node: '>=14'} dependencies: @@ -4737,11 +4773,11 @@ packages: dev: true optional: true - /create-require/1.1.1: + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true - /cross-env/7.0.3: + /cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} hasBin: true @@ -4749,7 +4785,7 @@ packages: cross-spawn: 7.0.3 dev: true - /cross-fetch/3.1.5: + /cross-fetch@3.1.5: resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} dependencies: node-fetch: 2.6.7 @@ -4757,7 +4793,7 @@ packages: - encoding dev: true - /cross-spawn/6.0.5: + /cross-spawn@6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} dependencies: @@ -4768,7 +4804,7 @@ packages: which: 1.3.1 dev: true - /cross-spawn/7.0.3: + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} dependencies: @@ -4777,44 +4813,44 @@ packages: which: 2.0.2 dev: true - /cssom/0.3.8: + /cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} dev: true - /cssom/0.5.0: + /cssom@0.5.0: resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} dev: true - /cssstyle/2.3.0: + /cssstyle@2.3.0: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} dependencies: cssom: 0.3.8 dev: true - /cz-conventional-changelog/3.3.0_@swc+core@1.3.49: + /cz-conventional-changelog@3.3.0(@swc/core@1.3.49): resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==} engines: {node: '>= 10'} dependencies: chalk: 2.4.2 - commitizen: 4.3.0 + commitizen: 4.3.0(@swc/core@1.3.49) conventional-commit-types: 3.0.0 lodash.map: 4.6.0 longest: 2.0.1 word-wrap: 1.2.3 optionalDependencies: - '@commitlint/load': 17.5.0_@swc+core@1.3.49 + '@commitlint/load': 17.5.0(@swc/core@1.3.49) transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true - /dargs/7.0.0: + /dargs@7.0.0: resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} engines: {node: '>=8'} dev: true - /data-urls/3.0.2: + /data-urls@3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} dependencies: @@ -4823,26 +4859,15 @@ packages: whatwg-url: 11.0.0 dev: true - /dateformat/4.6.3: + /dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} dev: true - /debounce/1.2.1: + /debounce@1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} dev: true - /debug/2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.0.0 - dev: true - - /debug/2.6.9_supports-color@6.1.0: + /debug@2.6.9(supports-color@6.1.0): resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: supports-color: '*' @@ -4854,18 +4879,7 @@ packages: supports-color: 6.1.0 dev: true - /debug/3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - dev: true - - /debug/3.2.7_supports-color@6.1.0: + /debug@3.2.7(supports-color@6.1.0): resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' @@ -4877,18 +4891,7 @@ packages: supports-color: 6.1.0 dev: true - /debug/4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - - /debug/4.3.4_supports-color@6.1.0: + /debug@4.3.4(supports-color@6.1.0): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -4899,9 +4902,8 @@ packages: dependencies: ms: 2.1.2 supports-color: 6.1.0 - dev: true - /decamelize-keys/1.1.1: + /decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} engines: {node: '>=0.10.0'} dependencies: @@ -4909,29 +4911,29 @@ packages: map-obj: 1.0.1 dev: true - /decamelize/1.2.0: + /decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} dev: true - /decimal.js/10.4.3: + /decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} dev: true - /decode-uri-component/0.2.2: + /decode-uri-component@0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} dev: true - /dedent/0.7.0: + /dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true - /deep-equal/1.0.1: + /deep-equal@1.0.1: resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} dev: true - /deep-equal/1.1.1: + /deep-equal@1.1.1: resolution: {integrity: sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==} dependencies: is-arguments: 1.1.1 @@ -4942,21 +4944,21 @@ packages: regexp.prototype.flags: 1.4.3 dev: true - /deep-extend/0.6.0: + /deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} dev: true - /deep-is/0.1.4: + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /deepmerge/4.3.1: + /deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} dev: true - /default-gateway/4.2.0: + /default-gateway@4.2.0: resolution: {integrity: sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==} engines: {node: '>=6'} dependencies: @@ -4964,17 +4966,17 @@ packages: ip-regex: 2.1.0 dev: true - /defaults/1.0.4: + /defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 - /define-lazy-prop/2.0.0: + /define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} dev: true - /define-properties/1.2.0: + /define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} dependencies: @@ -4982,21 +4984,21 @@ packages: object-keys: 1.1.1 dev: true - /define-property/0.2.5: + /define-property@0.2.5: resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} engines: {node: '>=0.10.0'} dependencies: is-descriptor: 0.1.6 dev: true - /define-property/1.0.0: + /define-property@1.0.0: resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} engines: {node: '>=0.10.0'} dependencies: is-descriptor: 1.0.2 dev: true - /define-property/2.0.2: + /define-property@2.0.2: resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} engines: {node: '>=0.10.0'} dependencies: @@ -5004,7 +5006,7 @@ packages: isobject: 3.0.1 dev: true - /del/4.1.1: + /del@4.1.1: resolution: {integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==} engines: {node: '>=6'} dependencies: @@ -5017,111 +5019,111 @@ packages: rimraf: 2.7.1 dev: true - /delayed-stream/1.0.0: + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} dev: true - /delegates/1.0.0: + /delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} dev: true - /depd/1.1.2: + /depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} dev: true - /depd/2.0.0: + /depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} dev: true - /destroy/1.2.0: + /destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dev: true - /detect-file/1.0.0: + /detect-file@1.0.0: resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} engines: {node: '>=0.10.0'} dev: true - /detect-indent/6.1.0: + /detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} dev: true - /detect-newline/3.1.0: + /detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} dev: true - /detect-node/2.1.0: + /detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} dev: true - /diff-sequences/29.4.3: + /diff-sequences@29.4.3: resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /diff/4.0.2: + /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} dev: true - /dir-glob/3.0.1: + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} dependencies: path-type: 4.0.0 dev: true - /dns-equal/1.0.0: + /dns-equal@1.0.0: resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} dev: true - /dns-packet/1.3.4: + /dns-packet@1.3.4: resolution: {integrity: sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==} dependencies: ip: 1.1.8 safe-buffer: 5.2.1 dev: true - /dns-txt/2.0.2: + /dns-txt@2.0.2: resolution: {integrity: sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==} dependencies: buffer-indexof: 1.1.1 dev: true - /doctrine/3.0.0: + /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 dev: true - /domexception/4.0.0: + /domexception@4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} dependencies: webidl-conversions: 7.0.0 dev: true - /dot-prop/5.3.0: + /dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} dependencies: is-obj: 2.0.0 dev: true - /duplexer2/0.1.4: + /duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: readable-stream: 2.3.8 dev: true - /duplexify/4.1.2: + /duplexify@4.1.2: resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} dependencies: end-of-stream: 1.4.4 @@ -5130,55 +5132,55 @@ packages: stream-shift: 1.0.1 dev: true - /eastasianwidth/0.2.0: + /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /ee-first/1.1.1: + /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true - /electron-to-chromium/1.4.361: + /electron-to-chromium@1.4.361: resolution: {integrity: sha512-VocVwjPp05HUXzf3xmL0boRn5b0iyqC7amtDww84Jb1QJNPBc7F69gJyEeXRoriLBC4a5pSyckdllrXAg4mmRA==} dev: true - /emittery/0.13.1: + /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} dev: true - /emoji-regex/7.0.3: + /emoji-regex@7.0.3: resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} dev: true - /emoji-regex/8.0.0: + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - /emoji-regex/9.2.2: + /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true - /emojis-list/3.0.0: + /emojis-list@3.0.0: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} engines: {node: '>= 4'} dev: true - /encodeurl/1.0.2: + /encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} dev: true - /end-of-stream/1.4.4: + /end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 dev: true - /engine.io-client/6.4.0: + /engine.io-client@6.4.0: resolution: {integrity: sha512-GyKPDyoEha+XZ7iEqam49vz6auPnNJ9ZBfy89f+rMMas8AuiMWOZ9PVzu8xb9ZC6rafUqiGHSCfu22ih66E+1g==} dependencies: '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) engine.io-parser: 5.0.6 ws: 8.11.0 xmlhttprequest-ssl: 2.0.0 @@ -5188,11 +5190,11 @@ packages: - utf-8-validate dev: false - /engine.io-parser/5.0.6: + /engine.io-parser@5.0.6: resolution: {integrity: sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==} engines: {node: '>=10.0.0'} - /engine.io/6.4.1: + /engine.io@6.4.1: resolution: {integrity: sha512-JFYQurD/nbsA5BSPmbaOSLa3tSVj8L6o4srSwXXY3NqE+gGUNmmPTbhn8tjzcCtSqhFgIeqef81ngny8JM25hw==} engines: {node: '>=10.0.0'} dependencies: @@ -5203,7 +5205,7 @@ packages: base64id: 2.0.0 cookie: 0.4.2 cors: 2.8.5 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) engine.io-parser: 5.0.6 ws: 8.11.0 transitivePeerDependencies: @@ -5211,7 +5213,7 @@ packages: - supports-color - utf-8-validate - /enhanced-resolve/5.12.0: + /enhanced-resolve@5.12.0: resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} engines: {node: '>=10.13.0'} dependencies: @@ -5219,32 +5221,32 @@ packages: tapable: 2.2.1 dev: true - /enquirer/2.3.6: + /enquirer@2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} dependencies: ansi-colors: 4.1.3 dev: true - /entities/4.4.0: + /entities@4.4.0: resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} engines: {node: '>=0.12'} dev: true - /errno/0.1.8: + /errno@0.1.8: resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} hasBin: true dependencies: prr: 1.0.1 dev: true - /error-ex/1.3.2: + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 dev: true - /es-abstract/1.21.2: + /es-abstract@1.21.2: resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} engines: {node: '>= 0.4'} dependencies: @@ -5284,15 +5286,15 @@ packages: which-typed-array: 1.1.9 dev: true - /es-array-method-boxes-properly/1.0.0: + /es-array-method-boxes-properly@1.0.0: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} dev: true - /es-module-lexer/1.2.1: + /es-module-lexer@1.2.1: resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==} dev: true - /es-set-tostringtag/2.0.1: + /es-set-tostringtag@2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} dependencies: @@ -5301,7 +5303,7 @@ packages: has-tostringtag: 1.0.0 dev: true - /es-to-primitive/1.2.1: + /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} dependencies: @@ -5310,7 +5312,7 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild-loader/2.21.0_webpack@5.79.0: + /esbuild-loader@2.21.0(webpack@5.79.0): resolution: {integrity: sha512-k7ijTkCT43YBSZ6+fBCW1Gin7s46RrJ0VQaM8qA7lq7W+OLsGgtLyFV8470FzYi/4TeDexniTBTPTwZUnXXR5g==} peerDependencies: webpack: ^4.40.0 || ^5.0.0 @@ -5320,11 +5322,11 @@ packages: json5: 2.2.3 loader-utils: 2.0.4 tapable: 2.2.1 - webpack: 5.79.0_57233mj27fjz7synoeubptyy7e + webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) webpack-sources: 1.4.3 dev: true - /esbuild/0.16.17: + /esbuild@0.16.17: resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==} engines: {node: '>=12'} hasBin: true @@ -5354,7 +5356,7 @@ packages: '@esbuild/win32-x64': 0.16.17 dev: true - /esbuild/0.17.16: + /esbuild@0.17.16: resolution: {integrity: sha512-aeSuUKr9aFVY9Dc8ETVELGgkj4urg5isYx8pLf4wlGgB0vTFjxJQdHnNH6Shmx4vYYrOTLCHtRI5i1XZ9l2Zcg==} engines: {node: '>=12'} hasBin: true @@ -5384,29 +5386,29 @@ packages: '@esbuild/win32-x64': 0.17.16 dev: true - /escalade/3.1.1: + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} - /escape-html/1.0.3: + /escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} dev: true - /escape-string-regexp/1.0.5: + /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - /escape-string-regexp/2.0.0: + /escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} dev: true - /escape-string-regexp/4.0.0: + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} dev: true - /escodegen/2.0.0: + /escodegen@2.0.0: resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} engines: {node: '>=6.0'} hasBin: true @@ -5419,7 +5421,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-prettier/8.8.0_eslint@7.32.0: + /eslint-config-prettier@8.8.0(eslint@7.32.0): resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} hasBin: true peerDependencies: @@ -5428,7 +5430,7 @@ packages: eslint: 7.32.0 dev: true - /eslint-plugin-prettier/3.4.1_mouiu7tdcm2dtderipseaggmee: + /eslint-plugin-prettier@3.4.1(eslint-config-prettier@8.8.0)(eslint@7.32.0)(prettier@2.8.7): resolution: {integrity: sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==} engines: {node: '>=6.0.0'} peerDependencies: @@ -5440,12 +5442,12 @@ packages: optional: true dependencies: eslint: 7.32.0 - eslint-config-prettier: 8.8.0_eslint@7.32.0 + eslint-config-prettier: 8.8.0(eslint@7.32.0) prettier: 2.8.7 prettier-linter-helpers: 1.0.0 dev: true - /eslint-scope/5.1.1: + /eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} dependencies: @@ -5453,29 +5455,29 @@ packages: estraverse: 4.3.0 dev: true - /eslint-utils/2.1.0: + /eslint-utils@2.1.0: resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} engines: {node: '>=6'} dependencies: eslint-visitor-keys: 1.3.0 dev: true - /eslint-visitor-keys/1.3.0: + /eslint-visitor-keys@1.3.0: resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} engines: {node: '>=4'} dev: true - /eslint-visitor-keys/2.1.0: + /eslint-visitor-keys@2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} dev: true - /eslint-visitor-keys/3.4.0: + /eslint-visitor-keys@3.4.0: resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint/7.32.0: + /eslint@7.32.0: resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} engines: {node: ^10.12.0 || >=12.0.0} hasBin: true @@ -5486,7 +5488,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) doctrine: 3.0.0 enquirer: 2.3.6 escape-string-regexp: 4.0.0 @@ -5524,74 +5526,74 @@ packages: - supports-color dev: true - /espree/7.3.1: + /espree@7.3.1: resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: acorn: 7.4.1 - acorn-jsx: 5.3.2_acorn@7.4.1 + acorn-jsx: 5.3.2(acorn@7.4.1) eslint-visitor-keys: 1.3.0 dev: true - /esprima/4.0.1: + /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true dev: true - /esquery/1.5.0: + /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 dev: true - /esrecurse/4.3.0: + /esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 dev: true - /estraverse/4.3.0: + /estraverse@4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} dev: true - /estraverse/5.3.0: + /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} dev: true - /estree-walker/1.0.1: + /estree-walker@1.0.1: resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} dev: true - /esutils/2.0.3: + /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} dev: true - /etag/1.8.1: + /etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} dev: true - /eventemitter3/4.0.7: + /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} dev: true - /events/3.3.0: + /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} dev: true - /eventsource/2.0.2: + /eventsource@2.0.2: resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==} engines: {node: '>=12.0.0'} dev: true - /execa/1.0.0: + /execa@1.0.0: resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} engines: {node: '>=6'} dependencies: @@ -5604,7 +5606,7 @@ packages: strip-eof: 1.0.0 dev: true - /execa/5.1.1: + /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} dependencies: @@ -5619,7 +5621,7 @@ packages: strip-final-newline: 2.0.0 dev: true - /execa/7.1.1: + /execa@7.1.1: resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==} engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} dependencies: @@ -5634,34 +5636,34 @@ packages: strip-final-newline: 3.0.0 dev: true - /exit/0.1.2: + /exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} dev: true - /expand-brackets/2.1.4_supports-color@6.1.0: + /expand-brackets@2.1.4(supports-color@6.1.0): resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} engines: {node: '>=0.10.0'} dependencies: - debug: 2.6.9_supports-color@6.1.0 + debug: 2.6.9(supports-color@6.1.0) define-property: 0.2.5 extend-shallow: 2.0.1 posix-character-classes: 0.1.1 regex-not: 1.0.2 - snapdragon: 0.8.2_supports-color@6.1.0 + snapdragon: 0.8.2(supports-color@6.1.0) to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true - /expand-tilde/2.0.2: + /expand-tilde@2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} dependencies: homedir-polyfill: 1.0.3 dev: true - /expect/29.5.0: + /expect@29.5.0: resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -5672,23 +5674,23 @@ packages: jest-util: 29.5.0 dev: true - /express/4.18.2: + /express@4.18.2(supports-color@6.1.0): resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} engines: {node: '>= 0.10.0'} dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.1 + body-parser: 1.20.1(supports-color@6.1.0) content-disposition: 0.5.4 content-type: 1.0.5 cookie: 0.5.0 cookie-signature: 1.0.6 - debug: 2.6.9 + debug: 2.6.9(supports-color@6.1.0) depd: 2.0.0 encodeurl: 1.0.2 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.2.0 + finalhandler: 1.2.0(supports-color@6.1.0) fresh: 0.5.2 http-errors: 2.0.0 merge-descriptors: 1.0.1 @@ -5700,8 +5702,8 @@ packages: qs: 6.11.0 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 + send: 0.18.0(supports-color@6.1.0) + serve-static: 1.15.0(supports-color@6.1.0) setprototypeof: 1.2.0 statuses: 2.0.1 type-is: 1.6.18 @@ -5711,53 +5713,14 @@ packages: - supports-color dev: true - /express/4.18.2_supports-color@6.1.0: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} - engines: {node: '>= 0.10.0'} - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.1_supports-color@6.1.0 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.5.0 - cookie-signature: 1.0.6 - debug: 2.6.9_supports-color@6.1.0 - depd: 2.0.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.2.0_supports-color@6.1.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.11.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0_supports-color@6.1.0 - serve-static: 1.15.0_supports-color@6.1.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /extend-shallow/2.0.1: + /extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} dependencies: is-extendable: 0.1.1 dev: true - /extend-shallow/3.0.2: + /extend-shallow@3.0.2: resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} engines: {node: '>=0.10.0'} dependencies: @@ -5765,7 +5728,7 @@ packages: is-extendable: 1.0.1 dev: true - /external-editor/3.1.0: + /external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} dependencies: @@ -5773,31 +5736,31 @@ packages: iconv-lite: 0.4.24 tmp: 0.0.33 - /extglob/2.0.4_supports-color@6.1.0: + /extglob@2.0.4(supports-color@6.1.0): resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} engines: {node: '>=0.10.0'} dependencies: array-unique: 0.3.2 define-property: 1.0.0 - expand-brackets: 2.1.4_supports-color@6.1.0 + expand-brackets: 2.1.4(supports-color@6.1.0) extend-shallow: 2.0.1 fragment-cache: 0.2.1 regex-not: 1.0.2 - snapdragon: 0.8.2_supports-color@6.1.0 + snapdragon: 0.8.2(supports-color@6.1.0) to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true - /fast-deep-equal/3.1.3: + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-diff/1.2.0: + /fast-diff@1.2.0: resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} dev: true - /fast-glob/3.2.12: + /fast-glob@3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} engines: {node: '>=8.6.0'} dependencies: @@ -5808,56 +5771,56 @@ packages: micromatch: 4.0.5 dev: true - /fast-json-stable-stringify/2.1.0: + /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true - /fast-levenshtein/2.0.6: + /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fast-redact/3.1.2: + /fast-redact@3.1.2: resolution: {integrity: sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==} engines: {node: '>=6'} dev: true - /fast-safe-stringify/2.1.1: + /fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true - /fastq/1.15.0: + /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 dev: true - /faye-websocket/0.11.4: + /faye-websocket@0.11.4: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} engines: {node: '>=0.8.0'} dependencies: websocket-driver: 0.7.4 dev: true - /fb-watchman/2.0.2: + /fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 dev: true - /figures/3.2.0: + /figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} dependencies: escape-string-regexp: 1.0.5 - /file-entry-cache/6.0.1: + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.0.4 dev: true - /fill-range/4.0.0: + /fill-range@4.0.0: resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} engines: {node: '>=0.10.0'} dependencies: @@ -5867,17 +5830,17 @@ packages: to-regex-range: 2.1.1 dev: true - /fill-range/7.0.1: + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - /finalhandler/1.2.0: + /finalhandler@1.2.0(supports-color@6.1.0): resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} engines: {node: '>= 0.8'} dependencies: - debug: 2.6.9 + debug: 2.6.9(supports-color@6.1.0) encodeurl: 1.0.2 escape-html: 1.0.3 on-finished: 2.4.1 @@ -5888,22 +5851,7 @@ packages: - supports-color dev: true - /finalhandler/1.2.0_supports-color@6.1.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} - dependencies: - debug: 2.6.9_supports-color@6.1.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /find-cache-dir/3.3.2: + /find-cache-dir@3.3.2: resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} engines: {node: '>=8'} dependencies: @@ -5912,32 +5860,32 @@ packages: pkg-dir: 4.2.0 dev: true - /find-node-modules/2.1.3: + /find-node-modules@2.1.3: resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==} dependencies: findup-sync: 4.0.0 merge: 2.1.1 dev: true - /find-replace/3.0.0: + /find-replace@3.0.0: resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} engines: {node: '>=4.0.0'} dependencies: array-back: 3.1.0 dev: true - /find-root/1.1.0: + /find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} dev: true - /find-up/3.0.0: + /find-up@3.0.0: resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} engines: {node: '>=6'} dependencies: locate-path: 3.0.0 dev: true - /find-up/4.1.0: + /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} dependencies: @@ -5945,7 +5893,7 @@ packages: path-exists: 4.0.0 dev: true - /find-up/5.0.0: + /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} dependencies: @@ -5953,7 +5901,7 @@ packages: path-exists: 4.0.0 dev: true - /findup-sync/4.0.0: + /findup-sync@4.0.0: resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==} engines: {node: '>= 8'} dependencies: @@ -5963,7 +5911,7 @@ packages: resolve-dir: 1.0.1 dev: true - /flat-cache/3.0.4: + /flat-cache@3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: @@ -5971,11 +5919,11 @@ packages: rimraf: 3.0.2 dev: true - /flatted/3.2.7: + /flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true - /follow-redirects/1.15.2_debug@4.3.4: + /follow-redirects@1.15.2(debug@4.3.4): resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} engines: {node: '>=4.0'} peerDependencies: @@ -5984,21 +5932,21 @@ packages: debug: optional: true dependencies: - debug: 4.3.4_supports-color@6.1.0 + debug: 4.3.4(supports-color@6.1.0) dev: true - /for-each/0.3.3: + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 dev: true - /for-in/1.0.2: + /for-in@1.0.2: resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} engines: {node: '>=0.10.0'} dev: true - /form-data/3.0.1: + /form-data@3.0.1: resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} engines: {node: '>= 6'} dependencies: @@ -6007,7 +5955,7 @@ packages: mime-types: 2.1.35 dev: true - /form-data/4.0.0: + /form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} dependencies: @@ -6016,7 +5964,7 @@ packages: mime-types: 2.1.35 dev: true - /formdata-node/4.4.1: + /formdata-node@4.4.1: resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} engines: {node: '>= 12.20'} dependencies: @@ -6024,24 +5972,24 @@ packages: web-streams-polyfill: 4.0.0-beta.3 dev: false - /forwarded/0.2.0: + /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} dev: true - /fragment-cache/0.2.1: + /fragment-cache@0.2.1: resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} engines: {node: '>=0.10.0'} dependencies: map-cache: 0.2.2 dev: true - /fresh/0.5.2: + /fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} dev: true - /fs-extra/10.1.0: + /fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} dependencies: @@ -6050,7 +5998,7 @@ packages: universalify: 2.0.0 dev: true - /fs-extra/9.1.0: + /fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} dependencies: @@ -6060,26 +6008,26 @@ packages: universalify: 2.0.0 dev: true - /fs-monkey/1.0.3: + /fs-monkey@1.0.3: resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} dev: true - /fs-readdir-recursive/1.1.0: + /fs-readdir-recursive@1.1.0: resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} dev: true - /fs-teardown/0.3.2: + /fs-teardown@0.3.2: resolution: {integrity: sha512-5xJQGMsGjHdZJ5yw/eyZEkAIHYwQQA6T34PfXUCl5JOeizfLWnz3gBEVfEidgrnnYZKTBW3L7aPrB3aI8f0Vqw==} dependencies: fs-extra: 10.1.0 outvariant: 1.4.0 dev: true - /fs.realpath/1.0.0: + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /fsevents/2.1.3: + /fsevents@2.1.3: resolution: {integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] @@ -6087,7 +6035,7 @@ packages: requiresBuild: true optional: true - /fsevents/2.3.2: + /fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] @@ -6095,11 +6043,11 @@ packages: dev: true optional: true - /function-bind/1.1.1: + /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true - /function.prototype.name/1.1.5: + /function.prototype.name@1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} engines: {node: '>= 0.4'} dependencies: @@ -6109,24 +6057,24 @@ packages: functions-have-names: 1.2.3 dev: true - /functional-red-black-tree/1.0.1: + /functional-red-black-tree@1.0.1: resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} dev: true - /functions-have-names/1.2.3: + /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true - /gensync/1.0.0-beta.2: + /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} dev: true - /get-caller-file/2.0.5: + /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - /get-intrinsic/1.2.0: + /get-intrinsic@1.2.0: resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} dependencies: function-bind: 1.1.1 @@ -6134,24 +6082,24 @@ packages: has-symbols: 1.0.3 dev: true - /get-package-type/0.1.0: + /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} dev: true - /get-stream/4.1.0: + /get-stream@4.1.0: resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} engines: {node: '>=6'} dependencies: pump: 3.0.0 dev: true - /get-stream/6.0.1: + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} dev: true - /get-symbol-description/1.0.0: + /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: @@ -6159,12 +6107,12 @@ packages: get-intrinsic: 1.2.0 dev: true - /get-value/2.0.6: + /get-value@2.0.6: resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} engines: {node: '>=0.10.0'} dev: true - /git-log-parser/1.2.0: + /git-log-parser@1.2.0: resolution: {integrity: sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==} dependencies: argv-formatter: 1.0.0 @@ -6175,7 +6123,7 @@ packages: traverse: 0.6.7 dev: true - /git-raw-commits/2.0.11: + /git-raw-commits@2.0.11: resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} engines: {node: '>=10'} hasBin: true @@ -6187,17 +6135,17 @@ packages: through2: 4.0.2 dev: true - /glob-parent/5.1.2: + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - /glob-to-regexp/0.4.1: + /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob/7.1.6: + /glob@7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} dependencies: fs.realpath: 1.0.0 @@ -6208,7 +6156,7 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob/7.2.3: + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 @@ -6219,7 +6167,7 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob/9.3.5: + /glob@9.3.5: resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} engines: {node: '>=16 || 14 >=14.17'} dependencies: @@ -6229,14 +6177,14 @@ packages: path-scurry: 1.6.4 dev: true - /global-dirs/0.1.1: + /global-dirs@0.1.1: resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} engines: {node: '>=4'} dependencies: ini: 1.3.8 dev: true - /global-modules/1.0.0: + /global-modules@1.0.0: resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} engines: {node: '>=0.10.0'} dependencies: @@ -6245,7 +6193,7 @@ packages: resolve-dir: 1.0.1 dev: true - /global-prefix/1.0.2: + /global-prefix@1.0.2: resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} engines: {node: '>=0.10.0'} dependencies: @@ -6256,26 +6204,26 @@ packages: which: 1.3.1 dev: true - /globals/11.12.0: + /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} dev: true - /globals/13.20.0: + /globals@13.20.0: resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true - /globalthis/1.0.3: + /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.0 dev: true - /globby/11.1.0: + /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} dependencies: @@ -6287,7 +6235,7 @@ packages: slash: 3.0.0 dev: true - /globby/6.1.0: + /globby@6.1.0: resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} engines: {node: '>=0.10.0'} dependencies: @@ -6298,71 +6246,70 @@ packages: pinkie-promise: 2.0.1 dev: true - /gopd/1.0.1: + /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.0 dev: true - /graceful-fs/4.2.11: + /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true - /grapheme-splitter/1.0.4: + /grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true - /graphql/16.6.0: + /graphql@16.6.0: resolution: {integrity: sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} dev: false - /handle-thing/2.0.1: + /handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} dev: true - /hard-rejection/2.1.0: + /hard-rejection@2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} dev: true - /has-bigints/1.0.2: + /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true - /has-flag/3.0.0: + /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} - dev: true - /has-flag/4.0.0: + /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-property-descriptors/1.0.0: + /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: get-intrinsic: 1.2.0 dev: true - /has-proto/1.0.1: + /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} dev: true - /has-symbols/1.0.3: + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: true - /has-tostringtag/1.0.0: + /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /has-value/0.3.1: + /has-value@0.3.1: resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} engines: {node: '>=0.10.0'} dependencies: @@ -6371,7 +6318,7 @@ packages: isobject: 2.1.0 dev: true - /has-value/1.0.0: + /has-value@1.0.0: resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} engines: {node: '>=0.10.0'} dependencies: @@ -6380,12 +6327,12 @@ packages: isobject: 3.0.1 dev: true - /has-values/0.1.4: + /has-values@0.1.4: resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} engines: {node: '>=0.10.0'} dev: true - /has-values/1.0.0: + /has-values@1.0.0: resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} engines: {node: '>=0.10.0'} dependencies: @@ -6393,35 +6340,35 @@ packages: kind-of: 4.0.0 dev: true - /has/1.0.3: + /has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 dev: true - /headers-polyfill/3.1.2: + /headers-polyfill@3.1.2: resolution: {integrity: sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==} - /homedir-polyfill/1.0.3: + /homedir-polyfill@1.0.3: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} dependencies: parse-passwd: 1.0.0 dev: true - /hosted-git-info/2.8.9: + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true - /hosted-git-info/4.1.0: + /hosted-git-info@4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} dependencies: lru-cache: 6.0.0 dev: true - /hpack.js/2.1.6: + /hpack.js@2.1.6: resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} dependencies: inherits: 2.0.4 @@ -6430,22 +6377,22 @@ packages: wbuf: 1.7.3 dev: true - /html-encoding-sniffer/3.0.0: + /html-encoding-sniffer@3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} dependencies: whatwg-encoding: 2.0.0 dev: true - /html-entities/1.4.0: + /html-entities@1.4.0: resolution: {integrity: sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==} dev: true - /html-escaper/2.0.2: + /html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - /http-assert/1.5.0: + /http-assert@1.5.0: resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} engines: {node: '>= 0.8'} dependencies: @@ -6453,11 +6400,11 @@ packages: http-errors: 1.8.1 dev: true - /http-deceiver/1.2.7: + /http-deceiver@1.2.7: resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} dev: true - /http-errors/1.6.3: + /http-errors@1.6.3: resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} engines: {node: '>= 0.6'} dependencies: @@ -6467,7 +6414,7 @@ packages: statuses: 1.5.0 dev: true - /http-errors/1.8.1: + /http-errors@1.8.1: resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} engines: {node: '>= 0.6'} dependencies: @@ -6478,7 +6425,7 @@ packages: toidentifier: 1.0.1 dev: true - /http-errors/2.0.0: + /http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} dependencies: @@ -6489,92 +6436,92 @@ packages: toidentifier: 1.0.1 dev: true - /http-parser-js/0.5.8: + /http-parser-js@0.5.8: resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} dev: true - /http-proxy-agent/5.0.0: + /http-proxy-agent@5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) transitivePeerDependencies: - supports-color dev: true - /http-proxy-middleware/0.19.1_tmpgdztspuwvsxzgjkhoqk7duq: + /http-proxy-middleware@0.19.1(debug@4.3.4)(supports-color@6.1.0): resolution: {integrity: sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==} engines: {node: '>=4.0.0'} dependencies: - http-proxy: 1.18.1_debug@4.3.4 + http-proxy: 1.18.1(debug@4.3.4) is-glob: 4.0.3 lodash: 4.17.21 - micromatch: 3.1.10_supports-color@6.1.0 + micromatch: 3.1.10(supports-color@6.1.0) transitivePeerDependencies: - debug - supports-color dev: true - /http-proxy/1.18.1_debug@4.3.4: + /http-proxy@1.18.1(debug@4.3.4): resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.2_debug@4.3.4 + follow-redirects: 1.15.2(debug@4.3.4) requires-port: 1.0.0 transitivePeerDependencies: - debug dev: true - /https-proxy-agent/5.0.1: + /https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) transitivePeerDependencies: - supports-color dev: true - /human-signals/2.1.0: + /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} dev: true - /human-signals/4.3.1: + /human-signals@4.3.1: resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} engines: {node: '>=14.18.0'} dev: true - /iconv-lite/0.4.24: + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 - /iconv-lite/0.6.3: + /iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 dev: true - /ieee754/1.2.1: + /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - /ignore/4.0.6: + /ignore@4.0.6: resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} engines: {node: '>= 4'} dev: true - /ignore/5.2.4: + /ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} dev: true - /import-fresh/3.3.0: + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} dependencies: @@ -6582,7 +6529,7 @@ packages: resolve-from: 4.0.0 dev: true - /import-local/2.0.0: + /import-local@2.0.0: resolution: {integrity: sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==} engines: {node: '>=6'} hasBin: true @@ -6591,7 +6538,7 @@ packages: resolve-cwd: 2.0.0 dev: true - /import-local/3.1.0: + /import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} hasBin: true @@ -6600,35 +6547,35 @@ packages: resolve-cwd: 3.0.0 dev: true - /imurmurhash/0.1.4: + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} dev: true - /indent-string/4.0.0: + /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} dev: true - /inflight/1.0.6: + /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true - /inherits/2.0.3: + /inherits@2.0.3: resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} dev: true - /inherits/2.0.4: + /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /ini/1.3.8: + /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true - /inquirer/8.2.5: + /inquirer@8.2.5: resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} engines: {node: '>=12.0.0'} dependencies: @@ -6648,7 +6595,7 @@ packages: through: 2.3.8 wrap-ansi: 7.0.0 - /internal-ip/4.3.0: + /internal-ip@4.3.0: resolution: {integrity: sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==} engines: {node: '>=6'} dependencies: @@ -6656,7 +6603,7 @@ packages: ipaddr.js: 1.9.1 dev: true - /internal-slot/1.0.5: + /internal-slot@1.0.5: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} dependencies: @@ -6665,40 +6612,40 @@ packages: side-channel: 1.0.4 dev: true - /ip-regex/2.1.0: + /ip-regex@2.1.0: resolution: {integrity: sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==} engines: {node: '>=4'} dev: true - /ip/1.1.8: + /ip@1.1.8: resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==} dev: true - /ipaddr.js/1.9.1: + /ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} dev: true - /is-absolute-url/3.0.3: + /is-absolute-url@3.0.3: resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} engines: {node: '>=8'} dev: true - /is-accessor-descriptor/0.1.6: + /is-accessor-descriptor@0.1.6: resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /is-accessor-descriptor/1.0.0: + /is-accessor-descriptor@1.0.0: resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} engines: {node: '>=0.10.0'} dependencies: kind-of: 6.0.3 dev: true - /is-arguments/1.1.1: + /is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: @@ -6706,7 +6653,7 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-array-buffer/3.0.2: + /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: call-bind: 1.0.2 @@ -6714,23 +6661,23 @@ packages: is-typed-array: 1.1.10 dev: true - /is-arrayish/0.2.1: + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true - /is-bigint/1.0.4: + /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 dev: true - /is-binary-path/2.1.0: + /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 - /is-boolean-object/1.1.2: + /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: @@ -6738,50 +6685,50 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-buffer/1.1.6: + /is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: true - /is-builtin-module/3.2.1: + /is-builtin-module@3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} dependencies: builtin-modules: 3.3.0 dev: true - /is-callable/1.2.7: + /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} dev: true - /is-core-module/2.12.0: + /is-core-module@2.12.0: resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} dependencies: has: 1.0.3 dev: true - /is-data-descriptor/0.1.4: + /is-data-descriptor@0.1.4: resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /is-data-descriptor/1.0.0: + /is-data-descriptor@1.0.0: resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} engines: {node: '>=0.10.0'} dependencies: kind-of: 6.0.3 dev: true - /is-date-object/1.0.5: + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-descriptor/0.1.6: + /is-descriptor@0.1.6: resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} engines: {node: '>=0.10.0'} dependencies: @@ -6790,7 +6737,7 @@ packages: kind-of: 5.1.0 dev: true - /is-descriptor/1.0.2: + /is-descriptor@1.0.2: resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==} engines: {node: '>=0.10.0'} dependencies: @@ -6799,136 +6746,136 @@ packages: kind-of: 6.0.3 dev: true - /is-docker/2.2.1: + /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true dev: true - /is-extendable/0.1.1: + /is-extendable@0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} dev: true - /is-extendable/1.0.1: + /is-extendable@1.0.1: resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} engines: {node: '>=0.10.0'} dependencies: is-plain-object: 2.0.4 dev: true - /is-extglob/2.1.1: + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - /is-fullwidth-code-point/2.0.0: + /is-fullwidth-code-point@2.0.0: resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} engines: {node: '>=4'} dev: true - /is-fullwidth-code-point/3.0.0: + /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - /is-fullwidth-code-point/4.0.0: + /is-fullwidth-code-point@4.0.0: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} dev: true - /is-generator-fn/2.1.0: + /is-generator-fn@2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} dev: true - /is-generator-function/1.0.10: + /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-glob/4.0.3: + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - /is-interactive/1.0.0: + /is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} - /is-module/1.0.0: + /is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} dev: true - /is-negative-zero/2.0.2: + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} dev: true - /is-node-process/1.2.0: + /is-node-process@1.2.0: resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} dev: false - /is-number-object/1.0.7: + /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-number/3.0.0: + /is-number@3.0.0: resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /is-number/7.0.0: + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - /is-obj/2.0.0: + /is-obj@2.0.0: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} dev: true - /is-path-cwd/2.2.0: + /is-path-cwd@2.2.0: resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} engines: {node: '>=6'} dev: true - /is-path-in-cwd/2.1.0: + /is-path-in-cwd@2.1.0: resolution: {integrity: sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==} engines: {node: '>=6'} dependencies: is-path-inside: 2.1.0 dev: true - /is-path-inside/2.1.0: + /is-path-inside@2.1.0: resolution: {integrity: sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==} engines: {node: '>=6'} dependencies: path-is-inside: 1.0.2 dev: true - /is-plain-obj/1.1.0: + /is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} dev: true - /is-plain-object/2.0.4: + /is-plain-object@2.0.4: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true - /is-potential-custom-element-name/1.0.1: + /is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true - /is-regex/1.1.4: + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: @@ -6936,49 +6883,49 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-shared-array-buffer/1.0.2: + /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.2 dev: true - /is-stream/1.1.0: + /is-stream@1.1.0: resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} engines: {node: '>=0.10.0'} dev: true - /is-stream/2.0.1: + /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} dev: true - /is-stream/3.0.0: + /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /is-string/1.0.7: + /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-symbol/1.0.4: + /is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /is-text-path/1.0.1: + /is-text-path@1.0.1: resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} engines: {node: '>=0.10.0'} dependencies: text-extensions: 1.9.0 dev: true - /is-typed-array/1.1.10: + /is-typed-array@1.1.10: resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} engines: {node: '>= 0.4'} dependencies: @@ -6989,63 +6936,63 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-unicode-supported/0.1.0: + /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} - /is-utf8/0.2.1: + /is-utf8@0.2.1: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} dev: true - /is-weakref/1.0.2: + /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 dev: true - /is-windows/1.0.2: + /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} dev: true - /is-wsl/1.1.0: + /is-wsl@1.1.0: resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} engines: {node: '>=4'} dev: true - /is-wsl/2.2.0: + /is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} dependencies: is-docker: 2.2.1 dev: true - /isarray/1.0.0: + /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true - /isbinaryfile/5.0.0: + /isbinaryfile@5.0.0: resolution: {integrity: sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==} engines: {node: '>= 14.0.0'} dev: true - /isexe/2.0.0: + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /isobject/2.1.0: + /isobject@2.1.0: resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} engines: {node: '>=0.10.0'} dependencies: isarray: 1.0.0 dev: true - /isobject/3.0.1: + /isobject@3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} dev: true - /issue-parser/6.0.0: + /issue-parser@6.0.0: resolution: {integrity: sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==} engines: {node: '>=10.13'} dependencies: @@ -7056,12 +7003,12 @@ packages: lodash.uniqby: 4.7.0 dev: true - /istanbul-lib-coverage/3.2.0: + /istanbul-lib-coverage@3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} dev: true - /istanbul-lib-instrument/5.2.1: + /istanbul-lib-instrument@5.2.1: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: @@ -7074,7 +7021,7 @@ packages: - supports-color dev: true - /istanbul-lib-report/3.0.0: + /istanbul-lib-report@3.0.0: resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} engines: {node: '>=8'} dependencies: @@ -7083,18 +7030,18 @@ packages: supports-color: 7.2.0 dev: true - /istanbul-lib-source-maps/4.0.1: + /istanbul-lib-source-maps@4.0.1: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) istanbul-lib-coverage: 3.2.0 source-map: 0.6.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-reports/3.1.5: + /istanbul-reports@3.1.5: resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} engines: {node: '>=8'} dependencies: @@ -7102,7 +7049,7 @@ packages: istanbul-lib-report: 3.0.0 dev: true - /jest-changed-files/29.5.0: + /jest-changed-files@29.5.0: resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7110,7 +7057,7 @@ packages: p-limit: 3.1.0 dev: true - /jest-circus/29.5.0: + /jest-circus@29.5.0: resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7138,7 +7085,7 @@ packages: - supports-color dev: true - /jest-cli/29.5.0_rrli7kzx2akox3oq6aahu3rvje: + /jest-cli@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -7148,14 +7095,14 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.5.0_ts-node@10.9.1 + '@jest/core': 29.5.0(ts-node@10.9.1) '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.5.0_rrli7kzx2akox3oq6aahu3rvje + jest-config: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) jest-util: 29.5.0 jest-validate: 29.5.0 prompts: 2.4.2 @@ -7166,7 +7113,7 @@ packages: - ts-node dev: true - /jest-config/29.5.0_rrli7kzx2akox3oq6aahu3rvje: + /jest-config@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -7182,7 +7129,7 @@ packages: '@jest/test-sequencer': 29.5.0 '@jest/types': 29.5.0 '@types/node': 18.15.11 - babel-jest: 29.5.0_@babel+core@7.21.4 + babel-jest: 29.5.0(@babel/core@7.21.4) chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.1 @@ -7201,12 +7148,12 @@ packages: pretty-format: 29.5.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e + ts-node: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4) transitivePeerDependencies: - supports-color dev: true - /jest-diff/29.5.0: + /jest-diff@29.5.0: resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7216,14 +7163,14 @@ packages: pretty-format: 29.5.0 dev: true - /jest-docblock/29.4.3: + /jest-docblock@29.4.3: resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 dev: true - /jest-each/29.5.0: + /jest-each@29.5.0: resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7234,7 +7181,7 @@ packages: pretty-format: 29.5.0 dev: true - /jest-environment-jsdom/29.5.0: + /jest-environment-jsdom@29.5.0: resolution: {integrity: sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -7257,7 +7204,7 @@ packages: - utf-8-validate dev: true - /jest-environment-node/29.5.0: + /jest-environment-node@29.5.0: resolution: {integrity: sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7269,12 +7216,12 @@ packages: jest-util: 29.5.0 dev: true - /jest-get-type/29.4.3: + /jest-get-type@29.4.3: resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-haste-map/29.5.0: + /jest-haste-map@29.5.0: resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7293,7 +7240,7 @@ packages: fsevents: 2.3.2 dev: true - /jest-leak-detector/29.5.0: + /jest-leak-detector@29.5.0: resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7301,7 +7248,7 @@ packages: pretty-format: 29.5.0 dev: true - /jest-matcher-utils/29.5.0: + /jest-matcher-utils@29.5.0: resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7311,7 +7258,7 @@ packages: pretty-format: 29.5.0 dev: true - /jest-message-util/29.5.0: + /jest-message-util@29.5.0: resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7326,7 +7273,7 @@ packages: stack-utils: 2.0.6 dev: true - /jest-mock/29.5.0: + /jest-mock@29.5.0: resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7335,7 +7282,7 @@ packages: jest-util: 29.5.0 dev: true - /jest-pnp-resolver/1.2.3_jest-resolve@29.5.0: + /jest-pnp-resolver@1.2.3(jest-resolve@29.5.0): resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: @@ -7347,12 +7294,12 @@ packages: jest-resolve: 29.5.0 dev: true - /jest-regex-util/29.4.3: + /jest-regex-util@29.4.3: resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-resolve-dependencies/29.5.0: + /jest-resolve-dependencies@29.5.0: resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7362,14 +7309,14 @@ packages: - supports-color dev: true - /jest-resolve/29.5.0: + /jest-resolve@29.5.0: resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 graceful-fs: 4.2.11 jest-haste-map: 29.5.0 - jest-pnp-resolver: 1.2.3_jest-resolve@29.5.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.5.0) jest-util: 29.5.0 jest-validate: 29.5.0 resolve: 1.22.2 @@ -7377,7 +7324,7 @@ packages: slash: 3.0.0 dev: true - /jest-runner/29.5.0: + /jest-runner@29.5.0: resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7406,7 +7353,7 @@ packages: - supports-color dev: true - /jest-runtime/29.5.0: + /jest-runtime@29.5.0: resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7436,14 +7383,14 @@ packages: - supports-color dev: true - /jest-snapshot/29.5.0: + /jest-snapshot@29.5.0: resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.21.4 '@babel/generator': 7.21.4 - '@babel/plugin-syntax-jsx': 7.21.4_@babel+core@7.21.4 - '@babel/plugin-syntax-typescript': 7.21.4_@babel+core@7.21.4 + '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.4) + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.4) '@babel/traverse': 7.21.4 '@babel/types': 7.21.4 '@jest/expect-utils': 29.5.0 @@ -7451,7 +7398,7 @@ packages: '@jest/types': 29.5.0 '@types/babel__traverse': 7.18.3 '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.4 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.4) chalk: 4.1.2 expect: 29.5.0 graceful-fs: 4.2.11 @@ -7467,7 +7414,7 @@ packages: - supports-color dev: true - /jest-util/29.5.0: + /jest-util@29.5.0: resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7479,7 +7426,7 @@ packages: picomatch: 2.3.1 dev: true - /jest-validate/29.5.0: + /jest-validate@29.5.0: resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7491,7 +7438,7 @@ packages: pretty-format: 29.5.0 dev: true - /jest-watcher/29.5.0: + /jest-watcher@29.5.0: resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7505,7 +7452,7 @@ packages: string-length: 4.0.2 dev: true - /jest-worker/27.5.1: + /jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: @@ -7514,7 +7461,7 @@ packages: supports-color: 8.1.1 dev: true - /jest-worker/29.5.0: + /jest-worker@29.5.0: resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7524,7 +7471,7 @@ packages: supports-color: 8.1.1 dev: true - /jest/29.5.0_rrli7kzx2akox3oq6aahu3rvje: + /jest@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -7534,31 +7481,31 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.5.0_ts-node@10.9.1 + '@jest/core': 29.5.0(ts-node@10.9.1) '@jest/types': 29.5.0 import-local: 3.1.0 - jest-cli: 29.5.0_rrli7kzx2akox3oq6aahu3rvje + jest-cli: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: true - /joycon/3.1.1: + /joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} dev: true - /js-levenshtein/1.1.6: + /js-levenshtein@1.1.6: resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} engines: {node: '>=0.10.0'} dev: false - /js-tokens/4.0.0: + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true - /js-yaml/3.14.1: + /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true dependencies: @@ -7566,7 +7513,7 @@ packages: esprima: 4.0.1 dev: true - /js-yaml/4.1.0: + /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: @@ -7574,7 +7521,7 @@ packages: dev: true optional: true - /jsdom/20.0.3: + /jsdom@20.0.3: resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} engines: {node: '>=14'} peerDependencies: @@ -7615,50 +7562,50 @@ packages: - utf-8-validate dev: true - /jsesc/0.5.0: + /jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true dev: true - /jsesc/2.5.2: + /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true dev: true - /json-bigint/1.0.0: + /json-bigint@1.0.0: resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} dependencies: bignumber.js: 9.1.1 dev: true - /json-parse-even-better-errors/2.3.1: + /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true - /json-schema-traverse/0.4.1: + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true - /json-schema-traverse/1.0.0: + /json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: true - /json-stable-stringify-without-jsonify/1.0.1: + /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true - /json5/2.2.3: + /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true dev: true - /jsonc-parser/3.2.0: + /jsonc-parser@3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} dev: true - /jsonfile/6.1.0: + /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.0 @@ -7666,56 +7613,56 @@ packages: graceful-fs: 4.2.11 dev: true - /jsonparse/1.3.1: + /jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} dev: true - /keygrip/1.1.0: + /keygrip@1.1.0: resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} engines: {node: '>= 0.6'} dependencies: tsscmp: 1.0.6 dev: true - /killable/1.0.1: + /killable@1.0.1: resolution: {integrity: sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==} dev: true - /kind-of/3.2.2: + /kind-of@3.2.2: resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} engines: {node: '>=0.10.0'} dependencies: is-buffer: 1.1.6 dev: true - /kind-of/4.0.0: + /kind-of@4.0.0: resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} engines: {node: '>=0.10.0'} dependencies: is-buffer: 1.1.6 dev: true - /kind-of/5.1.0: + /kind-of@5.1.0: resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} engines: {node: '>=0.10.0'} dev: true - /kind-of/6.0.3: + /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} dev: true - /kleur/3.0.3: + /kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} dev: true - /koa-compose/4.1.0: + /koa-compose@4.1.0: resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} dev: true - /koa-convert/2.0.0: + /koa-convert@2.0.0: resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} engines: {node: '>= 10'} dependencies: @@ -7723,34 +7670,34 @@ packages: koa-compose: 4.1.0 dev: true - /koa-etag/4.0.0: + /koa-etag@4.0.0: resolution: {integrity: sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==} dependencies: etag: 1.8.1 dev: true - /koa-send/5.0.1: + /koa-send@5.0.1: resolution: {integrity: sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==} engines: {node: '>= 8'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) http-errors: 1.8.1 resolve-path: 1.4.0 transitivePeerDependencies: - supports-color dev: true - /koa-static/5.0.0: + /koa-static@5.0.0: resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==} engines: {node: '>= 7.6.0'} dependencies: - debug: 3.2.7 + debug: 3.2.7(supports-color@6.1.0) koa-send: 5.0.1 transitivePeerDependencies: - supports-color dev: true - /koa/2.14.2: + /koa@2.14.2: resolution: {integrity: sha512-VFI2bpJaodz6P7x2uyLiX6RLYpZmOJqNmoCst/Yyd7hQlszyPwG/I9CQJ63nOtKSxpt5M7NH67V6nJL2BwCl7g==} engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} dependencies: @@ -7759,7 +7706,7 @@ packages: content-disposition: 0.5.4 content-type: 1.0.5 cookies: 0.8.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) delegates: 1.0.0 depd: 2.0.0 destroy: 1.2.0 @@ -7781,17 +7728,17 @@ packages: - supports-color dev: true - /leven/2.1.0: + /leven@2.1.0: resolution: {integrity: sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==} engines: {node: '>=0.10.0'} dev: true - /leven/3.1.0: + /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} dev: true - /levn/0.3.0: + /levn@0.3.0: resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} engines: {node: '>= 0.8.0'} dependencies: @@ -7799,7 +7746,7 @@ packages: type-check: 0.3.2 dev: true - /levn/0.4.1: + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} dependencies: @@ -7807,16 +7754,16 @@ packages: type-check: 0.4.0 dev: true - /lilconfig/2.1.0: + /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} dev: true - /lines-and-columns/1.2.4: + /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true - /lint-staged/13.2.1: + /lint-staged@13.2.1: resolution: {integrity: sha512-8gfzinVXoPfga5Dz/ZOn8I2GOhf81Wvs+KwbEXQn/oWZAvCVS2PivrXfVbFJc93zD16uC0neS47RXHIjXKYZQw==} engines: {node: ^14.13.1 || >=16.0.0} hasBin: true @@ -7824,7 +7771,7 @@ packages: chalk: 5.2.0 cli-truncate: 3.1.0 commander: 10.0.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) execa: 7.1.1 lilconfig: 2.1.0 listr2: 5.0.8 @@ -7839,7 +7786,7 @@ packages: - supports-color dev: true - /listr2/5.0.8: + /listr2@5.0.8: resolution: {integrity: sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==} engines: {node: ^14.13.1 || >=16.0.0} peerDependencies: @@ -7858,17 +7805,17 @@ packages: wrap-ansi: 7.0.0 dev: true - /load-tsconfig/0.2.5: + /load-tsconfig@0.2.5: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /loader-runner/4.3.0: + /loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} dev: true - /loader-utils/2.0.4: + /loader-utils@2.0.4: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} engines: {node: '>=8.9.0'} dependencies: @@ -7877,7 +7824,7 @@ packages: json5: 2.2.3 dev: true - /locate-path/3.0.0: + /locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} dependencies: @@ -7885,89 +7832,89 @@ packages: path-exists: 3.0.0 dev: true - /locate-path/5.0.0: + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} dependencies: p-locate: 4.1.0 dev: true - /locate-path/6.0.0: + /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} dependencies: p-locate: 5.0.0 dev: true - /lodash.assignwith/4.2.0: + /lodash.assignwith@4.2.0: resolution: {integrity: sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==} dev: true - /lodash.camelcase/4.3.0: + /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true - /lodash.capitalize/4.2.1: + /lodash.capitalize@4.2.1: resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} dev: true - /lodash.debounce/4.0.8: + /lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: true - /lodash.escaperegexp/4.1.2: + /lodash.escaperegexp@4.1.2: resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} dev: true - /lodash.isplainobject/4.0.6: + /lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} dev: true - /lodash.isstring/4.0.1: + /lodash.isstring@4.0.1: resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} dev: true - /lodash.map/4.6.0: + /lodash.map@4.6.0: resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==} dev: true - /lodash.merge/4.6.2: + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true - /lodash.mergewith/4.6.2: + /lodash.mergewith@4.6.2: resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} dev: true optional: true - /lodash.sortby/4.7.0: + /lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} dev: true - /lodash.truncate/4.4.2: + /lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} dev: true - /lodash.uniq/4.5.0: + /lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} dev: true optional: true - /lodash.uniqby/4.7.0: + /lodash.uniqby@4.7.0: resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} dev: true - /lodash/4.17.21: + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - /log-symbols/4.1.0: + /log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - /log-update/4.0.0: + /log-update@4.0.0: resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} engines: {node: '>=10'} dependencies: @@ -7977,93 +7924,93 @@ packages: wrap-ansi: 6.2.0 dev: true - /loglevel/1.8.1: + /loglevel@1.8.1: resolution: {integrity: sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==} engines: {node: '>= 0.6.0'} dev: true - /longest/2.0.1: + /longest@2.0.1: resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==} engines: {node: '>=0.10.0'} dev: true - /lru-cache/5.1.1: + /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 dev: true - /lru-cache/6.0.0: + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 dev: true - /lru-cache/9.0.1: + /lru-cache@9.0.1: resolution: {integrity: sha512-C8QsKIN1UIXeOs3iWmiZ1lQY+EnKDojWd37fXy1aSbJvH4iSma1uy2OWuoB3m4SYRli5+CUjDv3Dij5DVoetmg==} engines: {node: 14 || >=16.14} dev: true - /make-dir/3.1.0: + /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} dependencies: semver: 6.3.0 dev: true - /make-error/1.3.6: + /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /makeerror/1.0.12: + /makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: tmpl: 1.0.5 dev: true - /map-cache/0.2.2: + /map-cache@0.2.2: resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} engines: {node: '>=0.10.0'} dev: true - /map-obj/1.0.1: + /map-obj@1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} dev: true - /map-obj/4.3.0: + /map-obj@4.3.0: resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} engines: {node: '>=8'} dev: true - /map-visit/1.0.0: + /map-visit@1.0.0: resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} engines: {node: '>=0.10.0'} dependencies: object-visit: 1.0.1 dev: true - /media-typer/0.3.0: + /media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} dev: true - /memfs/3.5.0: + /memfs@3.5.0: resolution: {integrity: sha512-yK6o8xVJlQerz57kvPROwTMgx5WtGwC2ZxDtOUsnGl49rHjYkfQoPNZPCKH73VdLE1BwBu/+Fx/NL8NYMUw2aA==} engines: {node: '>= 4.0.0'} dependencies: fs-monkey: 1.0.3 dev: true - /memory-fs/0.4.1: + /memory-fs@0.4.1: resolution: {integrity: sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==} dependencies: errno: 0.1.8 readable-stream: 2.3.8 dev: true - /meow/8.1.2: + /meow@8.1.2: resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} engines: {node: '>=10'} dependencies: @@ -8080,50 +8027,50 @@ packages: yargs-parser: 20.2.9 dev: true - /merge-descriptors/1.0.1: + /merge-descriptors@1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} dev: true - /merge-stream/2.0.0: + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true - /merge/2.1.1: - resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} - dev: true - - /merge2/1.4.1: + /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} dev: true - /methods/1.1.2: + /merge@2.1.1: + resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} + dev: true + + /methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} dev: true - /micromatch/3.1.10_supports-color@6.1.0: + /micromatch@3.1.10(supports-color@6.1.0): resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} engines: {node: '>=0.10.0'} dependencies: arr-diff: 4.0.0 array-unique: 0.3.2 - braces: 2.3.2_supports-color@6.1.0 + braces: 2.3.2(supports-color@6.1.0) define-property: 2.0.2 extend-shallow: 3.0.2 - extglob: 2.0.4_supports-color@6.1.0 + extglob: 2.0.4(supports-color@6.1.0) fragment-cache: 0.2.1 kind-of: 6.0.3 - nanomatch: 1.2.13_supports-color@6.1.0 + nanomatch: 1.2.13(supports-color@6.1.0) object.pick: 1.3.0 regex-not: 1.0.2 - snapdragon: 0.8.2_supports-color@6.1.0 + snapdragon: 0.8.2(supports-color@6.1.0) to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true - /micromatch/4.0.5: + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: @@ -8131,60 +8078,60 @@ packages: picomatch: 2.3.1 dev: true - /mime-db/1.52.0: + /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - /mime-types/2.1.35: + /mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 - /mime/1.6.0: + /mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} hasBin: true dev: true - /mime/2.6.0: + /mime@2.6.0: resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} engines: {node: '>=4.0.0'} hasBin: true dev: true - /mimic-fn/2.1.0: + /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - /mimic-fn/4.0.0: + /mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} dev: true - /min-indent/1.0.1: + /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} dev: true - /minimalistic-assert/1.0.1: + /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} dev: true - /minimatch/3.1.2: + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 dev: true - /minimatch/8.0.4: + /minimatch@8.0.4: resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 dev: true - /minimist-options/4.1.0: + /minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} dependencies: @@ -8193,25 +8140,25 @@ packages: kind-of: 6.0.3 dev: true - /minimist/1.2.7: + /minimist@1.2.7: resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} dev: true - /minimist/1.2.8: + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /minipass/4.2.8: + /minipass@4.2.8: resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} engines: {node: '>=8'} dev: true - /minipass/5.0.0: + /minipass@5.0.0: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} dev: true - /mixin-deep/1.3.2: + /mixin-deep@1.3.2: resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} engines: {node: '>=0.10.0'} dependencies: @@ -8219,34 +8166,34 @@ packages: is-extendable: 1.0.1 dev: true - /mkdirp/0.5.6: + /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true dependencies: minimist: 1.2.8 dev: true - /mri/1.1.4: + /mri@1.1.4: resolution: {integrity: sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==} engines: {node: '>=4'} dev: true - /ms/2.0.0: + /ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: true - /ms/2.1.2: + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - /ms/2.1.3: + /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true - /multicast-dns-service-types/1.1.0: + /multicast-dns-service-types@1.1.0: resolution: {integrity: sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==} dev: true - /multicast-dns/6.2.3: + /multicast-dns@6.2.3: resolution: {integrity: sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==} hasBin: true dependencies: @@ -8254,15 +8201,15 @@ packages: thunky: 1.1.0 dev: true - /mustache/4.2.0: + /mustache@4.2.0: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true dev: true - /mute-stream/0.0.8: + /mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - /mz/2.7.0: + /mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: any-promise: 1.3.0 @@ -8270,11 +8217,11 @@ packages: thenify-all: 1.6.0 dev: true - /nanocolors/0.2.13: + /nanocolors@0.2.13: resolution: {integrity: sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==} dev: true - /nanomatch/1.2.13_supports-color@6.1.0: + /nanomatch@1.2.13(supports-color@6.1.0): resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} engines: {node: '>=0.10.0'} dependencies: @@ -8287,38 +8234,38 @@ packages: kind-of: 6.0.3 object.pick: 1.3.0 regex-not: 1.0.2 - snapdragon: 0.8.2_supports-color@6.1.0 + snapdragon: 0.8.2(supports-color@6.1.0) to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true - /natural-compare-lite/1.4.0: + /natural-compare-lite@1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} dev: true - /natural-compare/1.4.0: + /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /negotiator/0.6.3: + /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} - /neo-async/2.6.2: + /neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true - /nice-try/1.0.5: + /nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} dev: true - /node-domexception/1.0.0: + /node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} dev: false - /node-fetch/2.6.7: + /node-fetch@2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} peerDependencies: @@ -8330,7 +8277,7 @@ packages: whatwg-url: 5.0.0 dev: true - /node-fetch/2.6.9: + /node-fetch@2.6.9: resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} engines: {node: 4.x || >=6.0.0} peerDependencies: @@ -8342,20 +8289,20 @@ packages: whatwg-url: 5.0.0 dev: false - /node-forge/0.10.0: + /node-forge@0.10.0: resolution: {integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==} engines: {node: '>= 6.0.0'} dev: true - /node-int64/0.4.0: + /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /node-releases/2.0.10: + /node-releases@2.0.10: resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} dev: true - /normalize-package-data/2.5.0: + /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 @@ -8364,7 +8311,7 @@ packages: validate-npm-package-license: 3.0.4 dev: true - /normalize-package-data/3.0.3: + /normalize-package-data@3.0.3: resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} engines: {node: '>=10'} dependencies: @@ -8374,40 +8321,40 @@ packages: validate-npm-package-license: 3.0.4 dev: true - /normalize-path/3.0.0: + /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - /npm-run-path/2.0.2: + /npm-run-path@2.0.2: resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} engines: {node: '>=4'} dependencies: path-key: 2.0.1 dev: true - /npm-run-path/4.0.1: + /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} dependencies: path-key: 3.1.1 dev: true - /npm-run-path/5.1.0: + /npm-run-path@5.1.0: resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 dev: true - /nwsapi/2.2.4: + /nwsapi@2.2.4: resolution: {integrity: sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==} dev: true - /object-assign/4.1.1: + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - /object-copy/0.1.0: + /object-copy@0.1.0: resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} engines: {node: '>=0.10.0'} dependencies: @@ -8416,11 +8363,11 @@ packages: kind-of: 3.2.2 dev: true - /object-inspect/1.12.3: + /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} dev: true - /object-is/1.1.5: + /object-is@1.1.5: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} engines: {node: '>= 0.4'} dependencies: @@ -8428,19 +8375,19 @@ packages: define-properties: 1.2.0 dev: true - /object-keys/1.1.1: + /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} dev: true - /object-visit/1.0.1: + /object-visit@1.0.1: resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true - /object.assign/4.1.4: + /object.assign@4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: @@ -8450,7 +8397,7 @@ packages: object-keys: 1.1.1 dev: true - /object.getownpropertydescriptors/2.1.5: + /object.getownpropertydescriptors@2.1.5: resolution: {integrity: sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==} engines: {node: '>= 0.8'} dependencies: @@ -8460,57 +8407,57 @@ packages: es-abstract: 1.21.2 dev: true - /object.pick/1.3.0: + /object.pick@1.3.0: resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true - /obuf/1.1.2: + /obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} dev: true - /on-exit-leak-free/0.2.0: + /on-exit-leak-free@0.2.0: resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} dev: true - /on-finished/2.4.1: + /on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} dependencies: ee-first: 1.1.1 dev: true - /on-headers/1.0.2: + /on-headers@1.0.2: resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} engines: {node: '>= 0.8'} dev: true - /once/1.4.0: + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 dev: true - /onetime/5.1.2: + /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - /onetime/6.0.0: + /onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 dev: true - /only/0.0.2: + /only@0.0.2: resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} dev: true - /open/8.4.2: + /open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} dependencies: @@ -8519,14 +8466,14 @@ packages: is-wsl: 2.2.0 dev: true - /opn/5.5.0: + /opn@5.5.0: resolution: {integrity: sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==} engines: {node: '>=4'} dependencies: is-wsl: 1.1.0 dev: true - /optionator/0.8.3: + /optionator@0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} dependencies: @@ -8538,7 +8485,7 @@ packages: word-wrap: 1.2.3 dev: true - /optionator/0.9.1: + /optionator@0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} engines: {node: '>= 0.8.0'} dependencies: @@ -8550,7 +8497,7 @@ packages: word-wrap: 1.2.3 dev: true - /ora/5.4.1: + /ora@5.4.1: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} dependencies: @@ -8564,78 +8511,78 @@ packages: strip-ansi: 6.0.1 wcwidth: 1.0.1 - /os-tmpdir/1.0.2: + /os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - /outvariant/1.4.0: + /outvariant@1.4.0: resolution: {integrity: sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==} - /p-finally/1.0.0: + /p-finally@1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} dev: true - /p-limit/2.3.0: + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} dependencies: p-try: 2.2.0 dev: true - /p-limit/3.1.0: + /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 dev: true - /p-locate/3.0.0: + /p-locate@3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} engines: {node: '>=6'} dependencies: p-limit: 2.3.0 dev: true - /p-locate/4.1.0: + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} dependencies: p-limit: 2.3.0 dev: true - /p-locate/5.0.0: + /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} dependencies: p-limit: 3.1.0 dev: true - /p-map/2.1.0: + /p-map@2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} dev: true - /p-map/4.0.0: + /p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} dependencies: aggregate-error: 3.1.0 dev: true - /p-retry/3.0.1: + /p-retry@3.0.1: resolution: {integrity: sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==} engines: {node: '>=6'} dependencies: retry: 0.12.0 dev: true - /p-try/2.2.0: + /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} dev: true - /page-with/0.6.1_57233mj27fjz7synoeubptyy7e: + /page-with@0.6.1(@swc/core@1.3.49)(esbuild@0.17.16): resolution: {integrity: sha512-5J58fSpc8CKonUWCPsh8b2LctFrNSOpXQ8O3tB+/iJvixOQf1qHp4+cDLiIVsl/WiuheXdZTzMcuR0KLQMaWcg==} dependencies: '@open-draft/until': 2.1.0 @@ -8643,14 +8590,14 @@ packages: '@types/express': 4.17.17 '@types/mustache': 4.2.2 '@types/uuid': 8.3.4 - debug: 4.3.4 - express: 4.18.2 + debug: 4.3.4(supports-color@6.1.0) + express: 4.18.2(supports-color@6.1.0) headers-polyfill: 3.1.2 memfs: 3.5.0 mustache: 4.2.0 playwright: 1.32.3 uuid: 8.3.2 - webpack: 5.79.0_57233mj27fjz7synoeubptyy7e + webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) webpack-merge: 5.8.0 transitivePeerDependencies: - '@swc/core' @@ -8660,14 +8607,14 @@ packages: - webpack-cli dev: true - /parent-module/1.0.1: + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} dependencies: callsites: 3.1.0 dev: true - /parse-json/5.2.0: + /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: @@ -8677,70 +8624,70 @@ packages: lines-and-columns: 1.2.4 dev: true - /parse-passwd/1.0.0: + /parse-passwd@1.0.0: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} dev: true - /parse5/6.0.1: + /parse5@6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} dev: true - /parse5/7.1.2: + /parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: entities: 4.4.0 dev: true - /parseurl/1.3.3: + /parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} dev: true - /pascalcase/0.1.1: + /pascalcase@0.1.1: resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} engines: {node: '>=0.10.0'} dev: true - /path-exists/3.0.0: + /path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} dev: true - /path-exists/4.0.0: + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} dev: true - /path-is-absolute/1.0.1: + /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} dev: true - /path-is-inside/1.0.2: + /path-is-inside@1.0.2: resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} dev: true - /path-key/2.0.1: + /path-key@2.0.1: resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} engines: {node: '>=4'} dev: true - /path-key/3.1.1: + /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} dev: true - /path-key/4.0.0: + /path-key@4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} dev: true - /path-parse/1.0.7: + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-scurry/1.6.4: + /path-scurry@1.6.4: resolution: {integrity: sha512-Qp/9IHkdNiXJ3/Kon++At2nVpnhRiPq/aSvQN+H3U1WZbvNRK0RIQK/o4HMqPoXjpuGJUEWpHSs6Mnjxqh3TQg==} engines: {node: '>=16 || 14 >=14.17'} dependencies: @@ -8748,63 +8695,63 @@ packages: minipass: 5.0.0 dev: true - /path-to-regexp/0.1.7: + /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: true - /path-to-regexp/6.2.1: + /path-to-regexp@6.2.1: resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} dev: false - /path-type/4.0.0: + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} dev: true - /picocolors/1.0.0: + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true - /picomatch/2.3.1: + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - /pidtree/0.6.0: + /pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} hasBin: true dev: true - /pify/2.3.0: + /pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} dev: true - /pify/4.0.1: + /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} dev: true - /pinkie-promise/2.0.1: + /pinkie-promise@2.0.1: resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} engines: {node: '>=0.10.0'} dependencies: pinkie: 2.0.4 dev: true - /pinkie/2.0.4: + /pinkie@2.0.4: resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} engines: {node: '>=0.10.0'} dev: true - /pino-abstract-transport/0.5.0: + /pino-abstract-transport@0.5.0: resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} dependencies: duplexify: 4.1.2 split2: 4.2.0 dev: true - /pino-pretty/7.6.1: + /pino-pretty@7.6.1: resolution: {integrity: sha512-H7N6ZYkiyrfwBGW9CSjx0uyO9Q2Lyt73881+OTYk8v3TiTdgN92QHrWlEq/LeWw5XtDP64jeSk3mnc6T+xX9/w==} hasBin: true dependencies: @@ -8823,11 +8770,11 @@ packages: strip-json-comments: 3.1.1 dev: true - /pino-std-serializers/4.0.0: + /pino-std-serializers@4.0.0: resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} dev: true - /pino/7.11.0: + /pino@7.11.0: resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} hasBin: true dependencies: @@ -8844,32 +8791,32 @@ packages: thread-stream: 0.15.2 dev: true - /pirates/4.0.5: + /pirates@4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} dev: true - /pkg-dir/3.0.0: + /pkg-dir@3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} engines: {node: '>=6'} dependencies: find-up: 3.0.0 dev: true - /pkg-dir/4.2.0: + /pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} dependencies: find-up: 4.1.0 dev: true - /playwright-core/1.32.3: + /playwright-core@1.32.3: resolution: {integrity: sha512-SB+cdrnu74ZIn5Ogh/8278ngEh9NEEV0vR4sJFmK04h2iZpybfbqBY0bX6+BLYWVdV12JLLI+JEFtSnYgR+mWg==} engines: {node: '>=14'} hasBin: true dev: true - /playwright/1.32.3: + /playwright@1.32.3: resolution: {integrity: sha512-h/ylpgoj6l/EjkfUDyx8cdOlfzC96itPpPe8BXacFkqpw/YsuxkpPyVbzEq4jw+bAJh5FLgh31Ljg2cR6HV3uw==} engines: {node: '>=14'} hasBin: true @@ -8878,34 +8825,23 @@ packages: playwright-core: 1.32.3 dev: true - /portfinder/1.0.32: - resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} - engines: {node: '>= 0.12.0'} - dependencies: - async: 2.6.4 - debug: 3.2.7 - mkdirp: 0.5.6 - transitivePeerDependencies: - - supports-color - dev: true - - /portfinder/1.0.32_supports-color@6.1.0: + /portfinder@1.0.32(supports-color@6.1.0): resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} dependencies: async: 2.6.4 - debug: 3.2.7_supports-color@6.1.0 + debug: 3.2.7(supports-color@6.1.0) mkdirp: 0.5.6 transitivePeerDependencies: - supports-color dev: true - /posix-character-classes/0.1.1: + /posix-character-classes@0.1.1: resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} engines: {node: '>=0.10.0'} dev: true - /postcss-load-config/3.1.4_ts-node@10.9.1: + /postcss-load-config@3.1.4(ts-node@10.9.1): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -8918,34 +8854,34 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e + ts-node: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4) yaml: 1.10.2 dev: true - /prelude-ls/1.1.2: + /prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} dev: true - /prelude-ls/1.2.1: + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} dev: true - /prettier-linter-helpers/1.0.0: + /prettier-linter-helpers@1.0.0: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} dependencies: fast-diff: 1.2.0 dev: true - /prettier/2.8.7: + /prettier@2.8.7: resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==} engines: {node: '>=10.13.0'} hasBin: true dev: true - /pretty-format/29.5.0: + /pretty-format@29.5.0: resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -8954,20 +8890,20 @@ packages: react-is: 18.2.0 dev: true - /process-nextick-args/2.0.1: + /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true - /process-warning/1.0.0: + /process-warning@1.0.0: resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} dev: true - /progress/2.0.3: + /progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} dev: true - /prompts/2.4.2: + /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} dependencies: @@ -8975,7 +8911,7 @@ packages: sisteransi: 1.0.5 dev: true - /proxy-addr/2.0.7: + /proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} dependencies: @@ -8983,81 +8919,81 @@ packages: ipaddr.js: 1.9.1 dev: true - /prr/1.0.1: + /prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} dev: true - /psl/1.9.0: + /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true - /pump/3.0.0: + /pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 dev: true - /punycode/1.3.2: + /punycode@1.3.2: resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} dev: true - /punycode/2.3.0: + /punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} dev: true - /pure-rand/6.0.1: + /pure-rand@6.0.1: resolution: {integrity: sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==} dev: true - /q/1.5.1: + /q@1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} dev: true - /qs/6.11.0: + /qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.4 dev: true - /querystring/0.2.0: + /querystring@0.2.0: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. dev: true - /querystringify/2.2.0: + /querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} dev: true - /queue-microtask/1.2.3: + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true - /quick-format-unescaped/4.0.4: + /quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} dev: true - /quick-lru/4.0.1: + /quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} dev: true - /randombytes/2.1.0: + /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 dev: true - /range-parser/1.2.1: + /range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} dev: true - /raw-body/2.5.1: + /raw-body@2.5.1: resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} engines: {node: '>= 0.8'} dependencies: @@ -9067,7 +9003,7 @@ packages: unpipe: 1.0.0 dev: true - /rc/1.2.8: + /rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true dependencies: @@ -9077,11 +9013,11 @@ packages: strip-json-comments: 2.0.1 dev: true - /react-is/18.2.0: + /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true - /read-pkg-up/7.0.1: + /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} dependencies: @@ -9090,7 +9026,7 @@ packages: type-fest: 0.8.1 dev: true - /read-pkg/5.2.0: + /read-pkg@5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} dependencies: @@ -9100,7 +9036,7 @@ packages: type-fest: 0.6.0 dev: true - /readable-stream/2.3.8: + /readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: core-util-is: 1.0.3 @@ -9112,7 +9048,7 @@ packages: util-deprecate: 1.0.2 dev: true - /readable-stream/3.6.2: + /readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} dependencies: @@ -9120,18 +9056,18 @@ packages: string_decoder: 1.3.0 util-deprecate: 1.0.2 - /readdirp/3.4.0: + /readdirp@3.4.0: resolution: {integrity: sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 - /real-require/0.1.0: + /real-require@0.1.0: resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} engines: {node: '>= 12.13.0'} dev: true - /redent/3.0.0: + /redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} dependencies: @@ -9139,28 +9075,28 @@ packages: strip-indent: 3.0.0 dev: true - /regenerate-unicode-properties/10.1.0: + /regenerate-unicode-properties@10.1.0: resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} engines: {node: '>=4'} dependencies: regenerate: 1.4.2 dev: true - /regenerate/1.4.2: + /regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} dev: true - /regenerator-runtime/0.13.11: + /regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} dev: true - /regenerator-transform/0.15.1: + /regenerator-transform@0.15.1: resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} dependencies: '@babel/runtime': 7.21.0 dev: true - /regex-not/1.0.2: + /regex-not@1.0.2: resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} engines: {node: '>=0.10.0'} dependencies: @@ -9168,7 +9104,7 @@ packages: safe-regex: 1.1.0 dev: true - /regexp.prototype.flags/1.4.3: + /regexp.prototype.flags@1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} engines: {node: '>= 0.4'} dependencies: @@ -9177,12 +9113,12 @@ packages: functions-have-names: 1.2.3 dev: true - /regexpp/3.2.0: + /regexpp@3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} dev: true - /regexpu-core/5.3.2: + /regexpu-core@5.3.2: resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} engines: {node: '>=4'} dependencies: @@ -9194,62 +9130,62 @@ packages: unicode-match-property-value-ecmascript: 2.1.0 dev: true - /registry-auth-token/4.2.2: + /registry-auth-token@4.2.2: resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==} engines: {node: '>=6.0.0'} dependencies: rc: 1.2.8 dev: true - /regjsparser/0.9.1: + /regjsparser@0.9.1: resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} hasBin: true dependencies: jsesc: 0.5.0 dev: true - /repeat-element/1.1.4: + /repeat-element@1.1.4: resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} engines: {node: '>=0.10.0'} dev: true - /repeat-string/1.6.1: + /repeat-string@1.6.1: resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} engines: {node: '>=0.10'} dev: true - /require-directory/2.1.1: + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - /require-from-string/2.0.2: + /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} dev: true - /require-main-filename/2.0.0: + /require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true - /requires-port/1.0.0: + /requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: true - /resolve-cwd/2.0.0: + /resolve-cwd@2.0.0: resolution: {integrity: sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==} engines: {node: '>=4'} dependencies: resolve-from: 3.0.0 dev: true - /resolve-cwd/3.0.0: + /resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 dev: true - /resolve-dir/1.0.1: + /resolve-dir@1.0.1: resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} engines: {node: '>=0.10.0'} dependencies: @@ -9257,29 +9193,29 @@ packages: global-modules: 1.0.0 dev: true - /resolve-from/3.0.0: + /resolve-from@3.0.0: resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} engines: {node: '>=4'} dev: true - /resolve-from/4.0.0: + /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} dev: true - /resolve-from/5.0.0: + /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} dev: true - /resolve-global/1.0.0: + /resolve-global@1.0.0: resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} engines: {node: '>=8'} dependencies: global-dirs: 0.1.1 dev: true - /resolve-path/1.4.0: + /resolve-path@1.4.0: resolution: {integrity: sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==} engines: {node: '>= 0.8'} dependencies: @@ -9287,17 +9223,17 @@ packages: path-is-absolute: 1.0.1 dev: true - /resolve-url/0.2.1: + /resolve-url@0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated dev: true - /resolve.exports/2.0.2: + /resolve.exports@2.0.2: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} dev: true - /resolve/1.22.2: + /resolve@1.22.2: resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true dependencies: @@ -9306,47 +9242,47 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /restore-cursor/3.1.0: + /restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - /ret/0.1.15: + /ret@0.1.15: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} dev: true - /retry/0.12.0: + /retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} dev: true - /reusify/1.0.4: + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rfdc/1.3.0: + /rfdc@1.3.0: resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} dev: true - /rimraf/2.7.1: + /rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true dependencies: glob: 7.2.3 dev: true - /rimraf/3.0.2: + /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 dev: true - /rollup/2.79.1: + /rollup@2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} engines: {node: '>=10.0.0'} hasBin: true @@ -9354,7 +9290,7 @@ packages: fsevents: 2.3.2 dev: true - /rollup/3.20.2: + /rollup@3.20.2: resolution: {integrity: sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true @@ -9362,29 +9298,29 @@ packages: fsevents: 2.3.2 dev: true - /run-async/2.4.1: + /run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} - /run-parallel/1.2.0: + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true - /rxjs/7.8.0: + /rxjs@7.8.0: resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: tslib: 2.5.0 - /safe-buffer/5.1.2: + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true - /safe-buffer/5.2.1: + /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - /safe-regex-test/1.0.0: + /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: call-bind: 1.0.2 @@ -9392,79 +9328,79 @@ packages: is-regex: 1.1.4 dev: true - /safe-regex/1.1.0: + /safe-regex@1.1.0: resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} dependencies: ret: 0.1.15 dev: true - /safe-stable-stringify/2.4.3: + /safe-stable-stringify@2.4.3: resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} engines: {node: '>=10'} dev: true - /safer-buffer/2.1.2: + /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - /saxes/6.0.0: + /saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} dependencies: xmlchars: 2.2.0 dev: true - /schema-utils/1.0.0: + /schema-utils@1.0.0: resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==} engines: {node: '>= 4'} dependencies: ajv: 6.12.6 - ajv-errors: 1.0.1_ajv@6.12.6 - ajv-keywords: 3.5.2_ajv@6.12.6 + ajv-errors: 1.0.1(ajv@6.12.6) + ajv-keywords: 3.5.2(ajv@6.12.6) dev: true - /schema-utils/2.7.1: + /schema-utils@2.7.1: resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} engines: {node: '>= 8.9.0'} dependencies: '@types/json-schema': 7.0.11 ajv: 6.12.6 - ajv-keywords: 3.5.2_ajv@6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) dev: true - /schema-utils/3.1.1: + /schema-utils@3.1.1: resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} engines: {node: '>= 10.13.0'} dependencies: '@types/json-schema': 7.0.11 ajv: 6.12.6 - ajv-keywords: 3.5.2_ajv@6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) dev: true - /secure-json-parse/2.7.0: + /secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} dev: true - /select-hose/2.0.0: + /select-hose@2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} dev: true - /selfsigned/1.10.14: + /selfsigned@1.10.14: resolution: {integrity: sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==} dependencies: node-forge: 0.10.0 dev: true - /semver/5.7.1: + /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true dev: true - /semver/6.3.0: + /semver@6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true dev: true - /semver/7.3.7: + /semver@7.3.7: resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} engines: {node: '>=10'} hasBin: true @@ -9472,7 +9408,7 @@ packages: lru-cache: 6.0.0 dev: true - /semver/7.4.0: + /semver@7.4.0: resolution: {integrity: sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==} engines: {node: '>=10'} hasBin: true @@ -9480,32 +9416,11 @@ packages: lru-cache: 6.0.0 dev: true - /send/0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} - 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 - transitivePeerDependencies: - - supports-color - dev: true - - /send/0.18.0_supports-color@6.1.0: + /send@0.18.0(supports-color@6.1.0): resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} dependencies: - debug: 2.6.9_supports-color@6.1.0 + debug: 2.6.9(supports-color@6.1.0) depd: 2.0.0 destroy: 1.2.0 encodeurl: 1.0.2 @@ -9522,19 +9437,19 @@ packages: - supports-color dev: true - /serialize-javascript/6.0.1: + /serialize-javascript@6.0.1: resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} dependencies: randombytes: 2.1.0 dev: true - /serve-index/1.9.1_supports-color@6.1.0: + /serve-index@1.9.1(supports-color@6.1.0): resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} engines: {node: '>= 0.8.0'} dependencies: accepts: 1.3.8 batch: 0.6.1 - debug: 2.6.9_supports-color@6.1.0 + debug: 2.6.9(supports-color@6.1.0) escape-html: 1.0.3 http-errors: 1.6.3 mime-types: 2.1.35 @@ -9543,35 +9458,23 @@ packages: - supports-color dev: true - /serve-static/1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} - dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.18.0 - transitivePeerDependencies: - - supports-color - dev: true - - /serve-static/1.15.0_supports-color@6.1.0: + /serve-static@1.15.0(supports-color@6.1.0): resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} dependencies: encodeurl: 1.0.2 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.18.0_supports-color@6.1.0 + send: 0.18.0(supports-color@6.1.0) transitivePeerDependencies: - supports-color dev: true - /set-blocking/2.0.0: + /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /set-value/2.0.1: + /set-value@2.0.1: resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} engines: {node: '>=0.10.0'} dependencies: @@ -9581,46 +9484,46 @@ packages: split-string: 3.1.0 dev: true - /setprototypeof/1.1.0: + /setprototypeof@1.1.0: resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} dev: true - /setprototypeof/1.2.0: + /setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} dev: true - /shallow-clone/3.0.1: + /shallow-clone@3.0.1: resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} engines: {node: '>=8'} dependencies: kind-of: 6.0.3 dev: true - /shebang-command/1.2.0: + /shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 dev: true - /shebang-command/2.0.0: + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 dev: true - /shebang-regex/1.0.0: + /shebang-regex@1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} dev: true - /shebang-regex/3.0.0: + /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} dev: true - /side-channel/1.0.4: + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 @@ -9628,25 +9531,25 @@ packages: object-inspect: 1.12.3 dev: true - /signal-exit/3.0.7: + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - /simple-git-hooks/2.8.1: + /simple-git-hooks@2.8.1: resolution: {integrity: sha512-DYpcVR1AGtSfFUNzlBdHrQGPsOhuuEJ/FkmPOOlFysP60AHd3nsEpkGq/QEOdtUyT1Qhk7w9oLmFoMG+75BDog==} hasBin: true requiresBuild: true dev: true - /sisteransi/1.0.5: + /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: true - /slash/3.0.0: + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} dev: true - /slice-ansi/3.0.0: + /slice-ansi@3.0.0: resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} engines: {node: '>=8'} dependencies: @@ -9655,7 +9558,7 @@ packages: is-fullwidth-code-point: 3.0.0 dev: true - /slice-ansi/4.0.0: + /slice-ansi@4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} dependencies: @@ -9664,7 +9567,7 @@ packages: is-fullwidth-code-point: 3.0.0 dev: true - /slice-ansi/5.0.0: + /slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} dependencies: @@ -9672,7 +9575,7 @@ packages: is-fullwidth-code-point: 4.0.0 dev: true - /snapdragon-node/2.1.1: + /snapdragon-node@2.1.1: resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} engines: {node: '>=0.10.0'} dependencies: @@ -9681,19 +9584,19 @@ packages: snapdragon-util: 3.0.1 dev: true - /snapdragon-util/3.0.1: + /snapdragon-util@3.0.1: resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /snapdragon/0.8.2_supports-color@6.1.0: + /snapdragon@0.8.2(supports-color@6.1.0): resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} engines: {node: '>=0.10.0'} dependencies: base: 0.11.2 - debug: 2.6.9_supports-color@6.1.0 + debug: 2.6.9(supports-color@6.1.0) define-property: 0.2.5 extend-shallow: 2.0.1 map-cache: 0.2.2 @@ -9704,7 +9607,7 @@ packages: - supports-color dev: true - /socket.io-adapter/2.5.2: + /socket.io-adapter@2.5.2: resolution: {integrity: sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==} dependencies: ws: 8.11.0 @@ -9712,12 +9615,12 @@ packages: - bufferutil - utf-8-validate - /socket.io-client/4.6.1: + /socket.io-client@4.6.1: resolution: {integrity: sha512-5UswCV6hpaRsNg5kkEHVcbBIXEYoVbMQaHJBXJCyEQ+CiFPV1NIOY0XOFWG4XR4GZcB8Kn6AsRs/9cy9TbqVMQ==} engines: {node: '>=10.0.0'} dependencies: '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) engine.io-client: 6.4.0 socket.io-parser: 4.2.2 transitivePeerDependencies: @@ -9726,22 +9629,22 @@ packages: - utf-8-validate dev: false - /socket.io-parser/4.2.2: + /socket.io-parser@4.2.2: resolution: {integrity: sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==} engines: {node: '>=10.0.0'} dependencies: '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) transitivePeerDependencies: - supports-color - /socket.io/4.6.1: + /socket.io@4.6.1: resolution: {integrity: sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==} engines: {node: '>=10.0.0'} dependencies: accepts: 1.3.8 base64id: 2.0.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) engine.io: 6.4.1 socket.io-adapter: 2.5.2 socket.io-parser: 4.2.2 @@ -9750,11 +9653,11 @@ packages: - supports-color - utf-8-validate - /sockjs-client/1.6.1_supports-color@6.1.0: + /sockjs-client@1.6.1(supports-color@6.1.0): resolution: {integrity: sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==} engines: {node: '>=12'} dependencies: - debug: 3.2.7_supports-color@6.1.0 + debug: 3.2.7(supports-color@6.1.0) eventsource: 2.0.2 faye-websocket: 0.11.4 inherits: 2.0.4 @@ -9763,7 +9666,7 @@ packages: - supports-color dev: true - /sockjs/0.3.24: + /sockjs@0.3.24: resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} dependencies: faye-websocket: 0.11.4 @@ -9771,17 +9674,17 @@ packages: websocket-driver: 0.7.4 dev: true - /sonic-boom/2.8.0: + /sonic-boom@2.8.0: resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} dependencies: atomic-sleep: 1.0.0 dev: true - /source-list-map/2.0.1: + /source-list-map@2.0.1: resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} dev: true - /source-map-resolve/0.5.3: + /source-map-resolve@0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} deprecated: See https://github.com/lydell/source-map-resolve#deprecated dependencies: @@ -9792,72 +9695,72 @@ packages: urix: 0.1.0 dev: true - /source-map-support/0.5.13: + /source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: true - /source-map-support/0.5.21: + /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: true - /source-map-url/0.4.1: + /source-map-url@0.4.1: resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} deprecated: See https://github.com/lydell/source-map-url#deprecated dev: true - /source-map/0.5.7: + /source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} dev: true - /source-map/0.6.1: + /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} dev: true - /source-map/0.8.0-beta.0: + /source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} dependencies: whatwg-url: 7.1.0 dev: true - /spawn-error-forwarder/1.0.0: + /spawn-error-forwarder@1.0.0: resolution: {integrity: sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==} dev: true - /spdx-correct/3.2.0: + /spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.13 dev: true - /spdx-exceptions/2.3.0: + /spdx-exceptions@2.3.0: resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} dev: true - /spdx-expression-parse/3.0.1: + /spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 spdx-license-ids: 3.0.13 dev: true - /spdx-license-ids/3.0.13: + /spdx-license-ids@3.0.13: resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} dev: true - /spdy-transport/3.0.0_supports-color@6.1.0: + /spdy-transport@3.0.0(supports-color@6.1.0): resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: - debug: 4.3.4_supports-color@6.1.0 + debug: 4.3.4(supports-color@6.1.0) detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -9867,55 +9770,55 @@ packages: - supports-color dev: true - /spdy/4.0.2_supports-color@6.1.0: + /spdy@4.0.2(supports-color@6.1.0): resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} dependencies: - debug: 4.3.4_supports-color@6.1.0 + debug: 4.3.4(supports-color@6.1.0) handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 - spdy-transport: 3.0.0_supports-color@6.1.0 + spdy-transport: 3.0.0(supports-color@6.1.0) transitivePeerDependencies: - supports-color dev: true - /split-string/3.1.0: + /split-string@3.1.0: resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} engines: {node: '>=0.10.0'} dependencies: extend-shallow: 3.0.2 dev: true - /split2/1.0.0: + /split2@1.0.0: resolution: {integrity: sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==} dependencies: through2: 2.0.5 dev: true - /split2/3.2.2: + /split2@3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: readable-stream: 3.6.2 dev: true - /split2/4.2.0: + /split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} dev: true - /sprintf-js/1.0.3: + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true - /stack-utils/2.0.6: + /stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 dev: true - /static-extend/0.1.2: + /static-extend@0.1.2: resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} engines: {node: '>=0.10.0'} dependencies: @@ -9923,46 +9826,46 @@ packages: object-copy: 0.1.0 dev: true - /statuses/1.5.0: + /statuses@1.5.0: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} dev: true - /statuses/2.0.1: + /statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - /stream-combiner2/1.1.1: + /stream-combiner2@1.1.1: resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} dependencies: duplexer2: 0.1.4 readable-stream: 2.3.8 dev: true - /stream-read-all/3.0.1: + /stream-read-all@3.0.1: resolution: {integrity: sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==} engines: {node: '>=10'} dev: true - /stream-shift/1.0.1: + /stream-shift@1.0.1: resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} dev: true - /streamsearch/1.1.0: + /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} dev: true - /strict-event-emitter/0.5.0: + /strict-event-emitter@0.5.0: resolution: {integrity: sha512-sqnMpVJLSB3daNO6FcvsEk4Mq5IJeAwDeH80DP1S8+pgxrF6yZnE1+VeapesGled7nEcIkz1Ax87HzaIy+02kA==} dev: false - /string-argv/0.3.1: + /string-argv@0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} engines: {node: '>=0.6.19'} dev: true - /string-length/4.0.2: + /string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} dependencies: @@ -9970,7 +9873,7 @@ packages: strip-ansi: 6.0.1 dev: true - /string-width/3.1.0: + /string-width@3.1.0: resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} engines: {node: '>=6'} dependencies: @@ -9979,7 +9882,7 @@ packages: strip-ansi: 5.2.0 dev: true - /string-width/4.2.3: + /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} dependencies: @@ -9987,7 +9890,7 @@ packages: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string-width/5.1.2: + /string-width@5.1.2: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} dependencies: @@ -9996,7 +9899,7 @@ packages: strip-ansi: 7.0.1 dev: true - /string.prototype.trim/1.2.7: + /string.prototype.trim@1.2.7: resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} engines: {node: '>= 0.4'} dependencies: @@ -10005,7 +9908,7 @@ packages: es-abstract: 1.21.2 dev: true - /string.prototype.trimend/1.0.6: + /string.prototype.trimend@1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 @@ -10013,7 +9916,7 @@ packages: es-abstract: 1.21.2 dev: true - /string.prototype.trimstart/1.0.6: + /string.prototype.trimstart@1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 @@ -10021,82 +9924,82 @@ packages: es-abstract: 1.21.2 dev: true - /string_decoder/1.1.1: + /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 dev: true - /string_decoder/1.3.0: + /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 - /strip-ansi/3.0.1: + /strip-ansi@3.0.1: resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 dev: true - /strip-ansi/5.2.0: + /strip-ansi@5.2.0: resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} engines: {node: '>=6'} dependencies: ansi-regex: 4.1.1 dev: true - /strip-ansi/6.0.1: + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 - /strip-ansi/7.0.1: + /strip-ansi@7.0.1: resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 dev: true - /strip-bom/4.0.0: + /strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} dev: true - /strip-eof/1.0.0: + /strip-eof@1.0.0: resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} engines: {node: '>=0.10.0'} dev: true - /strip-final-newline/2.0.0: + /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} dev: true - /strip-final-newline/3.0.0: + /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} dev: true - /strip-indent/3.0.0: + /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} dependencies: min-indent: 1.0.1 dev: true - /strip-json-comments/2.0.1: + /strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} dev: true - /strip-json-comments/3.1.1: + /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} dev: true - /sucrase/3.32.0: + /sucrase@3.32.0: resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} engines: {node: '>=8'} hasBin: true @@ -10110,43 +10013,42 @@ packages: ts-interface-checker: 0.1.13 dev: true - /supports-color/5.5.0: + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} dependencies: has-flag: 3.0.0 dev: true - /supports-color/6.1.0: + /supports-color@6.1.0: resolution: {integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==} engines: {node: '>=6'} dependencies: has-flag: 3.0.0 - dev: true - /supports-color/7.2.0: + /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - /supports-color/8.1.1: + /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 dev: true - /supports-preserve-symlinks-flag/1.0.0: + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true - /symbol-tree/3.2.4: + /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true - /table-layout/3.0.2: + /table-layout@3.0.2: resolution: {integrity: sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==} engines: {node: '>=12.17'} hasBin: true @@ -10160,7 +10062,7 @@ packages: wordwrapjs: 5.1.0 dev: true - /table/6.8.1: + /table@6.8.1: resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} engines: {node: '>=10.0.0'} dependencies: @@ -10171,12 +10073,12 @@ packages: strip-ansi: 6.0.1 dev: true - /tapable/2.2.1: + /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} dev: true - /terser-webpack-plugin/5.3.7_4mbh3ks6vevmq3w4sbjme7looe: + /terser-webpack-plugin@5.3.7(@swc/core@1.3.49)(esbuild@0.17.16)(webpack@5.79.0): resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -10199,10 +10101,10 @@ packages: schema-utils: 3.1.1 serialize-javascript: 6.0.1 terser: 5.16.9 - webpack: 5.79.0_57233mj27fjz7synoeubptyy7e + webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) dev: true - /terser/5.16.9: + /terser@5.16.9: resolution: {integrity: sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg==} engines: {node: '>=10'} hasBin: true @@ -10213,7 +10115,7 @@ packages: source-map-support: 0.5.21 dev: true - /test-exclude/6.0.0: + /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} dependencies: @@ -10222,77 +10124,77 @@ packages: minimatch: 3.1.2 dev: true - /text-extensions/1.9.0: + /text-extensions@1.9.0: resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} engines: {node: '>=0.10'} dev: true - /text-table/0.2.0: + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /thenify-all/1.6.0: + /thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 dev: true - /thenify/3.3.1: + /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 dev: true - /thread-stream/0.15.2: + /thread-stream@0.15.2: resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} dependencies: real-require: 0.1.0 dev: true - /through/2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - - /through2/2.0.5: + /through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: readable-stream: 2.3.8 xtend: 4.0.2 dev: true - /through2/4.0.2: + /through2@4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: readable-stream: 3.6.2 dev: true - /thunky/1.1.0: + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + /thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} dev: true - /tmp/0.0.33: + /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 - /tmpl/1.0.5: + /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true - /to-fast-properties/2.0.0: + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} dev: true - /to-object-path/0.3.0: + /to-object-path@0.3.0: resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /to-regex-range/2.1.1: + /to-regex-range@2.1.1: resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} engines: {node: '>=0.10.0'} dependencies: @@ -10300,13 +10202,13 @@ packages: repeat-string: 1.6.1 dev: true - /to-regex-range/5.0.1: + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - /to-regex/3.0.2: + /to-regex@3.0.2: resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} engines: {node: '>=0.10.0'} dependencies: @@ -10316,12 +10218,12 @@ packages: safe-regex: 1.1.0 dev: true - /toidentifier/1.0.1: + /toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} dev: true - /tough-cookie/4.1.2: + /tough-cookie@4.1.2: resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} engines: {node: '>=6'} dependencies: @@ -10331,41 +10233,41 @@ packages: url-parse: 1.5.10 dev: true - /tr46/0.0.3: + /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - /tr46/1.0.1: + /tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} dependencies: punycode: 2.3.0 dev: true - /tr46/3.0.0: + /tr46@3.0.0: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} dependencies: punycode: 2.3.0 dev: true - /traverse/0.6.7: + /traverse@0.6.7: resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} dev: true - /tree-kill/1.2.2: + /tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true dev: true - /trim-newlines/3.0.1: + /trim-newlines@3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} dev: true - /ts-interface-checker/0.1.13: + /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-node/10.9.1_faublg25f7qpbcz6w4cw6yyzse: + /ts-node@10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@4.9.5): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -10397,7 +10299,7 @@ packages: yn: 3.1.1 dev: true - /ts-node/10.9.1_l7nicavc6cghsvyjdpeszw7e5e: + /ts-node@10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -10429,19 +10331,19 @@ packages: yn: 3.1.1 dev: true - /tslib/1.14.1: + /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib/2.5.0: + /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - /tsscmp/1.0.6: + /tsscmp@1.0.6: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} dev: true - /tsup/6.7.0_kpvxmbmtx6ydv4unklsjw2abeq: + /tsup@6.7.0(@swc/core@1.3.49)(ts-node@10.9.1)(typescript@5.0.4): resolution: {integrity: sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==} engines: {node: '>=14.18'} hasBin: true @@ -10458,15 +10360,15 @@ packages: optional: true dependencies: '@swc/core': 1.3.49 - bundle-require: 4.0.1_esbuild@0.17.16 + bundle-require: 4.0.1(esbuild@0.17.16) cac: 6.7.14 chokidar: 3.4.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) esbuild: 0.17.16 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 3.1.4_ts-node@10.9.1 + postcss-load-config: 3.1.4(ts-node@10.9.1) resolve-from: 5.0.0 rollup: 3.20.2 source-map: 0.8.0-beta.0 @@ -10478,7 +10380,7 @@ packages: - ts-node dev: true - /tsutils/3.21.0_typescript@5.0.4: + /tsutils@3.21.0(typescript@5.0.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: @@ -10488,55 +10390,55 @@ packages: typescript: 5.0.4 dev: true - /type-check/0.3.2: + /type-check@0.3.2: resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 dev: true - /type-check/0.4.0: + /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 dev: true - /type-detect/4.0.8: + /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} dev: true - /type-fest/0.18.1: + /type-fest@0.18.1: resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} engines: {node: '>=10'} dev: true - /type-fest/0.20.2: + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} dev: true - /type-fest/0.21.3: + /type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - /type-fest/0.6.0: + /type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} dev: true - /type-fest/0.8.1: + /type-fest@0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} dev: true - /type-fest/2.19.0: + /type-fest@2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} dev: false - /type-is/1.6.18: + /type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} dependencies: @@ -10544,7 +10446,7 @@ packages: mime-types: 2.1.35 dev: true - /typed-array-length/1.0.4: + /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: call-bind: 1.0.2 @@ -10552,29 +10454,29 @@ packages: is-typed-array: 1.1.10 dev: true - /typescript/4.9.5: + /typescript@4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} hasBin: true dev: true - /typescript/5.0.4: + /typescript@5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} hasBin: true dev: true - /typical/4.0.0: + /typical@4.0.0: resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} engines: {node: '>=8'} dev: true - /typical/7.1.1: + /typical@7.1.1: resolution: {integrity: sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==} engines: {node: '>=12.17'} dev: true - /unbox-primitive/1.0.2: + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: call-bind: 1.0.2 @@ -10583,19 +10485,19 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /undici/5.21.2: + /undici@5.21.2: resolution: {integrity: sha512-f6pTQ9RF4DQtwoWSaC42P/NKlUjvezVvd9r155ohqkwFNRyBKM3f3pcty3ouusefNRyM25XhIQEbeQ46sZDJfQ==} engines: {node: '>=12.18'} dependencies: busboy: 1.6.0 dev: true - /unicode-canonical-property-names-ecmascript/2.0.0: + /unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} dev: true - /unicode-match-property-ecmascript/2.0.0: + /unicode-match-property-ecmascript@2.0.0: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} dependencies: @@ -10603,17 +10505,17 @@ packages: unicode-property-aliases-ecmascript: 2.1.0 dev: true - /unicode-match-property-value-ecmascript/2.1.0: + /unicode-match-property-value-ecmascript@2.1.0: resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} engines: {node: '>=4'} dev: true - /unicode-property-aliases-ecmascript/2.1.0: + /unicode-property-aliases-ecmascript@2.1.0: resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} engines: {node: '>=4'} dev: true - /union-value/1.0.1: + /union-value@1.0.1: resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} engines: {node: '>=0.10.0'} dependencies: @@ -10623,22 +10525,22 @@ packages: set-value: 2.0.1 dev: true - /universalify/0.2.0: + /universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} dev: true - /universalify/2.0.0: + /universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} dev: true - /unpipe/1.0.0: + /unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} dev: true - /unset-value/1.0.0: + /unset-value@1.0.0: resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} engines: {node: '>=0.10.0'} dependencies: @@ -10646,7 +10548,7 @@ packages: isobject: 3.0.1 dev: true - /update-browserslist-db/1.0.10_browserslist@4.21.5: + /update-browserslist-db@1.0.10(browserslist@4.21.5): resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} hasBin: true peerDependencies: @@ -10657,18 +10559,18 @@ packages: picocolors: 1.0.0 dev: true - /uri-js/4.4.1: + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.0 dev: true - /urix/0.1.0: + /urix@0.1.0: resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} deprecated: Please see https://github.com/lydell/urix#deprecated dev: true - /url-loader/4.1.1_webpack@5.79.0: + /url-loader@4.1.1(webpack@5.79.0): resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -10681,32 +10583,32 @@ packages: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.1.1 - webpack: 5.79.0_57233mj27fjz7synoeubptyy7e + webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) dev: true - /url-parse/1.5.10: + /url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} dependencies: querystringify: 2.2.0 requires-port: 1.0.0 dev: true - /url/0.11.0: + /url@0.11.0: resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} dependencies: punycode: 1.3.2 querystring: 0.2.0 dev: true - /use/3.1.1: + /use@3.1.1: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} engines: {node: '>=0.10.0'} dev: true - /util-deprecate/1.0.2: + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - /util.promisify/1.1.1: + /util.promisify@1.1.1: resolution: {integrity: sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==} dependencies: call-bind: 1.0.2 @@ -10716,31 +10618,31 @@ packages: object.getownpropertydescriptors: 2.1.5 dev: true - /utils-merge/1.0.1: + /utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} dev: true - /uuid/3.4.0: + /uuid@3.4.0: resolution: {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. hasBin: true dev: true - /uuid/8.3.2: + /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true dev: true - /v8-compile-cache-lib/3.0.1: + /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /v8-compile-cache/2.3.0: + /v8-compile-cache@2.3.0: resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true - /v8-to-istanbul/9.1.0: + /v8-to-istanbul@9.1.0: resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} dependencies: @@ -10749,31 +10651,31 @@ packages: convert-source-map: 1.9.0 dev: true - /validate-npm-package-license/3.0.4: + /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 dev: true - /vary/1.1.2: + /vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - /w3c-xmlserializer/4.0.0: + /w3c-xmlserializer@4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} dependencies: xml-name-validator: 4.0.0 dev: true - /walker/1.0.8: + /walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 dev: true - /watchpack/2.4.0: + /watchpack@2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} dependencies: @@ -10781,35 +10683,35 @@ packages: graceful-fs: 4.2.11 dev: true - /wbuf/1.7.3: + /wbuf@1.7.3: resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} dependencies: minimalistic-assert: 1.0.1 dev: true - /wcwidth/1.0.1: + /wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 - /web-streams-polyfill/4.0.0-beta.3: + /web-streams-polyfill@4.0.0-beta.3: resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} engines: {node: '>= 14'} dev: false - /webidl-conversions/3.0.1: + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - /webidl-conversions/4.0.2: + /webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} dev: true - /webidl-conversions/7.0.0: + /webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} dev: true - /webpack-dev-middleware/3.7.3_webpack@5.79.0: + /webpack-dev-middleware@3.7.3(webpack@5.79.0): resolution: {integrity: sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==} engines: {node: '>= 6'} peerDependencies: @@ -10819,11 +10721,11 @@ packages: mime: 2.6.0 mkdirp: 0.5.6 range-parser: 1.2.1 - webpack: 5.79.0_57233mj27fjz7synoeubptyy7e + webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) webpack-log: 2.0.0 dev: true - /webpack-dev-server/3.11.3_webpack@5.79.0: + /webpack-dev-server@3.11.3(webpack@5.79.0): resolution: {integrity: sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==} engines: {node: '>= 6.11.5'} hasBin: true @@ -10837,13 +10739,13 @@ packages: ansi-html-community: 0.0.8 bonjour: 3.5.0 chokidar: 3.4.1 - compression: 1.7.4_supports-color@6.1.0 + compression: 1.7.4(supports-color@6.1.0) connect-history-api-fallback: 1.6.0 - debug: 4.3.4_supports-color@6.1.0 + debug: 4.3.4(supports-color@6.1.0) del: 4.1.1 - express: 4.18.2_supports-color@6.1.0 + express: 4.18.2(supports-color@6.1.0) html-entities: 1.4.0 - http-proxy-middleware: 0.19.1_tmpgdztspuwvsxzgjkhoqk7duq + http-proxy-middleware: 0.19.1(debug@4.3.4)(supports-color@6.1.0) import-local: 2.0.0 internal-ip: 4.3.0 ip: 1.1.8 @@ -10852,19 +10754,19 @@ packages: loglevel: 1.8.1 opn: 5.5.0 p-retry: 3.0.1 - portfinder: 1.0.32_supports-color@6.1.0 + portfinder: 1.0.32(supports-color@6.1.0) schema-utils: 1.0.0 selfsigned: 1.10.14 semver: 6.3.0 - serve-index: 1.9.1_supports-color@6.1.0 + serve-index: 1.9.1(supports-color@6.1.0) sockjs: 0.3.24 - sockjs-client: 1.6.1_supports-color@6.1.0 - spdy: 4.0.2_supports-color@6.1.0 + sockjs-client: 1.6.1(supports-color@6.1.0) + spdy: 4.0.2(supports-color@6.1.0) strip-ansi: 3.0.1 supports-color: 6.1.0 url: 0.11.0 - webpack: 5.79.0_57233mj27fjz7synoeubptyy7e - webpack-dev-middleware: 3.7.3_webpack@5.79.0 + webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) + webpack-dev-middleware: 3.7.3(webpack@5.79.0) webpack-log: 2.0.0 ws: 6.2.2 yargs: 13.3.2 @@ -10873,16 +10775,16 @@ packages: - utf-8-validate dev: true - /webpack-http-server/0.5.0_57233mj27fjz7synoeubptyy7e: + /webpack-http-server@0.5.0(@swc/core@1.3.49)(esbuild@0.17.16): resolution: {integrity: sha512-kyewxAnzmDuZxe09fn/Bb0PeEnaDxHChYKFVsMy4oeBUs9Cyv2j1uEgzQJ7ljPFexLU8ongUS4i4O+e22CeBZQ==} dependencies: '@types/express': 4.17.17 '@types/mustache': 4.2.2 - express: 4.18.2 + express: 4.18.2(supports-color@6.1.0) memfs: 3.5.0 mustache: 4.2.0 outvariant: 1.4.0 - webpack: 5.79.0_57233mj27fjz7synoeubptyy7e + webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) transitivePeerDependencies: - '@swc/core' - esbuild @@ -10891,7 +10793,7 @@ packages: - webpack-cli dev: true - /webpack-log/2.0.0: + /webpack-log@2.0.0: resolution: {integrity: sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==} engines: {node: '>= 6'} dependencies: @@ -10899,7 +10801,7 @@ packages: uuid: 3.4.0 dev: true - /webpack-merge/5.8.0: + /webpack-merge@5.8.0: resolution: {integrity: sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==} engines: {node: '>=10.0.0'} dependencies: @@ -10907,19 +10809,19 @@ packages: wildcard: 2.0.0 dev: true - /webpack-sources/1.4.3: + /webpack-sources@1.4.3: resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} dependencies: source-list-map: 2.0.1 source-map: 0.6.1 dev: true - /webpack-sources/3.2.3: + /webpack-sources@3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} dev: true - /webpack/5.79.0_57233mj27fjz7synoeubptyy7e: + /webpack@5.79.0(@swc/core@1.3.49)(esbuild@0.17.16): resolution: {integrity: sha512-3mN4rR2Xq+INd6NnYuL9RC9GAmc1ROPKJoHhrZ4pAjdMFEkJJWrsPw8o2JjCIyQyTu7rTXYn4VG6OpyB3CobZg==} engines: {node: '>=10.13.0'} hasBin: true @@ -10935,7 +10837,7 @@ packages: '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 acorn: 8.8.2 - acorn-import-assertions: 1.8.0_acorn@8.8.2 + acorn-import-assertions: 1.8.0(acorn@8.8.2) browserslist: 4.21.5 chrome-trace-event: 1.0.3 enhanced-resolve: 5.12.0 @@ -10950,7 +10852,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.1.1 tapable: 2.2.1 - terser-webpack-plugin: 5.3.7_4mbh3ks6vevmq3w4sbjme7looe + terser-webpack-plugin: 5.3.7(@swc/core@1.3.49)(esbuild@0.17.16)(webpack@5.79.0) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -10959,7 +10861,7 @@ packages: - uglify-js dev: true - /websocket-driver/0.7.4: + /websocket-driver@0.7.4: resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} engines: {node: '>=0.8.0'} dependencies: @@ -10968,24 +10870,24 @@ packages: websocket-extensions: 0.1.4 dev: true - /websocket-extensions/0.1.4: + /websocket-extensions@0.1.4: resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} engines: {node: '>=0.8.0'} dev: true - /whatwg-encoding/2.0.0: + /whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} dependencies: iconv-lite: 0.6.3 dev: true - /whatwg-mimetype/3.0.0: + /whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} dev: true - /whatwg-url/11.0.0: + /whatwg-url@11.0.0: resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} engines: {node: '>=12'} dependencies: @@ -10993,13 +10895,13 @@ packages: webidl-conversions: 7.0.0 dev: true - /whatwg-url/5.0.0: + /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - /whatwg-url/7.1.0: + /whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} dependencies: lodash.sortby: 4.7.0 @@ -11007,7 +10909,7 @@ packages: webidl-conversions: 4.0.2 dev: true - /which-boxed-primitive/1.0.2: + /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 @@ -11017,11 +10919,11 @@ packages: is-symbol: 1.0.4 dev: true - /which-module/2.0.0: + /which-module@2.0.0: resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} dev: true - /which-typed-array/1.1.9: + /which-typed-array@1.1.9: resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} engines: {node: '>= 0.4'} dependencies: @@ -11033,14 +10935,14 @@ packages: is-typed-array: 1.1.10 dev: true - /which/1.3.1: + /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true dependencies: isexe: 2.0.0 dev: true - /which/2.0.2: + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true @@ -11048,21 +10950,21 @@ packages: isexe: 2.0.0 dev: true - /wildcard/2.0.0: + /wildcard@2.0.0: resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==} dev: true - /word-wrap/1.2.3: + /word-wrap@1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true - /wordwrapjs/5.1.0: + /wordwrapjs@5.1.0: resolution: {integrity: sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==} engines: {node: '>=12.17'} dev: true - /wrap-ansi/5.1.0: + /wrap-ansi@5.1.0: resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} engines: {node: '>=6'} dependencies: @@ -11071,7 +10973,7 @@ packages: strip-ansi: 5.2.0 dev: true - /wrap-ansi/6.2.0: + /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} dependencies: @@ -11080,7 +10982,7 @@ packages: strip-ansi: 6.0.1 dev: true - /wrap-ansi/7.0.0: + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} dependencies: @@ -11088,11 +10990,11 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 - /wrappy/1.0.2: + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /write-file-atomic/4.0.2: + /write-file-atomic@4.0.2: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: @@ -11100,7 +11002,7 @@ packages: signal-exit: 3.0.7 dev: true - /ws/6.2.2: + /ws@6.2.2: resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} peerDependencies: bufferutil: ^4.0.1 @@ -11114,7 +11016,7 @@ packages: async-limiter: 1.0.1 dev: true - /ws/7.5.9: + /ws@7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} peerDependencies: @@ -11127,7 +11029,7 @@ packages: optional: true dev: true - /ws/8.11.0: + /ws@8.11.0: resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} engines: {node: '>=10.0.0'} peerDependencies: @@ -11139,7 +11041,7 @@ packages: utf-8-validate: optional: true - /ws/8.13.0: + /ws@8.13.0: resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} engines: {node: '>=10.0.0'} peerDependencies: @@ -11152,74 +11054,74 @@ packages: optional: true dev: true - /xml-name-validator/4.0.0: + /xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} dev: true - /xmlchars/2.2.0: + /xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true - /xmlhttprequest-ssl/2.0.0: + /xmlhttprequest-ssl@2.0.0: resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} engines: {node: '>=0.4.0'} dev: false - /xtend/4.0.2: + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} dev: true - /y18n/4.0.3: + /y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} dev: true - /y18n/5.0.8: + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - /yallist/3.1.1: + /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true - /yallist/4.0.0: + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true - /yaml/1.10.2: + /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} dev: true - /yaml/2.2.1: + /yaml@2.2.1: resolution: {integrity: sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==} engines: {node: '>= 14'} dev: true - /yargs-parser/10.1.0: + /yargs-parser@10.1.0: resolution: {integrity: sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==} dependencies: camelcase: 4.1.0 dev: true - /yargs-parser/13.1.2: + /yargs-parser@13.1.2: resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} dependencies: camelcase: 5.3.1 decamelize: 1.2.0 dev: true - /yargs-parser/20.2.9: + /yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} dev: true - /yargs-parser/21.1.1: + /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - /yargs/13.3.2: + /yargs@13.3.2: resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==} dependencies: cliui: 5.0.0 @@ -11234,7 +11136,7 @@ packages: yargs-parser: 13.1.2 dev: true - /yargs/17.7.1: + /yargs@17.7.1: resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} engines: {node: '>=12'} dependencies: @@ -11246,17 +11148,17 @@ packages: y18n: 5.0.8 yargs-parser: 21.1.1 - /ylru/1.3.2: + /ylru@1.3.2: resolution: {integrity: sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==} engines: {node: '>= 4.0.0'} dev: true - /yn/3.1.1: + /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} dev: true - /yocto-queue/0.1.0: + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 4969ff85a..f62eb72b6 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -18,13 +18,17 @@ import { SetupServer } from './glossary' import { SYNC_SERVER_URL, SyncServerEventsMap, - syncServerResolver, -} from './useRemoteHandler' + createRemoteServerResolver, +} from './setupRemoteServer' const DEFAULT_LISTEN_OPTIONS: RequiredDeep = { onUnhandledRequest: 'warn', } +export type InterceptorsList = Array<{ + new (): Interceptor +}> + export class SetupServerApi extends SetupApi implements SetupServer @@ -36,9 +40,7 @@ export class SetupServerApi private resolvedOptions: RequiredDeep constructor( - interceptors: Array<{ - new (): Interceptor - }>, + interceptors: InterceptorsList, ...handlers: Array ) { super(...handlers) @@ -49,7 +51,7 @@ export class SetupServerApi }) this.resolvedOptions = {} as RequiredDeep - this.syncSocketPromise = this.connectToSyncServer() + this.syncSocketPromise = this.createSyncServerConnection() this.init() } @@ -63,7 +65,7 @@ export class SetupServerApi request, requestId, [ - syncServerResolver({ + createRemoteServerResolver({ requestId, socketPromise: this.syncSocketPromise, }), @@ -142,7 +144,7 @@ ${`${pragma} ${header}`} this.dispose() } - private syncSocketPromise: Promise | null> + private syncSocketPromise: Promise | undefined> private async pingSyncServer(): Promise { return fetch(SYNC_SERVER_URL, { @@ -153,13 +155,14 @@ ${`${pragma} ${header}`} ) } - private async connectToSyncServer(): Promise { + private async createSyncServerConnection(): Promise { if (!(await this.pingSyncServer())) { - return Promise.resolve(null) + return Promise.resolve(undefined) } - const connectionPromise = - new DeferredPromise | null>() + const connectionPromise = new DeferredPromise< + Socket | undefined + >() const socket = io(SYNC_SERVER_URL, { timeout: 200, reconnection: false, @@ -172,8 +175,8 @@ ${`${pragma} ${header}`} connectionPromise.resolve(socket) }) - socket.io.on('error', (error) => { - connectionPromise.resolve(null) + socket.io.on('error', () => { + connectionPromise.resolve(undefined) }) return connectionPromise diff --git a/src/node/index.ts b/src/node/index.ts index 40e28259a..e1bd6e4b9 100644 --- a/src/node/index.ts +++ b/src/node/index.ts @@ -1,4 +1,4 @@ export type { SetupServer } from './glossary' export { SetupServerApi } from './SetupServerApi' export { setupServer } from './setupServer' -export { useRemoteHandlers } from './useRemoteHandler' +export * from './setupRemoteServer' diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts new file mode 100644 index 000000000..14a6fce9f --- /dev/null +++ b/src/node/setupRemoteServer.ts @@ -0,0 +1,212 @@ +import * as http from 'http' +import { invariant } from 'outvariant' +import { Server as WebSocketServer } from 'socket.io' +import type { Socket } from 'socket.io-client' +import { Emitter } from 'strict-event-emitter' +import { DeferredPromise } from '@open-draft/deferred-promise' +import { + LifeCycleEventsMap, + RequestHandler, + SetupApi, + handleRequest, + rest, +} from '~/core' +import { + SerializedRequest, + SerializedResponse, + deserializeRequest, + deserializeResponse, + serializeRequest, + serializeResponse, +} from '~/core/utils/request/serializeUtils' +import { LifeCycleEventEmitter } from '~/core/sharedOptions' + +export const SYNC_SERVER_URL = new URL('http://localhost:50222') + +export function setupRemoteServer(...handlers: Array) { + return new SetupRemoteServerApi(...handlers) +} + +export interface SetupRemoteServer { + listen(): Promise + close(): Promise + + events: LifeCycleEventEmitter +} + +export interface SyncServerEventsMap { + request( + serializedRequest: SerializedRequest, + requestId: string, + ): Promise | void + response(serializedResponse?: SerializedResponse): Promise | void +} + +declare global { + var syncServer: WebSocketServer | undefined +} + +export class SetupRemoteServerApi + extends SetupApi + implements SetupRemoteServer +{ + protected handlers: Array + protected emitter: Emitter + + constructor(...handlers: Array) { + super(...handlers) + + this.handlers = handlers + this.emitter = new Emitter() + } + + public async listen(): Promise { + const server = await createSyncServer() + + server.on('connection', (socket) => { + socket.on('request', async (serializedRequest, requestId) => { + const request = deserializeRequest(serializedRequest) + const response = await handleRequest( + request, + requestId, + this.handlers, + { onUnhandledRequest() {} }, + this.emitter, + ) + + socket.emit( + 'response', + response ? await serializeResponse(response) : undefined, + ) + }) + + /** + * @todo Have the socket signal back whichever response + * was used for whichever request. Include request ID + * and somehow let this API know whether the response was + * the mocked one or note. + */ + // socket.on('response', (serializedResponse) => { + // const response = deserializeResponse(serializedResponse) + // this.emitter.emit('response', response, requestId) + // }) + }) + } + + public printHandlers() { + const handlers = this.listHandlers() + + handlers.forEach((handler) => { + const { header, callFrame } = handler.info + + const pragma = handler.info.hasOwnProperty('operationType') + ? '[graphql]' + : '[rest]' + + console.log(`\ +${`${pragma} ${header}`} + Declaration: ${callFrame} +`) + }) + } + + public async close(): Promise { + const { syncServer } = globalThis + + invariant( + syncServer, + 'Failed to close a remote server: no server is running. Did you forget to call and await ".listen()"?', + ) + + await closeSyncServer(syncServer) + } +} + +/** + * A request handler that resolves any outgoing HTTP requests + * against any established `setupRemoteServer()` WebSocket instance. + */ +export function createRemoteServerResolver(options: { + requestId: string + socketPromise: Promise | undefined> +}) { + return rest.all('*', async ({ request }) => { + // Bypass the socket.io HTTP handshake so the sync WS server connection + // doesn't hang forever. Check this as the first thing to unblock the handling. + if (request.headers.get('x-msw-request-type') === 'internal-request') { + return + } + + const socket = await options.socketPromise + + // If the sync server hasn't been started or failed to connect, + // skip this request handler altogether, it has no effect. + if (socket == null) { + return + } + + socket.emit('request', await serializeRequest(request), options.requestId) + + const responsePromise = new DeferredPromise() + + /** + * @todo Handle timeouts. + * @todo Handle socket errors. + */ + socket.on('response', (serializedResponse) => { + responsePromise.resolve( + serializedResponse + ? deserializeResponse(serializedResponse) + : undefined, + ) + }) + + return await responsePromise + }) +} + +async function createSyncServer(): Promise< + WebSocketServer +> { + const existingSyncServer = globalThis.syncServer + + // Reuse the existing WebSocket server reference if it exists. + // It persists on the global scope between hot updates. + if (existingSyncServer) { + return existingSyncServer + } + + const serverReadyPromise = new DeferredPromise< + WebSocketServer + >() + + const httpServer = http.createServer() + const ws = new WebSocketServer(httpServer, { + cors: { + origin: '*', + methods: ['GET', 'POST'], + }, + }) + + httpServer.listen(+SYNC_SERVER_URL.port, SYNC_SERVER_URL.hostname, () => { + globalThis.syncServer = ws + serverReadyPromise.resolve(ws) + }) + + return serverReadyPromise +} + +async function closeSyncServer(server: WebSocketServer): Promise { + const serverClosePromise = new DeferredPromise() + + server.close((error) => { + if (error) { + return serverClosePromise.reject(error) + } + + globalThis.syncServer = undefined + serverClosePromise.resolve() + }) + + return serverClosePromise +} diff --git a/src/node/useRemoteHandler.ts b/src/node/useRemoteHandler.ts deleted file mode 100644 index 1b22faedc..000000000 --- a/src/node/useRemoteHandler.ts +++ /dev/null @@ -1,152 +0,0 @@ -import * as http from 'http' -import { Emitter } from 'strict-event-emitter' -import { Server as WebSocketServer } from 'socket.io' -import { Socket } from 'socket.io-client' -import { DeferredPromise } from '@open-draft/deferred-promise' -import { RequestHandler, handleRequest, rest } from '~/core' -import { - SerializedRequest, - SerializedResponse, - deserializeRequest, - deserializeResponse, - serializeRequest, - serializeResponse, -} from '~/core/utils/request/serializeUtils' - -declare global { - var syncServer: WebSocketServer | undefined -} - -export const SYNC_SERVER_URL = new URL('http://localhost:50222') - -export interface SyncServerEventsMap { - request( - serializedRequest: SerializedRequest, - requestId: string, - ): Promise | void - response(serializedResponse?: SerializedResponse): Promise | void -} - -export async function useRemoteHandlers( - ...handlers: Array -): Promise { - const ws = await createSyncServer() - - // Remove all the listeners from the persisted WS instance. - // This ensures that there's no memory leak between hot updates - // since the code below adds the socket listeners once again. - ws.removeAllListeners() - - /** - * @todo Decide if remote handlers expose life-cycle events API. - */ - const emitter = new Emitter() - - ws.on('connection', (socket) => { - socket.on('request', async (serializedRequest, requestId) => { - const request = deserializeRequest(serializedRequest) - const response = await handleRequest( - request, - requestId, - handlers, - { onUnhandledRequest() {} }, - emitter, - ) - - socket.emit( - 'response', - response ? await serializeResponse(response) : undefined, - ) - }) - }) - - process.on('SIGTERM', () => closeSyncServer(ws)) - process.on('SIGINT', () => closeSyncServer(ws)) - - return -} - -async function createSyncServer(): Promise< - WebSocketServer -> { - const existingSyncServer = globalThis.syncServer - - // Reuse the existing WebSocket server reference if it exists. - // It persists on the global scope between hot updates. - if (existingSyncServer) { - return existingSyncServer - } - - const serverReady = new DeferredPromise< - WebSocketServer - >() - - const httpServer = http.createServer() - const ws = new WebSocketServer(httpServer, { - cors: { - origin: '*', - methods: ['GET', 'POST'], - }, - }) - - httpServer.listen(+SYNC_SERVER_URL.port, SYNC_SERVER_URL.hostname, () => { - globalThis.syncServer = ws - serverReady.resolve(ws) - }) - - return serverReady -} - -async function closeSyncServer(server: WebSocketServer): Promise { - const serverClosePromise = new DeferredPromise() - - server.close((error) => { - if (error) { - return serverClosePromise.reject(error) - } - - globalThis.syncServer = undefined - serverClosePromise.resolve() - }) - - return serverClosePromise -} - -export function syncServerResolver(options: { - requestId: string - socketPromise: Promise | null> -}) { - return rest.all('*', async ({ request }) => { - // Bypass the socket.io HTTP handshake so the sync WS server connection - // doesn't hang forever. Check this as the first thing to unblock the handling. - if (request.headers.get('x-msw-request-type') === 'internal-request') { - return - } - - const socket = await options.socketPromise - - // If the sync server hasn't been started or failed to connect, - // skip this request handler altogether, it has no effect. - if (socket == null) { - return - } - - socket.emit('request', await serializeRequest(request), options.requestId) - - const responsePromise = new DeferredPromise() - - /** - * @todo Handle timeouts. - * @todo Handle socket errors. - */ - socket.on('response', (serializedResponse) => { - responsePromise.resolve( - serializedResponse - ? deserializeResponse(serializedResponse) - : undefined, - ) - }) - - return await responsePromise - }) -} From cedba0a680b2e3fa92f1c07190ba6c05d8f8ff1e Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 17 May 2023 16:31:58 +0200 Subject: [PATCH 141/210] fix: await the server connection promise correctly --- src/node/SetupServerApi.ts | 22 +++++----------------- src/node/setupRemoteServer.ts | 15 +++++++++++---- 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index f62eb72b6..e6fbd2520 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -38,6 +38,7 @@ export class SetupServerApi HttpRequestEventMap > private resolvedOptions: RequiredDeep + private syncSocketPromise: Promise | undefined> constructor( interceptors: InterceptorsList, @@ -51,7 +52,7 @@ export class SetupServerApi }) this.resolvedOptions = {} as RequiredDeep - this.syncSocketPromise = this.createSyncServerConnection() + this.syncSocketPromise = Promise.resolve(undefined) this.init() } @@ -102,6 +103,8 @@ export class SetupServerApi options, ) as RequiredDeep + this.syncSocketPromise = this.createSyncServerConnection() + // Apply the interceptor when starting the server. this.interceptor.apply() @@ -144,26 +147,11 @@ ${`${pragma} ${header}`} this.dispose() } - private syncSocketPromise: Promise | undefined> - - private async pingSyncServer(): Promise { - return fetch(SYNC_SERVER_URL, { - method: 'HEAD', - }).then( - (res) => res.ok, - () => false, - ) - } - private async createSyncServerConnection(): Promise { - if (!(await this.pingSyncServer())) { - return Promise.resolve(undefined) - } - const connectionPromise = new DeferredPromise< Socket | undefined >() - const socket = io(SYNC_SERVER_URL, { + const socket = io(SYNC_SERVER_URL.href, { timeout: 200, reconnection: false, extraHeaders: { diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index 14a6fce9f..5cf8168f6 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -50,18 +50,21 @@ export class SetupRemoteServerApi extends SetupApi implements SetupRemoteServer { - protected handlers: Array protected emitter: Emitter constructor(...handlers: Array) { super(...handlers) - this.handlers = handlers this.emitter = new Emitter() } public async listen(): Promise { const server = await createSyncServer() + server.removeAllListeners() + + process + .on('SIGTERM', () => closeSyncServer(server)) + .on('SIGINT', () => closeSyncServer(server)) server.on('connection', (socket) => { socket.on('request', async (serializedRequest, requestId) => { @@ -69,7 +72,7 @@ export class SetupRemoteServerApi const response = await handleRequest( request, requestId, - this.handlers, + this.currentHandlers, { onUnhandledRequest() {} }, this.emitter, ) @@ -184,7 +187,7 @@ async function createSyncServer(): Promise< const ws = new WebSocketServer(httpServer, { cors: { origin: '*', - methods: ['GET', 'POST'], + methods: ['HEAD', 'GET', 'POST'], }, }) @@ -193,6 +196,10 @@ async function createSyncServer(): Promise< serverReadyPromise.resolve(ws) }) + httpServer.on('error', (error) => { + serverReadyPromise.reject(error) + }) + return serverReadyPromise } From 598b1b7184071d4e7986e2091124c59625e449fc Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 17 May 2023 20:11:18 +0200 Subject: [PATCH 142/210] fix: provide explicit exports from "setupRemoteServer" --- src/node/index.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/node/index.ts b/src/node/index.ts index e1bd6e4b9..4d3c4b481 100644 --- a/src/node/index.ts +++ b/src/node/index.ts @@ -1,4 +1,8 @@ export type { SetupServer } from './glossary' export { SetupServerApi } from './SetupServerApi' export { setupServer } from './setupServer' -export * from './setupRemoteServer' +export { + SetupRemoteServer, + SetupRemoteServerApi, + setupRemoteServer, +} from './setupRemoteServer' From 612a5ba0bcee146b54085f78441df335cc741303 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 26 May 2023 18:59:00 +0200 Subject: [PATCH 143/210] feat: support custom "MSW_INTERNAL_WEBSOCKET_PORT" env variable --- src/node/setupRemoteServer.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index 5cf8168f6..019524ff3 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -21,8 +21,12 @@ import { } from '~/core/utils/request/serializeUtils' import { LifeCycleEventEmitter } from '~/core/sharedOptions' -export const SYNC_SERVER_URL = new URL('http://localhost:50222') +const SYNC_SERVER_PORT = +(process.env.MSW_INTERNAL_WEBSOCKET_PORT || 50222) +export const SYNC_SERVER_URL = new URL(`http://localhost:${SYNC_SERVER_PORT}`) +/** + * Enables API mocking in a remote Node.js process. + */ export function setupRemoteServer(...handlers: Array) { return new SetupRemoteServerApi(...handlers) } @@ -30,7 +34,6 @@ export function setupRemoteServer(...handlers: Array) { export interface SetupRemoteServer { listen(): Promise close(): Promise - events: LifeCycleEventEmitter } From 0f5c4430c82aee1db94a97e7476d5b1966d45cc9 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 26 May 2023 19:22:54 +0200 Subject: [PATCH 144/210] test(setupRemoteServer): add basic "use" test --- pnpm-lock.yaml | 3914 +++++++++-------- test/jest.setup.js | 35 + .../msw-api/setup-remote-server/use.app.js | 39 + .../setup-remote-server/use.node.test.ts | 123 + 4 files changed, 2203 insertions(+), 1908 deletions(-) create mode 100644 test/jest.setup.js create mode 100644 test/node/msw-api/setup-remote-server/use.app.js create mode 100644 test/node/msw-api/setup-remote-server/use.node.test.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 12ca03f06..a8daa9cde 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,249 +1,173 @@ -lockfileVersion: '6.0' +lockfileVersion: 5.4 overrides: chokidar: 3.4.1 +specifiers: + '@babel/core': ^7.17.2 + '@babel/preset-env': ^7.16.11 + '@bundled-es-modules/cookie': ^2.0.0 + '@bundled-es-modules/js-levenshtein': ^2.0.1 + '@bundled-es-modules/statuses': ^1.0.1 + '@commitlint/cli': ^16.1.0 + '@commitlint/config-conventional': ^16.0.0 + '@mswjs/cookies': ^1.0.0 + '@mswjs/interceptors': ^0.22.13 + '@open-draft/deferred-promise': ^2.1.0 + '@open-draft/test-server': ^0.4.2 + '@open-draft/until': ^2.1.0 + '@ossjs/release': ^0.4.0 + '@playwright/test': ^1.30.0 + '@swc/core': ^1.3.35 + '@swc/jest': ^0.2.24 + '@types/cookie': ^0.4.1 + '@types/express': ^4.17.17 + '@types/fs-extra': ^9.0.13 + '@types/glob': ^8.1.0 + '@types/jest': ^29.4.0 + '@types/js-levenshtein': ^1.1.1 + '@types/json-bigint': ^1.0.1 + '@types/node': 18.x + '@types/node-fetch': ^2.5.11 + '@types/puppeteer': ^5.4.4 + '@types/statuses': ^2.0.1 + '@typescript-eslint/eslint-plugin': ^5.11.0 + '@typescript-eslint/parser': ^5.11.0 + '@web/dev-server': ^0.1.38 + babel-loader: ^8.2.3 + babel-minify: ^0.5.1 + chalk: ^4.1.2 + chokidar: 3.4.1 + commitizen: ^4.2.4 + cross-env: ^7.0.3 + cross-fetch: ^3.1.5 + cz-conventional-changelog: 3.3.0 + esbuild: ^0.17.15 + esbuild-loader: ^2.21.0 + eslint: ^7.30.0 + eslint-config-prettier: ^8.3.0 + eslint-plugin-prettier: ^3.4.0 + express: ^4.18.2 + formdata-node: 4.4.1 + fs-extra: ^10.0.0 + fs-teardown: ^0.3.0 + glob: ^9.3.4 + graphql: ^15.0.0 || ^16.0.0 + headers-polyfill: ^3.1.2 + inquirer: ^8.2.0 + is-node-process: ^1.2.0 + jest: ^29.4.3 + jest-environment-jsdom: ^29.4.3 + js-levenshtein: ^1.1.6 + json-bigint: ^1.0.0 + lint-staged: ^13.0.3 + node-fetch: ^2.6.7 + outvariant: ^1.4.0 + page-with: ^0.6.1 + path-to-regexp: ^6.2.0 + prettier: ^2.7.1 + regenerator-runtime: ^0.13.9 + rimraf: ^3.0.2 + simple-git-hooks: ^2.8.0 + socket.io: ^4.6.1 + socket.io-client: ^4.6.1 + strict-event-emitter: ^0.5.0 + ts-node: ^10.9.1 + tsup: ^6.7.0 + type-fest: ^2.19.0 + typescript: ^5.0.2 + undici: ^5.20.0 + url-loader: ^4.1.1 + webpack: ^5.68.0 + webpack-dev-server: ^3.11.2 + webpack-http-server: ^0.5.0 + yargs: ^17.3.1 + dependencies: - '@bundled-es-modules/cookie': - specifier: ^2.0.0 - version: 2.0.0 - '@bundled-es-modules/js-levenshtein': - specifier: ^2.0.1 - version: 2.0.1 - '@bundled-es-modules/statuses': - specifier: ^1.0.1 - version: 1.0.1 - '@mswjs/cookies': - specifier: ^1.0.0 - version: 1.0.0 - '@mswjs/interceptors': - specifier: ^0.22.13 - version: 0.22.13 - '@open-draft/deferred-promise': - specifier: ^2.1.0 - version: 2.1.0 - '@open-draft/until': - specifier: ^2.1.0 - version: 2.1.0 - '@types/cookie': - specifier: ^0.4.1 - version: 0.4.1 - '@types/js-levenshtein': - specifier: ^1.1.1 - version: 1.1.1 - '@types/statuses': - specifier: ^2.0.1 - version: 2.0.1 - chalk: - specifier: ^4.1.2 - version: 4.1.2 - chokidar: - specifier: 3.4.1 - version: 3.4.1 - formdata-node: - specifier: 4.4.1 - version: 4.4.1 - graphql: - specifier: ^15.0.0 || ^16.0.0 - version: 16.6.0 - headers-polyfill: - specifier: ^3.1.2 - version: 3.1.2 - inquirer: - specifier: ^8.2.0 - version: 8.2.5 - is-node-process: - specifier: ^1.2.0 - version: 1.2.0 - js-levenshtein: - specifier: ^1.1.6 - version: 1.1.6 - node-fetch: - specifier: ^2.6.7 - version: 2.6.9 - outvariant: - specifier: ^1.4.0 - version: 1.4.0 - path-to-regexp: - specifier: ^6.2.0 - version: 6.2.1 - socket.io: - specifier: ^4.6.1 - version: 4.6.1 - socket.io-client: - specifier: ^4.6.1 - version: 4.6.1 - strict-event-emitter: - specifier: ^0.5.0 - version: 0.5.0 - type-fest: - specifier: ^2.19.0 - version: 2.19.0 - yargs: - specifier: ^17.3.1 - version: 17.7.1 + '@bundled-es-modules/cookie': 2.0.0 + '@bundled-es-modules/js-levenshtein': 2.0.1 + '@bundled-es-modules/statuses': 1.0.1 + '@mswjs/cookies': 1.0.0 + '@mswjs/interceptors': 0.22.13 + '@open-draft/deferred-promise': 2.1.0 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.4.1 + '@types/js-levenshtein': 1.1.1 + '@types/statuses': 2.0.1 + chalk: 4.1.2 + chokidar: 3.4.1 + formdata-node: 4.4.1 + graphql: 16.6.0 + headers-polyfill: 3.1.2 + inquirer: 8.2.5 + is-node-process: 1.2.0 + js-levenshtein: 1.1.6 + node-fetch: 2.6.9 + outvariant: 1.4.0 + path-to-regexp: 6.2.1 + socket.io: 4.6.1 + socket.io-client: 4.6.1 + strict-event-emitter: 0.5.0 + type-fest: 2.19.0 + yargs: 17.7.1 devDependencies: - '@babel/core': - specifier: ^7.17.2 - version: 7.21.4 - '@babel/preset-env': - specifier: ^7.16.11 - version: 7.21.4(@babel/core@7.21.4) - '@commitlint/cli': - specifier: ^16.1.0 - version: 16.3.0(@swc/core@1.3.49) - '@commitlint/config-conventional': - specifier: ^16.0.0 - version: 16.2.4 - '@open-draft/test-server': - specifier: ^0.4.2 - version: 0.4.2 - '@ossjs/release': - specifier: ^0.4.0 - version: 0.4.0 - '@playwright/test': - specifier: ^1.30.0 - version: 1.32.3 - '@swc/core': - specifier: ^1.3.35 - version: 1.3.49 - '@swc/jest': - specifier: ^0.2.24 - version: 0.2.24(@swc/core@1.3.49) - '@types/express': - specifier: ^4.17.17 - version: 4.17.17 - '@types/fs-extra': - specifier: ^9.0.13 - version: 9.0.13 - '@types/glob': - specifier: ^8.1.0 - version: 8.1.0 - '@types/jest': - specifier: ^29.4.0 - version: 29.5.0 - '@types/json-bigint': - specifier: ^1.0.1 - version: 1.0.1 - '@types/node': - specifier: 18.x - version: 18.15.11 - '@types/node-fetch': - specifier: ^2.5.11 - version: 2.6.3 - '@types/puppeteer': - specifier: ^5.4.4 - version: 5.4.7 - '@typescript-eslint/eslint-plugin': - specifier: ^5.11.0 - version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@7.32.0)(typescript@5.0.4) - '@typescript-eslint/parser': - specifier: ^5.11.0 - version: 5.58.0(eslint@7.32.0)(typescript@5.0.4) - '@web/dev-server': - specifier: ^0.1.38 - version: 0.1.38 - babel-loader: - specifier: ^8.2.3 - version: 8.3.0(@babel/core@7.21.4)(webpack@5.79.0) - babel-minify: - specifier: ^0.5.1 - version: 0.5.2 - commitizen: - specifier: ^4.2.4 - version: 4.3.0(@swc/core@1.3.49) - cross-env: - specifier: ^7.0.3 - version: 7.0.3 - cross-fetch: - specifier: ^3.1.5 - version: 3.1.5 - cz-conventional-changelog: - specifier: 3.3.0 - version: 3.3.0(@swc/core@1.3.49) - esbuild: - specifier: ^0.17.15 - version: 0.17.16 - esbuild-loader: - specifier: ^2.21.0 - version: 2.21.0(webpack@5.79.0) - eslint: - specifier: ^7.30.0 - version: 7.32.0 - eslint-config-prettier: - specifier: ^8.3.0 - version: 8.8.0(eslint@7.32.0) - eslint-plugin-prettier: - specifier: ^3.4.0 - version: 3.4.1(eslint-config-prettier@8.8.0)(eslint@7.32.0)(prettier@2.8.7) - express: - specifier: ^4.18.2 - version: 4.18.2(supports-color@6.1.0) - fs-extra: - specifier: ^10.0.0 - version: 10.1.0 - fs-teardown: - specifier: ^0.3.0 - version: 0.3.2 - glob: - specifier: ^9.3.4 - version: 9.3.5 - jest: - specifier: ^29.4.3 - version: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) - jest-environment-jsdom: - specifier: ^29.4.3 - version: 29.5.0 - json-bigint: - specifier: ^1.0.0 - version: 1.0.0 - lint-staged: - specifier: ^13.0.3 - version: 13.2.1 - page-with: - specifier: ^0.6.1 - version: 0.6.1(@swc/core@1.3.49)(esbuild@0.17.16) - prettier: - specifier: ^2.7.1 - version: 2.8.7 - regenerator-runtime: - specifier: ^0.13.9 - version: 0.13.11 - rimraf: - specifier: ^3.0.2 - version: 3.0.2 - simple-git-hooks: - specifier: ^2.8.0 - version: 2.8.1 - ts-node: - specifier: ^10.9.1 - version: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4) - tsup: - specifier: ^6.7.0 - version: 6.7.0(@swc/core@1.3.49)(ts-node@10.9.1)(typescript@5.0.4) - typescript: - specifier: ^5.0.2 - version: 5.0.4 - undici: - specifier: ^5.20.0 - version: 5.21.2 - url-loader: - specifier: ^4.1.1 - version: 4.1.1(webpack@5.79.0) - webpack: - specifier: ^5.68.0 - version: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) - webpack-dev-server: - specifier: ^3.11.2 - version: 3.11.3(webpack@5.79.0) - webpack-http-server: - specifier: ^0.5.0 - version: 0.5.0(@swc/core@1.3.49)(esbuild@0.17.16) + '@babel/core': 7.21.4 + '@babel/preset-env': 7.21.4_@babel+core@7.21.4 + '@commitlint/cli': 16.3.0_@swc+core@1.3.49 + '@commitlint/config-conventional': 16.2.4 + '@open-draft/test-server': 0.4.2 + '@ossjs/release': 0.4.0 + '@playwright/test': 1.32.3 + '@swc/core': 1.3.49 + '@swc/jest': 0.2.24_@swc+core@1.3.49 + '@types/express': 4.17.17 + '@types/fs-extra': 9.0.13 + '@types/glob': 8.1.0 + '@types/jest': 29.5.0 + '@types/json-bigint': 1.0.1 + '@types/node': 18.15.11 + '@types/node-fetch': 2.6.3 + '@types/puppeteer': 5.4.7 + '@typescript-eslint/eslint-plugin': 5.58.0_ug56riyzsilszklzuxgwlsssqe + '@typescript-eslint/parser': 5.58.0_cgdknpc562nnyruteofhkegnom + '@web/dev-server': 0.1.38 + babel-loader: 8.3.0_c3tfwv7p35clwcmkb5fnkshzei + babel-minify: 0.5.2 + commitizen: 4.3.0_@swc+core@1.3.49 + cross-env: 7.0.3 + cross-fetch: 3.1.5 + cz-conventional-changelog: 3.3.0_@swc+core@1.3.49 + esbuild: 0.17.16 + esbuild-loader: 2.21.0_webpack@5.79.0 + eslint: 7.32.0 + eslint-config-prettier: 8.8.0_eslint@7.32.0 + eslint-plugin-prettier: 3.4.1_mouiu7tdcm2dtderipseaggmee + express: 4.18.2 + fs-extra: 10.1.0 + fs-teardown: 0.3.2 + glob: 9.3.5 + jest: 29.5.0_rrli7kzx2akox3oq6aahu3rvje + jest-environment-jsdom: 29.5.0 + json-bigint: 1.0.0 + lint-staged: 13.2.1 + page-with: 0.6.1_57233mj27fjz7synoeubptyy7e + prettier: 2.8.7 + regenerator-runtime: 0.13.11 + rimraf: 3.0.2 + simple-git-hooks: 2.8.1 + ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e + tsup: 6.7.0_kpvxmbmtx6ydv4unklsjw2abeq + typescript: 5.0.4 + undici: 5.21.2 + url-loader: 4.1.1_webpack@5.79.0 + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e + webpack-dev-server: 3.11.3_webpack@5.79.0 + webpack-http-server: 0.5.0_57233mj27fjz7synoeubptyy7e packages: - /@75lb/deep-merge@1.1.1: + /@75lb/deep-merge/1.1.1: resolution: {integrity: sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw==} engines: {node: '>=12.17'} dependencies: @@ -251,7 +175,7 @@ packages: typical: 7.1.1 dev: true - /@ampproject/remapping@2.2.1: + /@ampproject/remapping/2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: @@ -259,32 +183,32 @@ packages: '@jridgewell/trace-mapping': 0.3.18 dev: true - /@babel/code-frame@7.12.11: + /@babel/code-frame/7.12.11: resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} dependencies: '@babel/highlight': 7.18.6 dev: true - /@babel/code-frame@7.21.4: + /@babel/code-frame/7.21.4: resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 dev: true - /@babel/compat-data@7.21.4: + /@babel/compat-data/7.21.4: resolution: {integrity: sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==} engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.21.4: + /@babel/core/7.21.4: resolution: {integrity: sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.21.4 '@babel/generator': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 '@babel/helper-module-transforms': 7.21.2 '@babel/helpers': 7.21.0 '@babel/parser': 7.21.4 @@ -292,7 +216,7 @@ packages: '@babel/traverse': 7.21.4 '@babel/types': 7.21.4 convert-source-map: 1.9.0 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.0 @@ -300,7 +224,7 @@ packages: - supports-color dev: true - /@babel/generator@7.21.4: + /@babel/generator/7.21.4: resolution: {integrity: sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==} engines: {node: '>=6.9.0'} dependencies: @@ -310,14 +234,14 @@ packages: jsesc: 2.5.2 dev: true - /@babel/helper-annotate-as-pure@7.18.6: + /@babel/helper-annotate-as-pure/7.18.6: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-builder-binary-assignment-operator-visitor@7.18.9: + /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9: resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==} engines: {node: '>=6.9.0'} dependencies: @@ -325,7 +249,7 @@ packages: '@babel/types': 7.21.4 dev: true - /@babel/helper-compilation-targets@7.21.4(@babel/core@7.21.4): + /@babel/helper-compilation-targets/7.21.4_@babel+core@7.21.4: resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -339,7 +263,7 @@ packages: semver: 6.3.0 dev: true - /@babel/helper-create-class-features-plugin@7.21.4(@babel/core@7.21.4): + /@babel/helper-create-class-features-plugin/7.21.4_@babel+core@7.21.4: resolution: {integrity: sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -358,7 +282,7 @@ packages: - supports-color dev: true - /@babel/helper-create-regexp-features-plugin@7.21.4(@babel/core@7.21.4): + /@babel/helper-create-regexp-features-plugin/7.21.4_@babel+core@7.21.4: resolution: {integrity: sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -369,15 +293,15 @@ packages: regexpu-core: 5.3.2 dev: true - /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.21.4): + /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.21.4: resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.2 semver: 6.3.0 @@ -385,19 +309,19 @@ packages: - supports-color dev: true - /@babel/helper-environment-visitor@7.18.9: + /@babel/helper-environment-visitor/7.18.9: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-explode-assignable-expression@7.18.6: + /@babel/helper-explode-assignable-expression/7.18.6: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-function-name@7.21.0: + /@babel/helper-function-name/7.21.0: resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} engines: {node: '>=6.9.0'} dependencies: @@ -405,28 +329,28 @@ packages: '@babel/types': 7.21.4 dev: true - /@babel/helper-hoist-variables@7.18.6: + /@babel/helper-hoist-variables/7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-member-expression-to-functions@7.21.0: + /@babel/helper-member-expression-to-functions/7.21.0: resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-module-imports@7.21.4: + /@babel/helper-module-imports/7.21.4: resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-module-transforms@7.21.2: + /@babel/helper-module-transforms/7.21.2: resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} engines: {node: '>=6.9.0'} dependencies: @@ -442,19 +366,19 @@ packages: - supports-color dev: true - /@babel/helper-optimise-call-expression@7.18.6: + /@babel/helper-optimise-call-expression/7.18.6: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-plugin-utils@7.20.2: + /@babel/helper-plugin-utils/7.20.2: resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.21.4): + /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -469,7 +393,7 @@ packages: - supports-color dev: true - /@babel/helper-replace-supers@7.20.7: + /@babel/helper-replace-supers/7.20.7: resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==} engines: {node: '>=6.9.0'} dependencies: @@ -483,43 +407,43 @@ packages: - supports-color dev: true - /@babel/helper-simple-access@7.20.2: + /@babel/helper-simple-access/7.20.2: resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-skip-transparent-expression-wrappers@7.20.0: + /@babel/helper-skip-transparent-expression-wrappers/7.20.0: resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-split-export-declaration@7.18.6: + /@babel/helper-split-export-declaration/7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.4 dev: true - /@babel/helper-string-parser@7.19.4: + /@babel/helper-string-parser/7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-identifier@7.19.1: + /@babel/helper-validator-identifier/7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option@7.21.0: + /@babel/helper-validator-option/7.21.0: resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-wrap-function@7.20.5: + /@babel/helper-wrap-function/7.20.5: resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} engines: {node: '>=6.9.0'} dependencies: @@ -531,7 +455,7 @@ packages: - supports-color dev: true - /@babel/helpers@7.21.0: + /@babel/helpers/7.21.0: resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} engines: {node: '>=6.9.0'} dependencies: @@ -542,7 +466,7 @@ packages: - supports-color dev: true - /@babel/highlight@7.18.6: + /@babel/highlight/7.18.6: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} dependencies: @@ -551,7 +475,7 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser@7.21.4: + /@babel/parser/7.21.4: resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==} engines: {node: '>=6.0.0'} hasBin: true @@ -559,7 +483,7 @@ packages: '@babel/types': 7.21.4 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.21.4): + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -569,7 +493,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.21.4): + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -578,10 +502,10 @@ packages: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.4): + /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -590,40 +514,40 @@ packages: '@babel/core': 7.21.4 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.4 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.21.4): + /@babel/plugin-proposal-class-static-block/7.21.0_@babel+core@7.21.4: resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.4) + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.4 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -631,10 +555,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.21.4): + /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -642,10 +566,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -653,10 +577,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.21.4): + /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} engines: {node: '>=6.9.0'} peerDependencies: @@ -664,10 +588,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -675,10 +599,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -686,10 +610,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.21.4): + /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -697,13 +621,13 @@ packages: dependencies: '@babel/compat-data': 7.21.4 '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -711,10 +635,10 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.21.4): + /@babel/plugin-proposal-optional-chaining/7.21.0_@babel+core@7.21.4: resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -723,23 +647,23 @@ packages: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.4 dev: true - /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.21.4): + /@babel/plugin-proposal-private-property-in-object/7.21.0_@babel+core@7.21.4: resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -747,25 +671,25 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.4) + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.4 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.4): + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.4: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -774,7 +698,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -783,7 +707,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.4): + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.4: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -792,7 +716,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.4): + /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.21.4: resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -802,7 +726,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -811,7 +735,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -820,7 +744,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.21.4): + /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.21.4: resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -830,7 +754,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.21.4): + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.21.4: resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -839,7 +763,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -848,7 +772,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-jsx@7.21.4(@babel/core@7.21.4): + /@babel/plugin-syntax-jsx/7.21.4_@babel+core@7.21.4: resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -858,7 +782,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.4): + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.4: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -867,7 +791,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -876,7 +800,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.4): + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.4: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -885,7 +809,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -894,7 +818,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -903,7 +827,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -912,7 +836,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.4): + /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.21.4: resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -922,7 +846,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.4): + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.4: resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -932,7 +856,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.21.4): + /@babel/plugin-syntax-typescript/7.21.4_@babel+core@7.21.4: resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -942,7 +866,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.21.4): + /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -952,7 +876,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.21.4): + /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -961,12 +885,12 @@ packages: '@babel/core': 7.21.4 '@babel/helper-module-imports': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.4) + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.4 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -976,7 +900,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.4): + /@babel/plugin-transform-block-scoping/7.21.0_@babel+core@7.21.4: resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -986,7 +910,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-classes@7.21.0(@babel/core@7.21.4): + /@babel/plugin-transform-classes/7.21.0_@babel+core@7.21.4: resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -994,7 +918,7 @@ packages: dependencies: '@babel/core': 7.21.4 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 @@ -1006,7 +930,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.21.4): + /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1017,7 +941,7 @@ packages: '@babel/template': 7.20.7 dev: true - /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.21.4): + /@babel/plugin-transform-destructuring/7.21.3_@babel+core@7.21.4: resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1027,18 +951,18 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.21.4): + /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1048,7 +972,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1059,7 +983,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.21.4): + /@babel/plugin-transform-for-of/7.21.0_@babel+core@7.21.4: resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1069,19 +993,19 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.4): + /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 '@babel/helper-function-name': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.4): + /@babel/plugin-transform-literals/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1091,7 +1015,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1101,7 +1025,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.21.4): + /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.21.4: resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1114,7 +1038,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.21.4): + /@babel/plugin-transform-modules-commonjs/7.21.2_@babel+core@7.21.4: resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1128,7 +1052,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.21.4): + /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.21.4: resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1143,7 +1067,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1156,18 +1080,18 @@ packages: - supports-color dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.21.4): + /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.21.4: resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1177,7 +1101,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1190,7 +1114,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.21.4): + /@babel/plugin-transform-parameters/7.21.3_@babel+core@7.21.4: resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1200,7 +1124,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1210,7 +1134,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.21.4): + /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.21.4: resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1221,7 +1145,7 @@ packages: regenerator-transform: 0.15.1 dev: true - /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1231,7 +1155,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1241,7 +1165,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-spread@7.20.7(@babel/core@7.21.4): + /@babel/plugin-transform-spread/7.20.7_@babel+core@7.21.4: resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1252,7 +1176,7 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 dev: true - /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1262,7 +1186,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.21.4): + /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1272,7 +1196,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.21.4): + /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.21.4: resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1282,7 +1206,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.21.4): + /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.21.4: resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1292,18 +1216,18 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.21.4: resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/preset-env@7.21.4(@babel/core@7.21.4): + /@babel/preset-env/7.21.4_@babel+core@7.21.4: resolution: {integrity: sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1311,109 +1235,109 @@ packages: dependencies: '@babel/compat-data': 7.21.4 '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.4) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.4) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.21.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.4) - '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.4) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.4) - '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.4) - '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.21.4) - '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.4) - '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.4) - '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.21.4) - '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.21.4) - '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.4) - '@babel/preset-modules': 0.1.5(@babel/core@7.21.4) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-class-static-block': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-private-property-in-object': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.4 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.4 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.4 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.21.4 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.4 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.4 + '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-block-scoping': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-transform-classes': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-transform-computed-properties': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-transform-destructuring': 7.21.3_@babel+core@7.21.4 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-for-of': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.21.4 + '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.21.4 + '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.21.4 + '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.21.4 + '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.4 + '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-regenerator': 7.20.5_@babel+core@7.21.4 + '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.21.4 + '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.21.4 + '@babel/preset-modules': 0.1.5_@babel+core@7.21.4 '@babel/types': 7.21.4 - babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.4) - babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.4) - babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.4) + babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.21.4 + babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.21.4 + babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.21.4 core-js-compat: 3.30.0 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules@0.1.5(@babel/core@7.21.4): + /@babel/preset-modules/0.1.5_@babel+core@7.21.4: resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.4 '@babel/types': 7.21.4 esutils: 2.0.3 dev: true - /@babel/regjsgen@0.8.0: + /@babel/regjsgen/0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: true - /@babel/runtime@7.21.0: + /@babel/runtime/7.21.0: resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 dev: true - /@babel/template@7.20.7: + /@babel/template/7.20.7: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} dependencies: @@ -1422,7 +1346,7 @@ packages: '@babel/types': 7.21.4 dev: true - /@babel/traverse@7.21.4: + /@babel/traverse/7.21.4: resolution: {integrity: sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==} engines: {node: '>=6.9.0'} dependencies: @@ -1434,13 +1358,13 @@ packages: '@babel/helper-split-export-declaration': 7.18.6 '@babel/parser': 7.21.4 '@babel/types': 7.21.4 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types@7.21.4: + /@babel/types/7.21.4: resolution: {integrity: sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==} engines: {node: '>=6.9.0'} dependencies: @@ -1449,36 +1373,36 @@ packages: to-fast-properties: 2.0.0 dev: true - /@bcoe/v8-coverage@0.2.3: + /@bcoe/v8-coverage/0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /@bundled-es-modules/cookie@2.0.0: + /@bundled-es-modules/cookie/2.0.0: resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==} dependencies: cookie: 0.5.0 dev: false - /@bundled-es-modules/js-levenshtein@2.0.1: + /@bundled-es-modules/js-levenshtein/2.0.1: resolution: {integrity: sha512-DERMS3yfbAljKsQc0U2wcqGKUWpdFjwqWuoMugEJlqBnKO180/n+4SR/J8MRDt1AN48X1ovgoD9KrdVXcaa3Rg==} dependencies: js-levenshtein: 1.1.6 dev: false - /@bundled-es-modules/statuses@1.0.1: + /@bundled-es-modules/statuses/1.0.1: resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} dependencies: statuses: 2.0.1 dev: false - /@commitlint/cli@16.3.0(@swc/core@1.3.49): + /@commitlint/cli/16.3.0_@swc+core@1.3.49: resolution: {integrity: sha512-P+kvONlfsuTMnxSwWE1H+ZcPMY3STFaHb2kAacsqoIkNx66O0T7sTpBxpxkMrFPyhkJiLJnJWMhk4bbvYD3BMA==} engines: {node: '>=v12'} hasBin: true dependencies: '@commitlint/format': 16.2.1 '@commitlint/lint': 16.2.4 - '@commitlint/load': 16.3.0(@swc/core@1.3.49) + '@commitlint/load': 16.3.0_@swc+core@1.3.49 '@commitlint/read': 16.2.1 '@commitlint/types': 16.2.1 lodash: 4.17.21 @@ -1490,14 +1414,14 @@ packages: - '@swc/wasm' dev: true - /@commitlint/config-conventional@16.2.4: + /@commitlint/config-conventional/16.2.4: resolution: {integrity: sha512-av2UQJa3CuE5P0dzxj/o/B9XVALqYzEViHrMXtDrW9iuflrqCStWBAioijppj9URyz6ONpohJKAtSdgAOE0gkA==} engines: {node: '>=v12'} dependencies: conventional-changelog-conventionalcommits: 4.6.3 dev: true - /@commitlint/config-validator@16.2.1: + /@commitlint/config-validator/16.2.1: resolution: {integrity: sha512-hogSe0WGg7CKmp4IfNbdNES3Rq3UEI4XRPB8JL4EPgo/ORq5nrGTVzxJh78omibNuB8Ho4501Czb1Er1MoDWpw==} engines: {node: '>=v12'} dependencies: @@ -1505,7 +1429,7 @@ packages: ajv: 6.12.6 dev: true - /@commitlint/config-validator@17.4.4: + /@commitlint/config-validator/17.4.4: resolution: {integrity: sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==} engines: {node: '>=v14'} dependencies: @@ -1514,7 +1438,7 @@ packages: dev: true optional: true - /@commitlint/ensure@16.2.1: + /@commitlint/ensure/16.2.1: resolution: {integrity: sha512-/h+lBTgf1r5fhbDNHOViLuej38i3rZqTQnBTk+xEg+ehOwQDXUuissQ5GsYXXqI5uGy+261ew++sT4EA3uBJ+A==} engines: {node: '>=v12'} dependencies: @@ -1522,18 +1446,18 @@ packages: lodash: 4.17.21 dev: true - /@commitlint/execute-rule@16.2.1: + /@commitlint/execute-rule/16.2.1: resolution: {integrity: sha512-oSls82fmUTLM6cl5V3epdVo4gHhbmBFvCvQGHBRdQ50H/690Uq1Dyd7hXMuKITCIdcnr9umyDkr8r5C6HZDF3g==} engines: {node: '>=v12'} dev: true - /@commitlint/execute-rule@17.4.0: + /@commitlint/execute-rule/17.4.0: resolution: {integrity: sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==} engines: {node: '>=v14'} dev: true optional: true - /@commitlint/format@16.2.1: + /@commitlint/format/16.2.1: resolution: {integrity: sha512-Yyio9bdHWmNDRlEJrxHKglamIk3d6hC0NkEUW6Ti6ipEh2g0BAhy8Od6t4vLhdZRa1I2n+gY13foy+tUgk0i1Q==} engines: {node: '>=v12'} dependencies: @@ -1541,7 +1465,7 @@ packages: chalk: 4.1.2 dev: true - /@commitlint/is-ignored@16.2.4: + /@commitlint/is-ignored/16.2.4: resolution: {integrity: sha512-Lxdq9aOAYCOOOjKi58ulbwK/oBiiKz+7Sq0+/SpFIEFwhHkIVugvDvWjh2VRBXmRC/x5lNcjDcYEwS/uYUvlYQ==} engines: {node: '>=v12'} dependencies: @@ -1549,7 +1473,7 @@ packages: semver: 7.3.7 dev: true - /@commitlint/lint@16.2.4: + /@commitlint/lint/16.2.4: resolution: {integrity: sha512-AUDuwOxb2eGqsXbTMON3imUGkc1jRdtXrbbohiLSCSk3jFVXgJLTMaEcr39pR00N8nE9uZ+V2sYaiILByZVmxQ==} engines: {node: '>=v12'} dependencies: @@ -1559,7 +1483,7 @@ packages: '@commitlint/types': 16.2.1 dev: true - /@commitlint/load@16.3.0(@swc/core@1.3.49): + /@commitlint/load/16.3.0_@swc+core@1.3.49: resolution: {integrity: sha512-3tykjV/iwbkv2FU9DG+NZ/JqmP0Nm3b7aDwgCNQhhKV5P74JAuByULkafnhn+zsFGypG1qMtI5u+BZoa9APm0A==} engines: {node: '>=v12'} dependencies: @@ -1570,7 +1494,7 @@ packages: '@types/node': 18.15.11 chalk: 4.1.2 cosmiconfig: 7.1.0 - cosmiconfig-typescript-loader: 2.0.2(@swc/core@1.3.49)(@types/node@18.15.11)(cosmiconfig@7.1.0)(typescript@4.9.5) + cosmiconfig-typescript-loader: 2.0.2_faublg25f7qpbcz6w4cw6yyzse lodash: 4.17.21 resolve-from: 5.0.0 typescript: 4.9.5 @@ -1579,7 +1503,7 @@ packages: - '@swc/wasm' dev: true - /@commitlint/load@17.5.0(@swc/core@1.3.49): + /@commitlint/load/17.5.0_@swc+core@1.3.49: resolution: {integrity: sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q==} engines: {node: '>=v14'} requiresBuild: true @@ -1591,12 +1515,12 @@ packages: '@types/node': 18.15.11 chalk: 4.1.2 cosmiconfig: 8.1.3 - cosmiconfig-typescript-loader: 4.3.0(@types/node@18.15.11)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@5.0.4) + cosmiconfig-typescript-loader: 4.3.0_zulaepqzabcjiyzbkdbfeduf6u lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4) + ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e typescript: 5.0.4 transitivePeerDependencies: - '@swc/core' @@ -1604,12 +1528,12 @@ packages: dev: true optional: true - /@commitlint/message@16.2.1: + /@commitlint/message/16.2.1: resolution: {integrity: sha512-2eWX/47rftViYg7a3axYDdrgwKv32mxbycBJT6OQY/MJM7SUfYNYYvbMFOQFaA4xIVZt7t2Alyqslbl6blVwWw==} engines: {node: '>=v12'} dev: true - /@commitlint/parse@16.2.1: + /@commitlint/parse/16.2.1: resolution: {integrity: sha512-2NP2dDQNL378VZYioLrgGVZhWdnJO4nAxQl5LXwYb08nEcN+cgxHN1dJV8OLJ5uxlGJtDeR8UZZ1mnQ1gSAD/g==} engines: {node: '>=v12'} dependencies: @@ -1618,7 +1542,7 @@ packages: conventional-commits-parser: 3.2.4 dev: true - /@commitlint/read@16.2.1: + /@commitlint/read/16.2.1: resolution: {integrity: sha512-tViXGuaxLTrw2r7PiYMQOFA2fueZxnnt0lkOWqKyxT+n2XdEMGYcI9ID5ndJKXnfPGPppD0w/IItKsIXlZ+alw==} engines: {node: '>=v12'} dependencies: @@ -1628,7 +1552,7 @@ packages: git-raw-commits: 2.0.11 dev: true - /@commitlint/resolve-extends@16.2.1: + /@commitlint/resolve-extends/16.2.1: resolution: {integrity: sha512-NbbCMPKTFf2J805kwfP9EO+vV+XvnaHRcBy6ud5dF35dxMsvdJqke54W3XazXF1ZAxC4a3LBy4i/GNVBAthsEg==} engines: {node: '>=v12'} dependencies: @@ -1640,7 +1564,7 @@ packages: resolve-global: 1.0.0 dev: true - /@commitlint/resolve-extends@17.4.4: + /@commitlint/resolve-extends/17.4.4: resolution: {integrity: sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==} engines: {node: '>=v14'} dependencies: @@ -1653,7 +1577,7 @@ packages: dev: true optional: true - /@commitlint/rules@16.2.4: + /@commitlint/rules/16.2.4: resolution: {integrity: sha512-rK5rNBIN2ZQNQK+I6trRPK3dWa0MtaTN4xnwOma1qxa4d5wQMQJtScwTZjTJeallFxhOgbNOgr48AMHkdounVg==} engines: {node: '>=v12'} dependencies: @@ -1664,26 +1588,26 @@ packages: execa: 5.1.1 dev: true - /@commitlint/to-lines@16.2.1: + /@commitlint/to-lines/16.2.1: resolution: {integrity: sha512-9/VjpYj5j1QeY3eiog1zQWY6axsdWAc0AonUUfyZ7B0MVcRI0R56YsHAfzF6uK/g/WwPZaoe4Lb1QCyDVnpVaQ==} engines: {node: '>=v12'} dev: true - /@commitlint/top-level@16.2.1: + /@commitlint/top-level/16.2.1: resolution: {integrity: sha512-lS6GSieHW9y6ePL73ied71Z9bOKyK+Ib9hTkRsB8oZFAyQZcyRwq2w6nIa6Fngir1QW51oKzzaXfJL94qwImyw==} engines: {node: '>=v12'} dependencies: find-up: 5.0.0 dev: true - /@commitlint/types@16.2.1: + /@commitlint/types/16.2.1: resolution: {integrity: sha512-7/z7pA7BM0i8XvMSBynO7xsB3mVQPUZbVn6zMIlp/a091XJ3qAXRXc+HwLYhiIdzzS5fuxxNIHZMGHVD4HJxdA==} engines: {node: '>=v12'} dependencies: chalk: 4.1.2 dev: true - /@commitlint/types@17.4.4: + /@commitlint/types/17.4.4: resolution: {integrity: sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==} engines: {node: '>=v14'} dependencies: @@ -1691,50 +1615,50 @@ packages: dev: true optional: true - /@cspotcode/source-map-support@0.8.1: + /@cspotcode/source-map-support/0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@esbuild/android-arm64@0.16.17: - resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} + /@esbuild/android-arm/0.16.17: + resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-arm64@0.17.16: - resolution: {integrity: sha512-QX48qmsEZW+gcHgTmAj+x21mwTz8MlYQBnzF6861cNdQGvj2jzzFjqH0EBabrIa/WVZ2CHolwMoqxVryqKt8+Q==} + /@esbuild/android-arm/0.17.16: + resolution: {integrity: sha512-baLqRpLe4JnKrUXLJChoTN0iXZH7El/mu58GE3WIA6/H834k0XWvLRmGLG8y8arTRS9hJJibPnF0tiGhmWeZgw==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-arm@0.16.17: - resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} + /@esbuild/android-arm64/0.16.17: + resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-arm@0.17.16: - resolution: {integrity: sha512-baLqRpLe4JnKrUXLJChoTN0iXZH7El/mu58GE3WIA6/H834k0XWvLRmGLG8y8arTRS9hJJibPnF0tiGhmWeZgw==} + /@esbuild/android-arm64/0.17.16: + resolution: {integrity: sha512-QX48qmsEZW+gcHgTmAj+x21mwTz8MlYQBnzF6861cNdQGvj2jzzFjqH0EBabrIa/WVZ2CHolwMoqxVryqKt8+Q==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-x64@0.16.17: + /@esbuild/android-x64/0.16.17: resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} engines: {node: '>=12'} cpu: [x64] @@ -1743,7 +1667,7 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.17.16: + /@esbuild/android-x64/0.17.16: resolution: {integrity: sha512-G4wfHhrrz99XJgHnzFvB4UwwPxAWZaZBOFXh+JH1Duf1I4vIVfuYY9uVLpx4eiV2D/Jix8LJY+TAdZ3i40tDow==} engines: {node: '>=12'} cpu: [x64] @@ -1752,7 +1676,7 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.16.17: + /@esbuild/darwin-arm64/0.16.17: resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} engines: {node: '>=12'} cpu: [arm64] @@ -1761,7 +1685,7 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.17.16: + /@esbuild/darwin-arm64/0.17.16: resolution: {integrity: sha512-/Ofw8UXZxuzTLsNFmz1+lmarQI6ztMZ9XktvXedTbt3SNWDn0+ODTwxExLYQ/Hod91EZB4vZPQJLoqLF0jvEzA==} engines: {node: '>=12'} cpu: [arm64] @@ -1770,7 +1694,7 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.16.17: + /@esbuild/darwin-x64/0.16.17: resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} engines: {node: '>=12'} cpu: [x64] @@ -1779,7 +1703,7 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.17.16: + /@esbuild/darwin-x64/0.17.16: resolution: {integrity: sha512-SzBQtCV3Pdc9kyizh36Ol+dNVhkDyIrGb/JXZqFq8WL37LIyrXU0gUpADcNV311sCOhvY+f2ivMhb5Tuv8nMOQ==} engines: {node: '>=12'} cpu: [x64] @@ -1788,7 +1712,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.16.17: + /@esbuild/freebsd-arm64/0.16.17: resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} engines: {node: '>=12'} cpu: [arm64] @@ -1797,7 +1721,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.17.16: + /@esbuild/freebsd-arm64/0.17.16: resolution: {integrity: sha512-ZqftdfS1UlLiH1DnS2u3It7l4Bc3AskKeu+paJSfk7RNOMrOxmeFDhLTMQqMxycP1C3oj8vgkAT6xfAuq7ZPRA==} engines: {node: '>=12'} cpu: [arm64] @@ -1806,7 +1730,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.16.17: + /@esbuild/freebsd-x64/0.16.17: resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} engines: {node: '>=12'} cpu: [x64] @@ -1815,7 +1739,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.17.16: + /@esbuild/freebsd-x64/0.17.16: resolution: {integrity: sha512-rHV6zNWW1tjgsu0dKQTX9L0ByiJHHLvQKrWtnz8r0YYJI27FU3Xu48gpK2IBj1uCSYhJ+pEk6Y0Um7U3rIvV8g==} engines: {node: '>=12'} cpu: [x64] @@ -1824,43 +1748,43 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.16.17: - resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} + /@esbuild/linux-arm/0.16.17: + resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-arm64@0.17.16: - resolution: {integrity: sha512-8yoZhGkU6aHu38WpaM4HrRLTFc7/VVD9Q2SvPcmIQIipQt2I/GMTZNdEHXoypbbGao5kggLcxg0iBKjo0SQYKA==} + /@esbuild/linux-arm/0.17.16: + resolution: {integrity: sha512-n4O8oVxbn7nl4+m+ISb0a68/lcJClIbaGAoXwqeubj/D1/oMMuaAXmJVfFlRjJLu/ZvHkxoiFJnmbfp4n8cdSw==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-arm@0.16.17: - resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} + /@esbuild/linux-arm64/0.16.17: + resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-arm@0.17.16: - resolution: {integrity: sha512-n4O8oVxbn7nl4+m+ISb0a68/lcJClIbaGAoXwqeubj/D1/oMMuaAXmJVfFlRjJLu/ZvHkxoiFJnmbfp4n8cdSw==} + /@esbuild/linux-arm64/0.17.16: + resolution: {integrity: sha512-8yoZhGkU6aHu38WpaM4HrRLTFc7/VVD9Q2SvPcmIQIipQt2I/GMTZNdEHXoypbbGao5kggLcxg0iBKjo0SQYKA==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-ia32@0.16.17: + /@esbuild/linux-ia32/0.16.17: resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} engines: {node: '>=12'} cpu: [ia32] @@ -1869,7 +1793,7 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.17.16: + /@esbuild/linux-ia32/0.17.16: resolution: {integrity: sha512-9ZBjlkdaVYxPNO8a7OmzDbOH9FMQ1a58j7Xb21UfRU29KcEEU3VTHk+Cvrft/BNv0gpWJMiiZ/f4w0TqSP0gLA==} engines: {node: '>=12'} cpu: [ia32] @@ -1878,7 +1802,7 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.16.17: + /@esbuild/linux-loong64/0.16.17: resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==} engines: {node: '>=12'} cpu: [loong64] @@ -1887,7 +1811,7 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.17.16: + /@esbuild/linux-loong64/0.17.16: resolution: {integrity: sha512-TIZTRojVBBzdgChY3UOG7BlPhqJz08AL7jdgeeu+kiObWMFzGnQD7BgBBkWRwOtKR1i2TNlO7YK6m4zxVjjPRQ==} engines: {node: '>=12'} cpu: [loong64] @@ -1896,7 +1820,7 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.16.17: + /@esbuild/linux-mips64el/0.16.17: resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} engines: {node: '>=12'} cpu: [mips64el] @@ -1905,7 +1829,7 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.17.16: + /@esbuild/linux-mips64el/0.17.16: resolution: {integrity: sha512-UPeRuFKCCJYpBbIdczKyHLAIU31GEm0dZl1eMrdYeXDH+SJZh/i+2cAmD3A1Wip9pIc5Sc6Kc5cFUrPXtR0XHA==} engines: {node: '>=12'} cpu: [mips64el] @@ -1914,7 +1838,7 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.16.17: + /@esbuild/linux-ppc64/0.16.17: resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} engines: {node: '>=12'} cpu: [ppc64] @@ -1923,7 +1847,7 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.17.16: + /@esbuild/linux-ppc64/0.17.16: resolution: {integrity: sha512-io6yShgIEgVUhExJejJ21xvO5QtrbiSeI7vYUnr7l+v/O9t6IowyhdiYnyivX2X5ysOVHAuyHW+Wyi7DNhdw6Q==} engines: {node: '>=12'} cpu: [ppc64] @@ -1932,7 +1856,7 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.16.17: + /@esbuild/linux-riscv64/0.16.17: resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} engines: {node: '>=12'} cpu: [riscv64] @@ -1941,7 +1865,7 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.17.16: + /@esbuild/linux-riscv64/0.17.16: resolution: {integrity: sha512-WhlGeAHNbSdG/I2gqX2RK2gfgSNwyJuCiFHMc8s3GNEMMHUI109+VMBfhVqRb0ZGzEeRiibi8dItR3ws3Lk+cA==} engines: {node: '>=12'} cpu: [riscv64] @@ -1950,7 +1874,7 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.16.17: + /@esbuild/linux-s390x/0.16.17: resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} engines: {node: '>=12'} cpu: [s390x] @@ -1959,7 +1883,7 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.17.16: + /@esbuild/linux-s390x/0.17.16: resolution: {integrity: sha512-gHRReYsJtViir63bXKoFaQ4pgTyah4ruiMRQ6im9YZuv+gp3UFJkNTY4sFA73YDynmXZA6hi45en4BGhNOJUsw==} engines: {node: '>=12'} cpu: [s390x] @@ -1968,7 +1892,7 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.16.17: + /@esbuild/linux-x64/0.16.17: resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} engines: {node: '>=12'} cpu: [x64] @@ -1977,7 +1901,7 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.17.16: + /@esbuild/linux-x64/0.17.16: resolution: {integrity: sha512-mfiiBkxEbUHvi+v0P+TS7UnA9TeGXR48aK4XHkTj0ZwOijxexgMF01UDFaBX7Q6CQsB0d+MFNv9IiXbIHTNd4g==} engines: {node: '>=12'} cpu: [x64] @@ -1986,7 +1910,7 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.16.17: + /@esbuild/netbsd-x64/0.16.17: resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} engines: {node: '>=12'} cpu: [x64] @@ -1995,7 +1919,7 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.17.16: + /@esbuild/netbsd-x64/0.17.16: resolution: {integrity: sha512-n8zK1YRDGLRZfVcswcDMDM0j2xKYLNXqei217a4GyBxHIuPMGrrVuJ+Ijfpr0Kufcm7C1k/qaIrGy6eG7wvgmA==} engines: {node: '>=12'} cpu: [x64] @@ -2004,7 +1928,7 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.16.17: + /@esbuild/openbsd-x64/0.16.17: resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} engines: {node: '>=12'} cpu: [x64] @@ -2013,7 +1937,7 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.17.16: + /@esbuild/openbsd-x64/0.17.16: resolution: {integrity: sha512-lEEfkfsUbo0xC47eSTBqsItXDSzwzwhKUSsVaVjVji07t8+6KA5INp2rN890dHZeueXJAI8q0tEIfbwVRYf6Ew==} engines: {node: '>=12'} cpu: [x64] @@ -2022,7 +1946,7 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.16.17: + /@esbuild/sunos-x64/0.16.17: resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} engines: {node: '>=12'} cpu: [x64] @@ -2031,7 +1955,7 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.17.16: + /@esbuild/sunos-x64/0.17.16: resolution: {integrity: sha512-jlRjsuvG1fgGwnE8Afs7xYDnGz0dBgTNZfgCK6TlvPH3Z13/P5pi6I57vyLE8qZYLrGVtwcm9UbUx1/mZ8Ukag==} engines: {node: '>=12'} cpu: [x64] @@ -2040,7 +1964,7 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.16.17: + /@esbuild/win32-arm64/0.16.17: resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} engines: {node: '>=12'} cpu: [arm64] @@ -2049,7 +1973,7 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.17.16: + /@esbuild/win32-arm64/0.17.16: resolution: {integrity: sha512-TzoU2qwVe2boOHl/3KNBUv2PNUc38U0TNnzqOAcgPiD/EZxT2s736xfC2dYQbszAwo4MKzzwBV0iHjhfjxMimg==} engines: {node: '>=12'} cpu: [arm64] @@ -2058,7 +1982,7 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.16.17: + /@esbuild/win32-ia32/0.16.17: resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} engines: {node: '>=12'} cpu: [ia32] @@ -2067,7 +1991,7 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.17.16: + /@esbuild/win32-ia32/0.17.16: resolution: {integrity: sha512-B8b7W+oo2yb/3xmwk9Vc99hC9bNolvqjaTZYEfMQhzdpBsjTvZBlXQ/teUE55Ww6sg//wlcDjOaqldOKyigWdA==} engines: {node: '>=12'} cpu: [ia32] @@ -2076,7 +2000,7 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.16.17: + /@esbuild/win32-x64/0.16.17: resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} engines: {node: '>=12'} cpu: [x64] @@ -2085,7 +2009,7 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.17.16: + /@esbuild/win32-x64/0.17.16: resolution: {integrity: sha512-xJ7OH/nanouJO9pf03YsL9NAFQBHd8AqfrQd7Pf5laGyyTt/gToul6QYOA/i5i/q8y9iaM5DQFNTgpi995VkOg==} engines: {node: '>=12'} cpu: [x64] @@ -2094,7 +2018,7 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@7.32.0): + /@eslint-community/eslint-utils/4.4.0_eslint@7.32.0: resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2104,17 +2028,17 @@ packages: eslint-visitor-keys: 3.4.0 dev: true - /@eslint-community/regexpp@4.5.0: + /@eslint-community/regexpp/4.5.0: resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@0.4.3: + /@eslint/eslintrc/0.4.3: resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 espree: 7.3.1 globals: 13.20.0 ignore: 4.0.6 @@ -2126,22 +2050,22 @@ packages: - supports-color dev: true - /@humanwhocodes/config-array@0.5.0: + /@humanwhocodes/config-array/0.5.0: resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: - supports-color dev: true - /@humanwhocodes/object-schema@1.2.1: + /@humanwhocodes/object-schema/1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@istanbuljs/load-nyc-config@1.1.0: + /@istanbuljs/load-nyc-config/1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} dependencies: @@ -2152,12 +2076,12 @@ packages: resolve-from: 5.0.0 dev: true - /@istanbuljs/schema@0.1.3: + /@istanbuljs/schema/0.1.3: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} dev: true - /@jest/console@29.5.0: + /@jest/console/29.5.0: resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2169,7 +2093,7 @@ packages: slash: 3.0.0 dev: true - /@jest/core@29.5.0(ts-node@10.9.1): + /@jest/core/29.5.0_ts-node@10.9.1: resolution: {integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2190,7 +2114,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.5.0 - jest-config: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + jest-config: 29.5.0_rrli7kzx2akox3oq6aahu3rvje jest-haste-map: 29.5.0 jest-message-util: 29.5.0 jest-regex-util: 29.4.3 @@ -2211,14 +2135,14 @@ packages: - ts-node dev: true - /@jest/create-cache-key-function@27.5.1: + /@jest/create-cache-key-function/27.5.1: resolution: {integrity: sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 dev: true - /@jest/environment@29.5.0: + /@jest/environment/29.5.0: resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2228,14 +2152,14 @@ packages: jest-mock: 29.5.0 dev: true - /@jest/expect-utils@29.5.0: + /@jest/expect-utils/29.5.0: resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.3 dev: true - /@jest/expect@29.5.0: + /@jest/expect/29.5.0: resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2245,7 +2169,7 @@ packages: - supports-color dev: true - /@jest/fake-timers@29.5.0: + /@jest/fake-timers/29.5.0: resolution: {integrity: sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2257,7 +2181,7 @@ packages: jest-util: 29.5.0 dev: true - /@jest/globals@29.5.0: + /@jest/globals/29.5.0: resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2269,7 +2193,7 @@ packages: - supports-color dev: true - /@jest/reporters@29.5.0: + /@jest/reporters/29.5.0: resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2306,14 +2230,14 @@ packages: - supports-color dev: true - /@jest/schemas@29.4.3: + /@jest/schemas/29.4.3: resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@sinclair/typebox': 0.25.24 dev: true - /@jest/source-map@29.4.3: + /@jest/source-map/29.4.3: resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2322,7 +2246,7 @@ packages: graceful-fs: 4.2.11 dev: true - /@jest/test-result@29.5.0: + /@jest/test-result/29.5.0: resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2332,7 +2256,7 @@ packages: collect-v8-coverage: 1.0.1 dev: true - /@jest/test-sequencer@29.5.0: + /@jest/test-sequencer/29.5.0: resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2342,7 +2266,7 @@ packages: slash: 3.0.0 dev: true - /@jest/transform@29.5.0: + /@jest/transform/29.5.0: resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2365,7 +2289,7 @@ packages: - supports-color dev: true - /@jest/types@27.5.1: + /@jest/types/27.5.1: resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: @@ -2376,7 +2300,7 @@ packages: chalk: 4.1.2 dev: true - /@jest/types@29.5.0: + /@jest/types/29.5.0: resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2388,7 +2312,7 @@ packages: chalk: 4.1.2 dev: true - /@jridgewell/gen-mapping@0.3.3: + /@jridgewell/gen-mapping/0.3.3: resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} dependencies: @@ -2397,56 +2321,56 @@ packages: '@jridgewell/trace-mapping': 0.3.18 dev: true - /@jridgewell/resolve-uri@3.1.0: + /@jridgewell/resolve-uri/3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/resolve-uri@3.1.1: + /@jridgewell/resolve-uri/3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/set-array@1.1.2: + /@jridgewell/set-array/1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/source-map@0.3.3: + /@jridgewell/source-map/0.3.3: resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} dependencies: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 dev: true - /@jridgewell/sourcemap-codec@1.4.14: + /@jridgewell/sourcemap-codec/1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true - /@jridgewell/sourcemap-codec@1.4.15: + /@jridgewell/sourcemap-codec/1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true - /@jridgewell/trace-mapping@0.3.18: + /@jridgewell/trace-mapping/0.3.18: resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@jridgewell/trace-mapping@0.3.9: + /@jridgewell/trace-mapping/0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /@mswjs/cookies@1.0.0: + /@mswjs/cookies/1.0.0: resolution: {integrity: sha512-TdXoBdI+h/EDTsVLCX/34s4+9U0sWi92qFnIGUEikpMCSKLhBeujovyYVSoORNbYgsBH5ga7/tfxyWcEZAxiYA==} engines: {node: '>=14'} dev: false - /@mswjs/interceptors@0.22.13: + /@mswjs/interceptors/0.22.13: resolution: {integrity: sha512-JMnl/eoF3cne6kvtJo9vZTpYum3ES1X6okfmSMRpvrCaodulN+QfVQ79Oyb/fZkHuI+pYpLVrTjGpBTOmZ6xcw==} engines: {node: '>=18'} dependencies: @@ -2458,7 +2382,7 @@ packages: strict-event-emitter: 0.5.0 dev: false - /@nodelib/fs.scandir@2.1.5: + /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} dependencies: @@ -2466,12 +2390,12 @@ packages: run-parallel: 1.2.0 dev: true - /@nodelib/fs.stat@2.0.5: + /@nodelib/fs.stat/2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} dev: true - /@nodelib/fs.walk@1.2.8: + /@nodelib/fs.walk/1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} dependencies: @@ -2479,25 +2403,25 @@ packages: fastq: 1.15.0 dev: true - /@open-draft/deferred-promise@2.1.0: + /@open-draft/deferred-promise/2.1.0: resolution: {integrity: sha512-Rzd5JrXZX8zErHzgcGyngh4fmEbSHqTETdGj9rXtejlqMIgXFlyKBA7Jn1Xp0Ls0M0Y22+xHcWiEzbmdWl0BOA==} dev: false - /@open-draft/logger@0.3.0: + /@open-draft/logger/0.3.0: resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} dependencies: is-node-process: 1.2.0 outvariant: 1.4.0 dev: false - /@open-draft/test-server@0.4.2: + /@open-draft/test-server/0.4.2: resolution: {integrity: sha512-J9wbdQkPx5WKcDNtgfnXsx5ew4UJd6BZyGr89YlHeaUkOShkO2iO5QIyCCsG4qpjIvr2ZTkEYJA9ujOXXyO6Pg==} dependencies: '@types/body-parser': 1.19.2 '@types/cors': 2.8.13 '@types/express': 4.17.17 cors: 2.8.5 - express: 4.18.2(supports-color@6.1.0) + express: 4.18.2 outvariant: 1.4.0 socket.io: 4.6.1 transitivePeerDependencies: @@ -2506,10 +2430,10 @@ packages: - utf-8-validate dev: true - /@open-draft/until@2.1.0: + /@open-draft/until/2.1.0: resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - /@ossjs/release@0.4.0: + /@ossjs/release/0.4.0: resolution: {integrity: sha512-cfW+gk3GdVqjrawkAG8q6MXPmTJouwwPegmBAVNvYvKq/tKQHgluxiueTlNTdJRryI76rpe6y5+EXlHdisrwdg==} hasBin: true dependencies: @@ -2538,7 +2462,7 @@ packages: - encoding dev: true - /@playwright/test@1.32.3: + /@playwright/test/1.32.3: resolution: {integrity: sha512-BvWNvK0RfBriindxhLVabi8BRe3X0J9EVjKlcmhxjg4giWBD/xleLcg2dz7Tx0agu28rczjNIPQWznwzDwVsZQ==} engines: {node: '>=14'} hasBin: true @@ -2549,13 +2473,13 @@ packages: fsevents: 2.3.2 dev: true - /@rollup/plugin-node-resolve@13.3.0(rollup@2.79.1): + /@rollup/plugin-node-resolve/13.3.0_rollup@2.79.1: resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==} engines: {node: '>= 10.0.0'} peerDependencies: rollup: ^2.42.0 dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + '@rollup/pluginutils': 3.1.0_rollup@2.79.1 '@types/resolve': 1.17.1 deepmerge: 4.3.1 is-builtin-module: 3.2.1 @@ -2564,7 +2488,7 @@ packages: rollup: 2.79.1 dev: true - /@rollup/pluginutils@3.1.0(rollup@2.79.1): + /@rollup/pluginutils/3.1.0_rollup@2.79.1: resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} engines: {node: '>= 8.0.0'} peerDependencies: @@ -2576,26 +2500,26 @@ packages: rollup: 2.79.1 dev: true - /@sinclair/typebox@0.25.24: + /@sinclair/typebox/0.25.24: resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} dev: true - /@sinonjs/commons@2.0.0: + /@sinonjs/commons/2.0.0: resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} dependencies: type-detect: 4.0.8 dev: true - /@sinonjs/fake-timers@10.0.2: + /@sinonjs/fake-timers/10.0.2: resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} dependencies: '@sinonjs/commons': 2.0.0 dev: true - /@socket.io/component-emitter@3.1.0: + /@socket.io/component-emitter/3.1.0: resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} - /@swc/core-darwin-arm64@1.3.49: + /@swc/core-darwin-arm64/1.3.49: resolution: {integrity: sha512-g7aIfXh6uPHmhLXdjXQq5t3HAyS/EdvujasW1DIS5k8UqOBaSoCcSGtLIjzcLv3KujqNfYcm118E+12H0nY6fQ==} engines: {node: '>=10'} cpu: [arm64] @@ -2604,7 +2528,7 @@ packages: dev: true optional: true - /@swc/core-darwin-x64@1.3.49: + /@swc/core-darwin-x64/1.3.49: resolution: {integrity: sha512-eSIxVX0YDw40Bre5sAx2BV3DzdIGzmQvCf2yiBvLqiiL6GC0mmuDeWbUCAzdUX6fJ6FUVEBMUVqNOc9oJ2/d5w==} engines: {node: '>=10'} cpu: [x64] @@ -2613,7 +2537,7 @@ packages: dev: true optional: true - /@swc/core-linux-arm-gnueabihf@1.3.49: + /@swc/core-linux-arm-gnueabihf/1.3.49: resolution: {integrity: sha512-8mj3IcRVr/OJY0mVITz6Z5osNAMJK5GiKDaZ+3QejPLbl6aiu4sH4GmTHDRN14RnaVXOpecsGcUoQmNoNa3u3w==} engines: {node: '>=10'} cpu: [arm] @@ -2622,7 +2546,7 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-gnu@1.3.49: + /@swc/core-linux-arm64-gnu/1.3.49: resolution: {integrity: sha512-Rmg9xw6tmpOpf6GKKjpHQGmjfHzqSths5ebI2ahrHlhekzZF2HYmPkVw4bHda8Bja6mbaw8FVBgBHjPU8mMeDA==} engines: {node: '>=10'} cpu: [arm64] @@ -2631,7 +2555,7 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-musl@1.3.49: + /@swc/core-linux-arm64-musl/1.3.49: resolution: {integrity: sha512-nlKPYMogAI3Aak6Mlkag8/2AlHAZ/DpH7RjhfMazsaGhD/sQOmYdyY9Al69ejpa419YJuREeeeLoojFlSsd30g==} engines: {node: '>=10'} cpu: [arm64] @@ -2640,7 +2564,7 @@ packages: dev: true optional: true - /@swc/core-linux-x64-gnu@1.3.49: + /@swc/core-linux-x64-gnu/1.3.49: resolution: {integrity: sha512-QOyeJQ6NVi73SJcizbwvIZTiGA/N+BxX9liRrvibumaQmRh8fWjJiLNsv3ODSHeuonak7E8Bf7a7NnSTyu48Mw==} engines: {node: '>=10'} cpu: [x64] @@ -2649,7 +2573,7 @@ packages: dev: true optional: true - /@swc/core-linux-x64-musl@1.3.49: + /@swc/core-linux-x64-musl/1.3.49: resolution: {integrity: sha512-WlDMz+SOpYC9O/ZBUw1oiyWI7HyUCMlf/HS8Fy/kRI3eGoGCUxVTCJ1mP57GdQr4Wg32Y/ZpO2KSNQFWnT8mAw==} engines: {node: '>=10'} cpu: [x64] @@ -2658,7 +2582,7 @@ packages: dev: true optional: true - /@swc/core-win32-arm64-msvc@1.3.49: + /@swc/core-win32-arm64-msvc/1.3.49: resolution: {integrity: sha512-41LZOeI94Za3twib8KOIjnHYAZ+nkBFmboaREsFR1760S7jiMVywqWX8nFZvn/CXj15Fjjgdgyuig+zMREwXwQ==} engines: {node: '>=10'} cpu: [arm64] @@ -2667,7 +2591,7 @@ packages: dev: true optional: true - /@swc/core-win32-ia32-msvc@1.3.49: + /@swc/core-win32-ia32-msvc/1.3.49: resolution: {integrity: sha512-IdqLPoMKssyAoOCZdNXmnAd6/uyx+Hb9KSfZUHepZaNfwMy6J5XXrOsbYs3v53FH8MtekUUdV+mMX4me9bcv9w==} engines: {node: '>=10'} cpu: [ia32] @@ -2676,7 +2600,7 @@ packages: dev: true optional: true - /@swc/core-win32-x64-msvc@1.3.49: + /@swc/core-win32-x64-msvc/1.3.49: resolution: {integrity: sha512-7Fqjo5pS3uIohhSbYSaR0+e/bJdxmQb4oG97FIh5qvlCCGQaQ9UiaEeYy4uK0Ad+Menum1IXCAEiG7RHcl6Eyw==} engines: {node: '>=10'} cpu: [x64] @@ -2685,7 +2609,7 @@ packages: dev: true optional: true - /@swc/core@1.3.49: + /@swc/core/1.3.49: resolution: {integrity: sha512-br44ZHOfE9YyRGcORSLkHFQHTvhwRcaithBJ1Q5y5iMGpLbH0Wai3GN49L60RvmGwxNJfWzT+E7+rNNR7ewKgA==} engines: {node: '>=10'} requiresBuild: true @@ -2707,7 +2631,7 @@ packages: '@swc/core-win32-x64-msvc': 1.3.49 dev: true - /@swc/jest@0.2.24(@swc/core@1.3.49): + /@swc/jest/0.2.24_@swc+core@1.3.49: resolution: {integrity: sha512-fwgxQbM1wXzyKzl1+IW0aGrRvAA8k0Y3NxFhKigbPjOJ4mCKnWEcNX9HQS3gshflcxq8YKhadabGUVfdwjCr6Q==} engines: {npm: '>= 7.0.0'} peerDependencies: @@ -2718,34 +2642,34 @@ packages: jsonc-parser: 3.2.0 dev: true - /@tootallnate/once@2.0.0: + /@tootallnate/once/2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} dev: true - /@tsconfig/node10@1.0.9: + /@tsconfig/node10/1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true - /@tsconfig/node12@1.0.11: + /@tsconfig/node12/1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} dev: true - /@tsconfig/node14@1.0.3: + /@tsconfig/node14/1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} dev: true - /@tsconfig/node16@1.0.3: + /@tsconfig/node16/1.0.3: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true - /@types/accepts@1.3.5: + /@types/accepts/1.3.5: resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==} dependencies: '@types/node': 18.15.11 dev: true - /@types/babel__core@7.20.0: + /@types/babel__core/7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: '@babel/parser': 7.21.4 @@ -2755,56 +2679,56 @@ packages: '@types/babel__traverse': 7.18.3 dev: true - /@types/babel__generator@7.6.4: + /@types/babel__generator/7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: '@babel/types': 7.21.4 dev: true - /@types/babel__template@7.4.1: + /@types/babel__template/7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: '@babel/parser': 7.21.4 '@babel/types': 7.21.4 dev: true - /@types/babel__traverse@7.18.3: + /@types/babel__traverse/7.18.3: resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: '@babel/types': 7.21.4 dev: true - /@types/body-parser@1.19.2: + /@types/body-parser/1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 '@types/node': 18.15.11 dev: true - /@types/command-line-args@5.2.0: + /@types/command-line-args/5.2.0: resolution: {integrity: sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==} dev: true - /@types/connect@3.4.35: + /@types/connect/3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: '@types/node': 18.15.11 dev: true - /@types/content-disposition@0.5.5: + /@types/content-disposition/0.5.5: resolution: {integrity: sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==} dev: true - /@types/conventional-commits-parser@3.0.3: + /@types/conventional-commits-parser/3.0.3: resolution: {integrity: sha512-aoUKfRQYvGMH+spFpOTX9jO4nZoz9/BKp4hlHPxL3Cj2r2Xj+jEcwlXtFIyZr5uL8bh1nbWynDEYaAota+XqPg==} dependencies: '@types/node': 18.15.11 dev: true - /@types/cookie@0.4.1: + /@types/cookie/0.4.1: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} - /@types/cookies@0.7.7: + /@types/cookies/0.7.7: resolution: {integrity: sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==} dependencies: '@types/connect': 3.4.35 @@ -2813,40 +2737,40 @@ packages: '@types/node': 18.15.11 dev: true - /@types/cors@2.8.13: + /@types/cors/2.8.13: resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==} dependencies: '@types/node': 18.15.11 - /@types/debug@4.1.7: + /@types/debug/4.1.7: resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} dependencies: '@types/ms': 0.7.31 dev: true - /@types/eslint-scope@3.7.4: + /@types/eslint-scope/3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: '@types/eslint': 8.37.0 '@types/estree': 1.0.0 dev: true - /@types/eslint@8.37.0: + /@types/eslint/8.37.0: resolution: {integrity: sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==} dependencies: '@types/estree': 1.0.0 '@types/json-schema': 7.0.11 dev: true - /@types/estree@0.0.39: + /@types/estree/0.0.39: resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} dev: true - /@types/estree@1.0.0: + /@types/estree/1.0.0: resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} dev: true - /@types/express-serve-static-core@4.17.33: + /@types/express-serve-static-core/4.17.33: resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} dependencies: '@types/node': 18.15.11 @@ -2854,7 +2778,7 @@ packages: '@types/range-parser': 1.2.4 dev: true - /@types/express@4.17.17: + /@types/express/4.17.17: resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} dependencies: '@types/body-parser': 1.19.2 @@ -2863,72 +2787,72 @@ packages: '@types/serve-static': 1.15.1 dev: true - /@types/fs-extra@9.0.13: + /@types/fs-extra/9.0.13: resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} dependencies: '@types/node': 18.15.11 dev: true - /@types/glob@7.2.0: + /@types/glob/7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 '@types/node': 18.15.11 dev: true - /@types/glob@8.1.0: + /@types/glob/8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} dependencies: '@types/minimatch': 5.1.2 '@types/node': 18.15.11 dev: true - /@types/graceful-fs@4.1.6: + /@types/graceful-fs/4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: '@types/node': 18.15.11 dev: true - /@types/http-assert@1.5.3: + /@types/http-assert/1.5.3: resolution: {integrity: sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==} dev: true - /@types/http-errors@2.0.1: + /@types/http-errors/2.0.1: resolution: {integrity: sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==} dev: true - /@types/issue-parser@3.0.1: + /@types/issue-parser/3.0.1: resolution: {integrity: sha512-cdggbeJIxWoIB8CB57BvenONrQZcBuEf2uddxMRNIy2jgdcnSxnY71tQcNrxdqTG4VmQP5fdLLE9E+jCnMK0Fg==} dev: true - /@types/istanbul-lib-coverage@2.0.4: + /@types/istanbul-lib-coverage/2.0.4: resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} dev: true - /@types/istanbul-lib-report@3.0.0: + /@types/istanbul-lib-report/3.0.0: resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} dependencies: '@types/istanbul-lib-coverage': 2.0.4 dev: true - /@types/istanbul-reports@3.0.1: + /@types/istanbul-reports/3.0.1: resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} dependencies: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest@29.5.0: + /@types/jest/29.5.0: resolution: {integrity: sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg==} dependencies: expect: 29.5.0 pretty-format: 29.5.0 dev: true - /@types/js-levenshtein@1.1.1: + /@types/js-levenshtein/1.1.1: resolution: {integrity: sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==} dev: false - /@types/jsdom@20.0.1: + /@types/jsdom/20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: '@types/node': 18.15.11 @@ -2936,25 +2860,25 @@ packages: parse5: 7.1.2 dev: true - /@types/json-bigint@1.0.1: + /@types/json-bigint/1.0.1: resolution: {integrity: sha512-zpchZLNsNuzJHi6v64UBoFWAvQlPhch7XAi36FkH6tL1bbbmimIF+cS7vwkzY4u5RaSWMoflQfu+TshMPPw8uw==} dev: true - /@types/json-schema@7.0.11: + /@types/json-schema/7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true - /@types/keygrip@1.0.2: + /@types/keygrip/1.0.2: resolution: {integrity: sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==} dev: true - /@types/koa-compose@3.2.5: + /@types/koa-compose/3.2.5: resolution: {integrity: sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==} dependencies: '@types/koa': 2.13.6 dev: true - /@types/koa@2.13.6: + /@types/koa/2.13.6: resolution: {integrity: sha512-diYUfp/GqfWBAiwxHtYJ/FQYIXhlEhlyaU7lB/bWQrx4Il9lCET5UwpFy3StOAohfsxxvEQ11qIJgT1j2tfBvw==} dependencies: '@types/accepts': 1.3.5 @@ -2967,136 +2891,136 @@ packages: '@types/node': 18.15.11 dev: true - /@types/mime@3.0.1: + /@types/mime/3.0.1: resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} dev: true - /@types/minimatch@5.1.2: + /@types/minimatch/5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true - /@types/minimist@1.2.2: + /@types/minimist/1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true - /@types/ms@0.7.31: + /@types/ms/0.7.31: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} dev: true - /@types/mustache@4.2.2: + /@types/mustache/4.2.2: resolution: {integrity: sha512-MUSpfpW0yZbTgjekDbH0shMYBUD+X/uJJJMm9LXN1d5yjl5lCY1vN/eWKD6D1tOtjA6206K0zcIPnUaFMurdNA==} dev: true - /@types/node-fetch@2.6.3: + /@types/node-fetch/2.6.3: resolution: {integrity: sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==} dependencies: '@types/node': 18.15.11 form-data: 3.0.1 dev: true - /@types/node@16.18.23: + /@types/node/16.18.23: resolution: {integrity: sha512-XAMpaw1s1+6zM+jn2tmw8MyaRDIJfXxqmIQIS0HfoGYPuf7dUWeiUKopwq13KFX9lEp1+THGtlaaYx39Nxr58g==} dev: true - /@types/node@18.15.11: + /@types/node/18.15.11: resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} - /@types/normalize-package-data@2.4.1: + /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true - /@types/parse-json@4.0.0: + /@types/parse-json/4.0.0: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} dev: true - /@types/parse5@6.0.3: + /@types/parse5/6.0.3: resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} dev: true - /@types/prettier@2.7.2: + /@types/prettier/2.7.2: resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} dev: true - /@types/puppeteer@5.4.7: + /@types/puppeteer/5.4.7: resolution: {integrity: sha512-JdGWZZYL0vKapXF4oQTC5hLVNfOgdPrqeZ1BiQnGk5cB7HeE91EWUiTdVSdQPobRN8rIcdffjiOgCYJ/S8QrnQ==} dependencies: '@types/node': 18.15.11 dev: true - /@types/qs@6.9.7: + /@types/qs/6.9.7: resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} dev: true - /@types/range-parser@1.2.4: + /@types/range-parser/1.2.4: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} dev: true - /@types/rc@1.2.1: + /@types/rc/1.2.1: resolution: {integrity: sha512-+TRLFmHLnpoV0uw4O/PzqMbPT6bhQM0q2KO0l+R7M3sHYRndPpNL6kv8p7Ee9ZxgQ6noYB18/t+heQi7eijOHA==} dependencies: '@types/minimist': 1.2.2 dev: true - /@types/registry-auth-token@4.2.1: + /@types/registry-auth-token/4.2.1: resolution: {integrity: sha512-VtTUcUaJGiJtlBKYwwFIOSvrcnuKmpPGO+x56XijNZnaDpnzKh2VwoTw5hewrOMW2BgjoU+uFbVAvSCW2FpWmA==} dev: true - /@types/resolve@1.17.1: + /@types/resolve/1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: '@types/node': 18.15.11 dev: true - /@types/semver@7.3.13: + /@types/semver/7.3.13: resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} dev: true - /@types/serve-static@1.15.1: + /@types/serve-static/1.15.1: resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} dependencies: '@types/mime': 3.0.1 '@types/node': 18.15.11 dev: true - /@types/stack-utils@2.0.1: + /@types/stack-utils/2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} dev: true - /@types/statuses@2.0.1: + /@types/statuses/2.0.1: resolution: {integrity: sha512-vVRgv7WXbhIZzILgr58b4Ki2uqpN/dlVCUBWCMkPbMDlV1CrQrgCl5hnIoUlMrgymGcTmdfVqbs1yWj/IRIRtQ==} dev: false - /@types/tough-cookie@4.0.2: + /@types/tough-cookie/4.0.2: resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} dev: true - /@types/uuid@8.3.4: + /@types/uuid/8.3.4: resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} dev: true - /@types/ws@7.4.7: + /@types/ws/7.4.7: resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} dependencies: '@types/node': 18.15.11 dev: true - /@types/yargs-parser@21.0.0: + /@types/yargs-parser/21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true - /@types/yargs@16.0.5: + /@types/yargs/16.0.5: resolution: {integrity: sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==} dependencies: '@types/yargs-parser': 21.0.0 dev: true - /@types/yargs@17.0.24: + /@types/yargs/17.0.24: resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} dependencies: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin@5.58.0(@typescript-eslint/parser@5.58.0)(eslint@7.32.0)(typescript@5.0.4): + /@typescript-eslint/eslint-plugin/5.58.0_ug56riyzsilszklzuxgwlsssqe: resolution: {integrity: sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3108,23 +3032,23 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.5.0 - '@typescript-eslint/parser': 5.58.0(eslint@7.32.0)(typescript@5.0.4) + '@typescript-eslint/parser': 5.58.0_cgdknpc562nnyruteofhkegnom '@typescript-eslint/scope-manager': 5.58.0 - '@typescript-eslint/type-utils': 5.58.0(eslint@7.32.0)(typescript@5.0.4) - '@typescript-eslint/utils': 5.58.0(eslint@7.32.0)(typescript@5.0.4) - debug: 4.3.4(supports-color@6.1.0) + '@typescript-eslint/type-utils': 5.58.0_cgdknpc562nnyruteofhkegnom + '@typescript-eslint/utils': 5.58.0_cgdknpc562nnyruteofhkegnom + debug: 4.3.4 eslint: 7.32.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 semver: 7.4.0 - tsutils: 3.21.0(typescript@5.0.4) + tsutils: 3.21.0_typescript@5.0.4 typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.58.0(eslint@7.32.0)(typescript@5.0.4): + /@typescript-eslint/parser/5.58.0_cgdknpc562nnyruteofhkegnom: resolution: {integrity: sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3136,15 +3060,15 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.58.0 '@typescript-eslint/types': 5.58.0 - '@typescript-eslint/typescript-estree': 5.58.0(typescript@5.0.4) - debug: 4.3.4(supports-color@6.1.0) + '@typescript-eslint/typescript-estree': 5.58.0_typescript@5.0.4 + debug: 4.3.4 eslint: 7.32.0 typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@5.58.0: + /@typescript-eslint/scope-manager/5.58.0: resolution: {integrity: sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -3152,7 +3076,7 @@ packages: '@typescript-eslint/visitor-keys': 5.58.0 dev: true - /@typescript-eslint/type-utils@5.58.0(eslint@7.32.0)(typescript@5.0.4): + /@typescript-eslint/type-utils/5.58.0_cgdknpc562nnyruteofhkegnom: resolution: {integrity: sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3162,22 +3086,22 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.58.0(typescript@5.0.4) - '@typescript-eslint/utils': 5.58.0(eslint@7.32.0)(typescript@5.0.4) - debug: 4.3.4(supports-color@6.1.0) + '@typescript-eslint/typescript-estree': 5.58.0_typescript@5.0.4 + '@typescript-eslint/utils': 5.58.0_cgdknpc562nnyruteofhkegnom + debug: 4.3.4 eslint: 7.32.0 - tsutils: 3.21.0(typescript@5.0.4) + tsutils: 3.21.0_typescript@5.0.4 typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.58.0: + /@typescript-eslint/types/5.58.0: resolution: {integrity: sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@5.58.0(typescript@5.0.4): + /@typescript-eslint/typescript-estree/5.58.0_typescript@5.0.4: resolution: {integrity: sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3188,28 +3112,28 @@ packages: dependencies: '@typescript-eslint/types': 5.58.0 '@typescript-eslint/visitor-keys': 5.58.0 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.4.0 - tsutils: 3.21.0(typescript@5.0.4) + tsutils: 3.21.0_typescript@5.0.4 typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.58.0(eslint@7.32.0)(typescript@5.0.4): + /@typescript-eslint/utils/5.58.0_cgdknpc562nnyruteofhkegnom: resolution: {integrity: sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@7.32.0) + '@eslint-community/eslint-utils': 4.4.0_eslint@7.32.0 '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 '@typescript-eslint/scope-manager': 5.58.0 '@typescript-eslint/types': 5.58.0 - '@typescript-eslint/typescript-estree': 5.58.0(typescript@5.0.4) + '@typescript-eslint/typescript-estree': 5.58.0_typescript@5.0.4 eslint: 7.32.0 eslint-scope: 5.1.1 semver: 7.4.0 @@ -3218,7 +3142,7 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@5.58.0: + /@typescript-eslint/visitor-keys/5.58.0: resolution: {integrity: sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -3226,14 +3150,14 @@ packages: eslint-visitor-keys: 3.4.0 dev: true - /@web/config-loader@0.1.3: + /@web/config-loader/0.1.3: resolution: {integrity: sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==} engines: {node: '>=10.0.0'} dependencies: semver: 7.4.0 dev: true - /@web/dev-server-core@0.4.1: + /@web/dev-server-core/0.4.1: resolution: {integrity: sha512-KdYwejXZwIZvb6tYMCqU7yBiEOPfKLQ3V9ezqqEz8DA9V9R3oQWaowckvCpFB9IxxPfS/P8/59OkdzGKQjcIUw==} engines: {node: '>=10.0.0'} dependencies: @@ -3261,11 +3185,11 @@ packages: - utf-8-validate dev: true - /@web/dev-server-rollup@0.4.1: + /@web/dev-server-rollup/0.4.1: resolution: {integrity: sha512-Ebsv7Ovd9MufeH3exvikBJ7GmrZA5OmHnOgaiHcwMJ2eQBJA5/I+/CbRjsLX97ICj/ZwZG//p2ITRz8W3UfSqg==} engines: {node: '>=10.0.0'} dependencies: - '@rollup/plugin-node-resolve': 13.3.0(rollup@2.79.1) + '@rollup/plugin-node-resolve': 13.3.0_rollup@2.79.1 '@web/dev-server-core': 0.4.1 nanocolors: 0.2.13 parse5: 6.0.1 @@ -3277,7 +3201,7 @@ packages: - utf-8-validate dev: true - /@web/dev-server@0.1.38: + /@web/dev-server/0.1.38: resolution: {integrity: sha512-WUq7Zi8KeJ5/UZmmpZ+kzUpUlFlMP/rcreJKYg9Lxiz998KYl4G5Rv24akX0piTuqXG7r6h+zszg8V/hdzjCoA==} engines: {node: '>=10.0.0'} hasBin: true @@ -3295,14 +3219,14 @@ packages: ip: 1.1.8 nanocolors: 0.2.13 open: 8.4.2 - portfinder: 1.0.32(supports-color@6.1.0) + portfinder: 1.0.32 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate dev: true - /@web/parse5-utils@1.3.1: + /@web/parse5-utils/1.3.1: resolution: {integrity: sha512-haCgDchZrAOB9EhBJ5XqiIjBMsS/exsM5Ru7sCSyNkXVEJWskyyKuKMFk66BonnIGMPpDtqDrTUfYEis5Zi3XA==} engines: {node: '>=10.0.0'} dependencies: @@ -3310,26 +3234,26 @@ packages: parse5: 6.0.1 dev: true - /@webassemblyjs/ast@1.11.1: + /@webassemblyjs/ast/1.11.1: resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} dependencies: '@webassemblyjs/helper-numbers': 1.11.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.1 dev: true - /@webassemblyjs/floating-point-hex-parser@1.11.1: + /@webassemblyjs/floating-point-hex-parser/1.11.1: resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==} dev: true - /@webassemblyjs/helper-api-error@1.11.1: + /@webassemblyjs/helper-api-error/1.11.1: resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==} dev: true - /@webassemblyjs/helper-buffer@1.11.1: + /@webassemblyjs/helper-buffer/1.11.1: resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==} dev: true - /@webassemblyjs/helper-numbers@1.11.1: + /@webassemblyjs/helper-numbers/1.11.1: resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==} dependencies: '@webassemblyjs/floating-point-hex-parser': 1.11.1 @@ -3337,11 +3261,11 @@ packages: '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/helper-wasm-bytecode@1.11.1: + /@webassemblyjs/helper-wasm-bytecode/1.11.1: resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==} dev: true - /@webassemblyjs/helper-wasm-section@1.11.1: + /@webassemblyjs/helper-wasm-section/1.11.1: resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3350,23 +3274,23 @@ packages: '@webassemblyjs/wasm-gen': 1.11.1 dev: true - /@webassemblyjs/ieee754@1.11.1: + /@webassemblyjs/ieee754/1.11.1: resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==} dependencies: '@xtuc/ieee754': 1.2.0 dev: true - /@webassemblyjs/leb128@1.11.1: + /@webassemblyjs/leb128/1.11.1: resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==} dependencies: '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/utf8@1.11.1: + /@webassemblyjs/utf8/1.11.1: resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==} dev: true - /@webassemblyjs/wasm-edit@1.11.1: + /@webassemblyjs/wasm-edit/1.11.1: resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3379,7 +3303,7 @@ packages: '@webassemblyjs/wast-printer': 1.11.1 dev: true - /@webassemblyjs/wasm-gen@1.11.1: + /@webassemblyjs/wasm-gen/1.11.1: resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3389,7 +3313,7 @@ packages: '@webassemblyjs/utf8': 1.11.1 dev: true - /@webassemblyjs/wasm-opt@1.11.1: + /@webassemblyjs/wasm-opt/1.11.1: resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3398,7 +3322,7 @@ packages: '@webassemblyjs/wasm-parser': 1.11.1 dev: true - /@webassemblyjs/wasm-parser@1.11.1: + /@webassemblyjs/wasm-parser/1.11.1: resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3409,22 +3333,22 @@ packages: '@webassemblyjs/utf8': 1.11.1 dev: true - /@webassemblyjs/wast-printer@1.11.1: + /@webassemblyjs/wast-printer/1.11.1: resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==} dependencies: '@webassemblyjs/ast': 1.11.1 '@xtuc/long': 4.2.2 dev: true - /@xtuc/ieee754@1.2.0: + /@xtuc/ieee754/1.2.0: resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} dev: true - /@xtuc/long@4.2.2: + /@xtuc/long/4.2.2: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true - /JSONStream@1.3.5: + /JSONStream/1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true dependencies: @@ -3432,25 +3356,25 @@ packages: through: 2.3.8 dev: true - /abab@2.0.6: + /abab/2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} dev: true - /accepts@1.3.8: + /accepts/1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} dependencies: mime-types: 2.1.35 negotiator: 0.6.3 - /acorn-globals@7.0.1: + /acorn-globals/7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: acorn: 8.8.2 acorn-walk: 8.2.0 dev: true - /acorn-import-assertions@1.8.0(acorn@8.8.2): + /acorn-import-assertions/1.8.0_acorn@8.8.2: resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} peerDependencies: acorn: ^8 @@ -3458,7 +3382,7 @@ packages: acorn: 8.8.2 dev: true - /acorn-jsx@5.3.2(acorn@7.4.1): + /acorn-jsx/5.3.2_acorn@7.4.1: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -3466,33 +3390,33 @@ packages: acorn: 7.4.1 dev: true - /acorn-walk@8.2.0: + /acorn-walk/8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} dev: true - /acorn@7.4.1: + /acorn/7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /acorn@8.8.2: + /acorn/8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /agent-base@6.0.2: + /agent-base/6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true - /aggregate-error@3.1.0: + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} dependencies: @@ -3500,7 +3424,7 @@ packages: indent-string: 4.0.0 dev: true - /ajv-errors@1.0.1(ajv@6.12.6): + /ajv-errors/1.0.1_ajv@6.12.6: resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==} peerDependencies: ajv: '>=5.0.0' @@ -3508,7 +3432,7 @@ packages: ajv: 6.12.6 dev: true - /ajv-keywords@3.5.2(ajv@6.12.6): + /ajv-keywords/3.5.2_ajv@6.12.6: resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: ajv: ^6.9.1 @@ -3516,7 +3440,7 @@ packages: ajv: 6.12.6 dev: true - /ajv@6.12.6: + /ajv/6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 @@ -3525,7 +3449,7 @@ packages: uri-js: 4.4.1 dev: true - /ajv@8.12.0: + /ajv/8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} dependencies: fast-deep-equal: 3.1.3 @@ -3534,97 +3458,97 @@ packages: uri-js: 4.4.1 dev: true - /ansi-colors@3.2.4: + /ansi-colors/3.2.4: resolution: {integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==} engines: {node: '>=6'} dev: true - /ansi-colors@4.1.3: + /ansi-colors/4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} dev: true - /ansi-escapes@4.3.2: + /ansi-escapes/4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} dependencies: type-fest: 0.21.3 - /ansi-html-community@0.0.8: + /ansi-html-community/0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} engines: {'0': node >= 0.8.0} hasBin: true dev: true - /ansi-regex@2.1.1: + /ansi-regex/2.1.1: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} engines: {node: '>=0.10.0'} dev: true - /ansi-regex@4.1.1: + /ansi-regex/4.1.1: resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} engines: {node: '>=6'} dev: true - /ansi-regex@5.0.1: + /ansi-regex/5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - /ansi-regex@6.0.1: + /ansi-regex/6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} dev: true - /ansi-styles@3.2.1: + /ansi-styles/3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} dependencies: color-convert: 1.9.3 dev: true - /ansi-styles@4.3.0: + /ansi-styles/4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - /ansi-styles@5.2.0: + /ansi-styles/5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} dev: true - /ansi-styles@6.2.1: + /ansi-styles/6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} dev: true - /any-promise@1.3.0: + /any-promise/1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} dev: true - /anymatch@3.1.3: + /anymatch/3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - /arg@4.1.3: + /arg/4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true - /argparse@1.0.10: + /argparse/1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 dev: true - /argparse@2.0.1: + /argparse/2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true optional: true - /args@5.0.3: + /args/5.0.3: resolution: {integrity: sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==} engines: {node: '>= 6.0.0'} dependencies: @@ -3634,77 +3558,77 @@ packages: mri: 1.1.4 dev: true - /argv-formatter@1.0.0: + /argv-formatter/1.0.0: resolution: {integrity: sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==} dev: true - /arr-diff@4.0.0: + /arr-diff/4.0.0: resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} engines: {node: '>=0.10.0'} dev: true - /arr-flatten@1.1.0: + /arr-flatten/1.1.0: resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} engines: {node: '>=0.10.0'} dev: true - /arr-union@3.1.0: + /arr-union/3.1.0: resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} engines: {node: '>=0.10.0'} dev: true - /array-back@3.1.0: + /array-back/3.1.0: resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} engines: {node: '>=6'} dev: true - /array-back@6.2.2: + /array-back/6.2.2: resolution: {integrity: sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==} engines: {node: '>=12.17'} dev: true - /array-buffer-byte-length@1.0.0: + /array-buffer-byte-length/1.0.0: resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: call-bind: 1.0.2 is-array-buffer: 3.0.2 dev: true - /array-flatten@1.1.1: + /array-flatten/1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: true - /array-flatten@2.1.2: + /array-flatten/2.1.2: resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} dev: true - /array-ify@1.0.0: + /array-ify/1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} dev: true - /array-union@1.0.2: + /array-union/1.0.2: resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} engines: {node: '>=0.10.0'} dependencies: array-uniq: 1.0.3 dev: true - /array-union@2.1.0: + /array-union/2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} dev: true - /array-uniq@1.0.3: + /array-uniq/1.0.3: resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} engines: {node: '>=0.10.0'} dev: true - /array-unique@0.3.2: + /array-unique/0.3.2: resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} engines: {node: '>=0.10.0'} dev: true - /array.prototype.reduce@1.0.5: + /array.prototype.reduce/1.0.5: resolution: {integrity: sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==} engines: {node: '>= 0.4'} dependencies: @@ -3715,85 +3639,85 @@ packages: is-string: 1.0.7 dev: true - /arrify@1.0.1: + /arrify/1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} dev: true - /assign-symbols@1.0.0: + /assign-symbols/1.0.0: resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} engines: {node: '>=0.10.0'} dev: true - /astral-regex@2.0.0: + /astral-regex/2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} dev: true - /async-limiter@1.0.1: + /async-limiter/1.0.1: resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} dev: true - /async@2.6.4: + /async/2.6.4: resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} dependencies: lodash: 4.17.21 dev: true - /asynckit@0.4.0: + /asynckit/0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true - /at-least-node@1.0.0: + /at-least-node/1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} dev: true - /atob@2.1.2: + /atob/2.1.2: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} engines: {node: '>= 4.5.0'} hasBin: true dev: true - /atomic-sleep@1.0.0: + /atomic-sleep/1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} dev: true - /available-typed-arrays@1.0.5: + /available-typed-arrays/1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} dev: true - /babel-helper-evaluate-path@0.5.0: + /babel-helper-evaluate-path/0.5.0: resolution: {integrity: sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==} dev: true - /babel-helper-flip-expressions@0.4.3: + /babel-helper-flip-expressions/0.4.3: resolution: {integrity: sha512-rSrkRW4YQ2ETCWww9gbsWk4N0x1BOtln349Tk0dlCS90oT68WMLyGR7WvaMp3eAnsVrCqdUtC19lo1avyGPejA==} dev: true - /babel-helper-is-nodes-equiv@0.0.1: + /babel-helper-is-nodes-equiv/0.0.1: resolution: {integrity: sha512-ri/nsMFVRqXn7IyT5qW4/hIAGQxuYUFHa3qsxmPtbk6spZQcYlyDogfVpNm2XYOslH/ULS4VEJGUqQX5u7ACQw==} dev: true - /babel-helper-is-void-0@0.4.3: + /babel-helper-is-void-0/0.4.3: resolution: {integrity: sha512-07rBV0xPRM3TM5NVJEOQEkECX3qnHDjaIbFvWYPv+T1ajpUiVLiqTfC+MmiZxY5KOL/Ec08vJdJD9kZiP9UkUg==} dev: true - /babel-helper-mark-eval-scopes@0.4.3: + /babel-helper-mark-eval-scopes/0.4.3: resolution: {integrity: sha512-+d/mXPP33bhgHkdVOiPkmYoeXJ+rXRWi7OdhwpyseIqOS8CmzHQXHUp/+/Qr8baXsT0kjGpMHHofHs6C3cskdA==} dev: true - /babel-helper-remove-or-void@0.4.3: + /babel-helper-remove-or-void/0.4.3: resolution: {integrity: sha512-eYNceYtcGKpifHDir62gHJadVXdg9fAhuZEXiRQnJJ4Yi4oUTpqpNY//1pM4nVyjjDMPYaC2xSf0I+9IqVzwdA==} dev: true - /babel-helper-to-multiple-sequence-expressions@0.5.0: + /babel-helper-to-multiple-sequence-expressions/0.5.0: resolution: {integrity: sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==} dev: true - /babel-jest@29.5.0(@babel/core@7.21.4): + /babel-jest/29.5.0_@babel+core@7.21.4: resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -3803,7 +3727,7 @@ packages: '@jest/transform': 29.5.0 '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.5.0(@babel/core@7.21.4) + babel-preset-jest: 29.5.0_@babel+core@7.21.4 chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -3811,7 +3735,7 @@ packages: - supports-color dev: true - /babel-loader@8.3.0(@babel/core@7.21.4)(webpack@5.79.0): + /babel-loader/8.3.0_c3tfwv7p35clwcmkb5fnkshzei: resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} engines: {node: '>= 8.9'} peerDependencies: @@ -3823,10 +3747,10 @@ packages: loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e dev: true - /babel-minify@0.5.2: + /babel-minify/0.5.2: resolution: {integrity: sha512-H1ExfmvTxKWQZYcty1My6XRhoZm04/5MNb2DdZsC08r7y/rowipC0s9sszKA7jgW9mYYDdFnU68XohB+zP35qQ==} hasBin: true dependencies: @@ -3841,7 +3765,7 @@ packages: - supports-color dev: true - /babel-plugin-istanbul@6.1.1: + /babel-plugin-istanbul/6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: @@ -3854,7 +3778,7 @@ packages: - supports-color dev: true - /babel-plugin-jest-hoist@29.5.0: + /babel-plugin-jest-hoist/29.5.0: resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3864,17 +3788,17 @@ packages: '@types/babel__traverse': 7.18.3 dev: true - /babel-plugin-minify-builtins@0.5.0: + /babel-plugin-minify-builtins/0.5.0: resolution: {integrity: sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==} dev: true - /babel-plugin-minify-constant-folding@0.5.0: + /babel-plugin-minify-constant-folding/0.5.0: resolution: {integrity: sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==} dependencies: babel-helper-evaluate-path: 0.5.0 dev: true - /babel-plugin-minify-dead-code-elimination@0.5.2: + /babel-plugin-minify-dead-code-elimination/0.5.2: resolution: {integrity: sha512-krq9Lwi0QIzyAlcNBXTL4usqUvevB4BzktdEsb8srcXC1AaYqRJiAQw6vdKdJSaXbz6snBvziGr6ch/aoRCfpA==} dependencies: babel-helper-evaluate-path: 0.5.0 @@ -3883,38 +3807,38 @@ packages: lodash: 4.17.21 dev: true - /babel-plugin-minify-flip-comparisons@0.4.3: + /babel-plugin-minify-flip-comparisons/0.4.3: resolution: {integrity: sha512-8hNwgLVeJzpeLVOVArag2DfTkbKodzOHU7+gAZ8mGBFGPQHK6uXVpg3jh5I/F6gfi5Q5usWU2OKcstn1YbAV7A==} dependencies: babel-helper-is-void-0: 0.4.3 dev: true - /babel-plugin-minify-guarded-expressions@0.4.4: + /babel-plugin-minify-guarded-expressions/0.4.4: resolution: {integrity: sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==} dependencies: babel-helper-evaluate-path: 0.5.0 babel-helper-flip-expressions: 0.4.3 dev: true - /babel-plugin-minify-infinity@0.4.3: + /babel-plugin-minify-infinity/0.4.3: resolution: {integrity: sha512-X0ictxCk8y+NvIf+bZ1HJPbVZKMlPku3lgYxPmIp62Dp8wdtbMLSekczty3MzvUOlrk5xzWYpBpQprXUjDRyMA==} dev: true - /babel-plugin-minify-mangle-names@0.5.1: + /babel-plugin-minify-mangle-names/0.5.1: resolution: {integrity: sha512-8KMichAOae2FHlipjNDTo2wz97MdEb2Q0jrn4NIRXzHH7SJ3c5TaNNBkeTHbk9WUsMnqpNUx949ugM9NFWewzw==} dependencies: babel-helper-mark-eval-scopes: 0.4.3 dev: true - /babel-plugin-minify-numeric-literals@0.4.3: + /babel-plugin-minify-numeric-literals/0.4.3: resolution: {integrity: sha512-5D54hvs9YVuCknfWywq0eaYDt7qYxlNwCqW9Ipm/kYeS9gYhJd0Rr/Pm2WhHKJ8DC6aIlDdqSBODSthabLSX3A==} dev: true - /babel-plugin-minify-replace@0.5.0: + /babel-plugin-minify-replace/0.5.0: resolution: {integrity: sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==} dev: true - /babel-plugin-minify-simplify@0.5.1: + /babel-plugin-minify-simplify/0.5.1: resolution: {integrity: sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==} dependencies: babel-helper-evaluate-path: 0.5.0 @@ -3923,117 +3847,117 @@ packages: babel-helper-to-multiple-sequence-expressions: 0.5.0 dev: true - /babel-plugin-minify-type-constructors@0.4.3: + /babel-plugin-minify-type-constructors/0.4.3: resolution: {integrity: sha512-4ADB0irJ/6BeXWHubjCJmrPbzhxDgjphBMjIjxCc25n4NGJ00NsYqwYt+F/OvE9RXx8KaSW7cJvp+iZX436tnQ==} dependencies: babel-helper-is-void-0: 0.4.3 dev: true - /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.21.4): + /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.21.4: resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.21.4 '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.4 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.4): + /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.21.4: resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.4 core-js-compat: 3.30.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.21.4): + /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.21.4: resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.4 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-transform-inline-consecutive-adds@0.4.3: + /babel-plugin-transform-inline-consecutive-adds/0.4.3: resolution: {integrity: sha512-8D104wbzzI5RlxeVPYeQb9QsUyepiH1rAO5hpPpQ6NPRgQLpIVwkS/Nbx944pm4K8Z+rx7CgjPsFACz/VCBN0Q==} dev: true - /babel-plugin-transform-member-expression-literals@6.9.4: + /babel-plugin-transform-member-expression-literals/6.9.4: resolution: {integrity: sha512-Xq9/Rarpj+bjOZSl1nBbZYETsNEDDJSrb6Plb1sS3/36FukWFLLRysgecva5KZECjUJTrJoQqjJgtWToaflk5Q==} dev: true - /babel-plugin-transform-merge-sibling-variables@6.9.5: + /babel-plugin-transform-merge-sibling-variables/6.9.5: resolution: {integrity: sha512-xj/KrWi6/uP+DrD844h66Qh2cZN++iugEIgH8QcIxhmZZPNP6VpOE9b4gP2FFW39xDAY43kCmYMM6U0QNKN8fw==} dev: true - /babel-plugin-transform-minify-booleans@6.9.4: + /babel-plugin-transform-minify-booleans/6.9.4: resolution: {integrity: sha512-9pW9ePng6DZpzGPalcrULuhSCcauGAbn8AeU3bE34HcDkGm8Ldt0ysjGkyb64f0K3T5ilV4mriayOVv5fg0ASA==} dev: true - /babel-plugin-transform-property-literals@6.9.4: + /babel-plugin-transform-property-literals/6.9.4: resolution: {integrity: sha512-Pf8JHTjTPxecqVyL6KSwD/hxGpoTZjiEgV7nCx0KFQsJYM0nuuoCajbg09KRmZWeZbJ5NGTySABYv8b/hY1eEA==} dependencies: esutils: 2.0.3 dev: true - /babel-plugin-transform-regexp-constructors@0.4.3: + /babel-plugin-transform-regexp-constructors/0.4.3: resolution: {integrity: sha512-JjymDyEyRNhAoNFp09y/xGwYVYzT2nWTGrBrWaL6eCg2m+B24qH2jR0AA8V8GzKJTgC8NW6joJmc6nabvWBD/g==} dev: true - /babel-plugin-transform-remove-console@6.9.4: + /babel-plugin-transform-remove-console/6.9.4: resolution: {integrity: sha512-88blrUrMX3SPiGkT1GnvVY8E/7A+k6oj3MNvUtTIxJflFzXTw1bHkuJ/y039ouhFMp2prRn5cQGzokViYi1dsg==} dev: true - /babel-plugin-transform-remove-debugger@6.9.4: + /babel-plugin-transform-remove-debugger/6.9.4: resolution: {integrity: sha512-Kd+eTBYlXfwoFzisburVwrngsrz4xh9I0ppoJnU/qlLysxVBRgI4Pj+dk3X8F5tDiehp3hhP8oarRMT9v2Z3lw==} dev: true - /babel-plugin-transform-remove-undefined@0.5.0: + /babel-plugin-transform-remove-undefined/0.5.0: resolution: {integrity: sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==} dependencies: babel-helper-evaluate-path: 0.5.0 dev: true - /babel-plugin-transform-simplify-comparison-operators@6.9.4: + /babel-plugin-transform-simplify-comparison-operators/6.9.4: resolution: {integrity: sha512-GLInxhGAQWJ9YIdjwF6dAFlmh4U+kN8pL6Big7nkDzHoZcaDQOtBm28atEhQJq6m9GpAovbiGEShKqXv4BSp0A==} dev: true - /babel-plugin-transform-undefined-to-void@6.9.4: + /babel-plugin-transform-undefined-to-void/6.9.4: resolution: {integrity: sha512-D2UbwxawEY1xVc9svYAUZQM2xarwSNXue2qDIx6CeV2EuMGaes/0su78zlIDIAgE7BvnMw4UpmSo9fDy+znghg==} dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.21.4): + /babel-preset-current-node-syntax/1.0.1_@babel+core@7.21.4: resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.21.4 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.4) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.4) - dev: true - - /babel-preset-jest@29.5.0(@babel/core@7.21.4): + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.4 + '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.4 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.4 + dev: true + + /babel-preset-jest/29.5.0_@babel+core@7.21.4: resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4041,10 +3965,10 @@ packages: dependencies: '@babel/core': 7.21.4 babel-plugin-jest-hoist: 29.5.0 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.4) + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.4 dev: true - /babel-preset-minify@0.5.2: + /babel-preset-minify/0.5.2: resolution: {integrity: sha512-v4GL+kk0TfovbRIKZnC3HPbu2cAGmPAby7BsOmuPdMJfHV+4FVdsGXTH/OOGQRKYdjemBuL1+MsE6mobobhe9w==} dependencies: babel-plugin-minify-builtins: 0.5.0 @@ -4072,18 +3996,11 @@ packages: lodash: 4.17.21 dev: true - /balanced-match@1.0.2: + /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - /base64id@2.0.0: - resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} - engines: {node: ^4.5.0 || >= 5.9} - - /base@0.11.2: + /base/0.11.2: resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} engines: {node: '>=0.10.0'} dependencies: @@ -4096,36 +4013,43 @@ packages: pascalcase: 0.1.1 dev: true - /batch@0.6.1: + /base64-js/1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + /base64id/2.0.0: + resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} + engines: {node: ^4.5.0 || >= 5.9} + + /batch/0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} dev: true - /big.js@5.2.2: + /big.js/5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: true - /bignumber.js@9.1.1: + /bignumber.js/9.1.1: resolution: {integrity: sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==} dev: true - /binary-extensions@2.2.0: + /binary-extensions/2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - /bl@4.1.0: + /bl/4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - /body-parser@1.20.1(supports-color@6.1.0): + /body-parser/1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 2.6.9(supports-color@6.1.0) + debug: 2.6.9 depd: 2.0.0 destroy: 1.2.0 http-errors: 2.0.0 @@ -4139,7 +4063,27 @@ packages: - supports-color dev: true - /bonjour@3.5.0: + /body-parser/1.20.1_supports-color@6.1.0: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9_supports-color@6.1.0 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /bonjour/3.5.0: resolution: {integrity: sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==} dependencies: array-flatten: 2.1.2 @@ -4150,20 +4094,20 @@ packages: multicast-dns-service-types: 1.1.0 dev: true - /brace-expansion@1.1.11: + /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 dev: true - /brace-expansion@2.0.1: + /brace-expansion/2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 dev: true - /braces@2.3.2(supports-color@6.1.0): + /braces/2.3.2_supports-color@6.1.0: resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} engines: {node: '>=0.10.0'} dependencies: @@ -4173,7 +4117,7 @@ packages: fill-range: 4.0.0 isobject: 3.0.1 repeat-element: 1.1.4 - snapdragon: 0.8.2(supports-color@6.1.0) + snapdragon: 0.8.2_supports-color@6.1.0 snapdragon-node: 2.1.1 split-string: 3.1.0 to-regex: 3.0.2 @@ -4181,13 +4125,13 @@ packages: - supports-color dev: true - /braces@3.0.2: + /braces/3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - /browserslist@4.21.5: + /browserslist/4.21.5: resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -4195,35 +4139,35 @@ packages: caniuse-lite: 1.0.30001478 electron-to-chromium: 1.4.361 node-releases: 2.0.10 - update-browserslist-db: 1.0.10(browserslist@4.21.5) + update-browserslist-db: 1.0.10_browserslist@4.21.5 dev: true - /bser@2.1.1: + /bser/2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 dev: true - /buffer-from@1.1.2: + /buffer-from/1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true - /buffer-indexof@1.1.1: + /buffer-indexof/1.1.1: resolution: {integrity: sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==} dev: true - /buffer@5.7.1: + /buffer/5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - /builtin-modules@3.3.0: + /builtin-modules/3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} dev: true - /bundle-require@4.0.1(esbuild@0.17.16): + /bundle-require/4.0.1_esbuild@0.17.16: resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: @@ -4233,29 +4177,29 @@ packages: load-tsconfig: 0.2.5 dev: true - /busboy@1.6.0: + /busboy/1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} dependencies: streamsearch: 1.1.0 dev: true - /bytes@3.0.0: + /bytes/3.0.0: resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} engines: {node: '>= 0.8'} dev: true - /bytes@3.1.2: + /bytes/3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} dev: true - /cac@6.7.14: + /cac/6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} dev: true - /cache-base@1.0.1: + /cache-base/1.0.1: resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} engines: {node: '>=0.10.0'} dependencies: @@ -4270,7 +4214,7 @@ packages: unset-value: 1.0.0 dev: true - /cache-content-type@1.0.1: + /cache-content-type/1.0.1: resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} engines: {node: '>= 6.0.0'} dependencies: @@ -4278,24 +4222,24 @@ packages: ylru: 1.3.2 dev: true - /cachedir@2.3.0: + /cachedir/2.3.0: resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==} engines: {node: '>=6'} dev: true - /call-bind@1.0.2: + /call-bind/1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 get-intrinsic: 1.2.0 dev: true - /callsites@3.1.0: + /callsites/3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} dev: true - /camelcase-keys@6.2.2: + /camelcase-keys/6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} engines: {node: '>=8'} dependencies: @@ -4304,38 +4248,38 @@ packages: quick-lru: 4.0.1 dev: true - /camelcase@4.1.0: + /camelcase/4.1.0: resolution: {integrity: sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==} engines: {node: '>=4'} dev: true - /camelcase@5.0.0: + /camelcase/5.0.0: resolution: {integrity: sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==} engines: {node: '>=6'} dev: true - /camelcase@5.3.1: + /camelcase/5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} dev: true - /camelcase@6.3.0: + /camelcase/6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001478: + /caniuse-lite/1.0.30001478: resolution: {integrity: sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw==} dev: true - /chalk-template@0.4.0: + /chalk-template/0.4.0: resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} engines: {node: '>=12'} dependencies: chalk: 4.1.2 dev: true - /chalk@2.4.2: + /chalk/2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} dependencies: @@ -4344,27 +4288,27 @@ packages: supports-color: 5.5.0 dev: true - /chalk@4.1.2: + /chalk/4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - /chalk@5.2.0: + /chalk/5.2.0: resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true - /char-regex@1.0.2: + /char-regex/1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} dev: true - /chardet@0.7.0: + /chardet/0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - /chokidar@3.4.1: + /chokidar/3.4.1: resolution: {integrity: sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==} engines: {node: '>= 8.10.0'} dependencies: @@ -4378,21 +4322,21 @@ packages: optionalDependencies: fsevents: 2.1.3 - /chrome-trace-event@1.0.3: + /chrome-trace-event/1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} dev: true - /ci-info@3.8.0: + /ci-info/3.8.0: resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} dev: true - /cjs-module-lexer@1.2.2: + /cjs-module-lexer/1.2.2: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} dev: true - /class-utils@0.3.6: + /class-utils/0.3.6: resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} engines: {node: '>=0.10.0'} dependencies: @@ -4402,22 +4346,22 @@ packages: static-extend: 0.1.2 dev: true - /clean-stack@2.2.0: + /clean-stack/2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} dev: true - /cli-cursor@3.1.0: + /cli-cursor/3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 - /cli-spinners@2.8.0: + /cli-spinners/2.8.0: resolution: {integrity: sha512-/eG5sJcvEIwxcdYM86k5tPwn0MUzkX5YY3eImTGpJOZgVe4SdTMY14vQpcxgBzJ0wXwAYrS8E+c3uHeK4JNyzQ==} engines: {node: '>=6'} - /cli-truncate@2.1.0: + /cli-truncate/2.1.0: resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} engines: {node: '>=8'} dependencies: @@ -4425,7 +4369,7 @@ packages: string-width: 4.2.3 dev: true - /cli-truncate@3.1.0: + /cli-truncate/3.1.0: resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: @@ -4433,11 +4377,11 @@ packages: string-width: 5.1.2 dev: true - /cli-width@3.0.0: + /cli-width/3.0.0: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} - /cliui@5.0.0: + /cliui/5.0.0: resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} dependencies: string-width: 3.1.0 @@ -4445,7 +4389,7 @@ packages: wrap-ansi: 5.1.0 dev: true - /cliui@8.0.1: + /cliui/8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} dependencies: @@ -4453,7 +4397,7 @@ packages: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - /clone-deep@4.0.1: + /clone-deep/4.0.1: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} engines: {node: '>=6'} dependencies: @@ -4462,25 +4406,25 @@ packages: shallow-clone: 3.0.1 dev: true - /clone@1.0.4: + /clone/1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} - /clone@2.1.2: + /clone/2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} dev: true - /co@4.6.0: + /co/4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} dev: true - /collect-v8-coverage@1.0.1: + /collect-v8-coverage/1.0.1: resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} dev: true - /collection-visit@1.0.0: + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} dependencies: @@ -4488,37 +4432,37 @@ packages: object-visit: 1.0.1 dev: true - /color-convert@1.9.3: + /color-convert/1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 dev: true - /color-convert@2.0.1: + /color-convert/2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - /color-name@1.1.3: + /color-name/1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} dev: true - /color-name@1.1.4: + /color-name/1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - /colorette@2.0.19: + /colorette/2.0.19: resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} dev: true - /combined-stream@1.0.8: + /combined-stream/1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 dev: true - /command-line-args@5.2.1: + /command-line-args/5.2.1: resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} engines: {node: '>=4.0.0'} dependencies: @@ -4528,7 +4472,7 @@ packages: typical: 4.0.0 dev: true - /command-line-usage@7.0.1: + /command-line-usage/7.0.1: resolution: {integrity: sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==} engines: {node: '>=12.20.0'} dependencies: @@ -4538,27 +4482,48 @@ packages: typical: 7.1.1 dev: true - /commander@10.0.0: + /commander/10.0.0: resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==} engines: {node: '>=14'} dev: true - /commander@2.20.3: + /commander/2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true - /commander@4.1.1: + /commander/4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} dev: true - /commitizen@4.3.0(@swc/core@1.3.49): + /commitizen/4.3.0: + resolution: {integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==} + engines: {node: '>= 12'} + hasBin: true + dependencies: + cachedir: 2.3.0 + cz-conventional-changelog: 3.3.0_@swc+core@1.3.49 + dedent: 0.7.0 + detect-indent: 6.1.0 + find-node-modules: 2.1.3 + find-root: 1.1.0 + fs-extra: 9.1.0 + glob: 7.2.3 + inquirer: 8.2.5 + is-utf8: 0.2.1 + lodash: 4.17.21 + minimist: 1.2.7 + strip-bom: 4.0.0 + strip-json-comments: 3.1.1 + dev: true + + /commitizen/4.3.0_@swc+core@1.3.49: resolution: {integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==} engines: {node: '>= 12'} hasBin: true dependencies: cachedir: 2.3.0 - cz-conventional-changelog: 3.3.0(@swc/core@1.3.49) + cz-conventional-changelog: 3.3.0_@swc+core@1.3.49 dedent: 0.7.0 detect-indent: 6.1.0 find-node-modules: 2.1.3 @@ -4576,36 +4541,36 @@ packages: - '@swc/wasm' dev: true - /commondir@1.0.1: + /commondir/1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: true - /compare-func@2.0.0: + /compare-func/2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} dependencies: array-ify: 1.0.0 dot-prop: 5.3.0 dev: true - /component-emitter@1.3.0: + /component-emitter/1.3.0: resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} dev: true - /compressible@2.0.18: + /compressible/2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 dev: true - /compression@1.7.4(supports-color@6.1.0): + /compression/1.7.4_supports-color@6.1.0: resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} engines: {node: '>= 0.8.0'} dependencies: accepts: 1.3.8 bytes: 3.0.0 compressible: 2.0.18 - debug: 2.6.9(supports-color@6.1.0) + debug: 2.6.9_supports-color@6.1.0 on-headers: 1.0.2 safe-buffer: 5.1.2 vary: 1.1.2 @@ -4613,28 +4578,28 @@ packages: - supports-color dev: true - /concat-map@0.0.1: + /concat-map/0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /connect-history-api-fallback@1.6.0: + /connect-history-api-fallback/1.6.0: resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==} engines: {node: '>=0.8'} dev: true - /content-disposition@0.5.4: + /content-disposition/0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} dependencies: safe-buffer: 5.2.1 dev: true - /content-type@1.0.5: + /content-type/1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} dev: true - /conventional-changelog-angular@5.0.13: + /conventional-changelog-angular/5.0.13: resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==} engines: {node: '>=10'} dependencies: @@ -4642,7 +4607,7 @@ packages: q: 1.5.1 dev: true - /conventional-changelog-conventionalcommits@4.6.3: + /conventional-changelog-conventionalcommits/4.6.3: resolution: {integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==} engines: {node: '>=10'} dependencies: @@ -4651,11 +4616,11 @@ packages: q: 1.5.1 dev: true - /conventional-commit-types@3.0.0: + /conventional-commit-types/3.0.0: resolution: {integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==} dev: true - /conventional-commits-parser@3.2.4: + /conventional-commits-parser/3.2.4: resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==} engines: {node: '>=10'} hasBin: true @@ -4668,27 +4633,27 @@ packages: through2: 4.0.2 dev: true - /convert-source-map@1.9.0: + /convert-source-map/1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} dev: true - /convert-source-map@2.0.0: + /convert-source-map/2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true - /cookie-signature@1.0.6: + /cookie-signature/1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} dev: true - /cookie@0.4.2: + /cookie/0.4.2: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} - /cookie@0.5.0: + /cookie/0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} - /cookies@0.8.0: + /cookies/0.8.0: resolution: {integrity: sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==} engines: {node: '>= 0.8'} dependencies: @@ -4696,46 +4661,45 @@ packages: keygrip: 1.1.0 dev: true - /copy-descriptor@0.1.1: + /copy-descriptor/0.1.1: resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} engines: {node: '>=0.10.0'} dev: true - /core-js-compat@3.30.0: + /core-js-compat/3.30.0: resolution: {integrity: sha512-P5A2h/9mRYZFIAP+5Ab8ns6083IyVpSclU74UNvbGVQ8VM7n3n3/g2yF3AkKQ9NXz2O+ioxLbEWKnDtgsFamhg==} dependencies: browserslist: 4.21.5 dev: true - /core-util-is@1.0.3: + /core-util-is/1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /cors@2.8.5: + /cors/2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} dependencies: object-assign: 4.1.1 vary: 1.1.2 - /cosmiconfig-typescript-loader@2.0.2(@swc/core@1.3.49)(@types/node@18.15.11)(cosmiconfig@7.1.0)(typescript@4.9.5): + /cosmiconfig-typescript-loader/2.0.2_faublg25f7qpbcz6w4cw6yyzse: resolution: {integrity: sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@types/node': '*' - cosmiconfig: '>=7' typescript: '>=3' dependencies: '@types/node': 18.15.11 cosmiconfig: 7.1.0 - ts-node: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@4.9.5) + ts-node: 10.9.1_faublg25f7qpbcz6w4cw6yyzse typescript: 4.9.5 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true - /cosmiconfig-typescript-loader@4.3.0(@types/node@18.15.11)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@5.0.4): + /cosmiconfig-typescript-loader/4.3.0_zulaepqzabcjiyzbkdbfeduf6u: resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==} engines: {node: '>=12', npm: '>=6'} peerDependencies: @@ -4746,12 +4710,12 @@ packages: dependencies: '@types/node': 18.15.11 cosmiconfig: 8.1.3 - ts-node: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4) + ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e typescript: 5.0.4 dev: true optional: true - /cosmiconfig@7.1.0: + /cosmiconfig/7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} dependencies: @@ -4762,7 +4726,7 @@ packages: yaml: 1.10.2 dev: true - /cosmiconfig@8.1.3: + /cosmiconfig/8.1.3: resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==} engines: {node: '>=14'} dependencies: @@ -4773,11 +4737,11 @@ packages: dev: true optional: true - /create-require@1.1.1: + /create-require/1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true - /cross-env@7.0.3: + /cross-env/7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} hasBin: true @@ -4785,7 +4749,7 @@ packages: cross-spawn: 7.0.3 dev: true - /cross-fetch@3.1.5: + /cross-fetch/3.1.5: resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} dependencies: node-fetch: 2.6.7 @@ -4793,7 +4757,7 @@ packages: - encoding dev: true - /cross-spawn@6.0.5: + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} dependencies: @@ -4804,7 +4768,7 @@ packages: which: 1.3.1 dev: true - /cross-spawn@7.0.3: + /cross-spawn/7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} dependencies: @@ -4813,44 +4777,44 @@ packages: which: 2.0.2 dev: true - /cssom@0.3.8: + /cssom/0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} dev: true - /cssom@0.5.0: + /cssom/0.5.0: resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} dev: true - /cssstyle@2.3.0: + /cssstyle/2.3.0: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} dependencies: cssom: 0.3.8 dev: true - /cz-conventional-changelog@3.3.0(@swc/core@1.3.49): + /cz-conventional-changelog/3.3.0_@swc+core@1.3.49: resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==} engines: {node: '>= 10'} dependencies: chalk: 2.4.2 - commitizen: 4.3.0(@swc/core@1.3.49) + commitizen: 4.3.0 conventional-commit-types: 3.0.0 lodash.map: 4.6.0 longest: 2.0.1 word-wrap: 1.2.3 optionalDependencies: - '@commitlint/load': 17.5.0(@swc/core@1.3.49) + '@commitlint/load': 17.5.0_@swc+core@1.3.49 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true - /dargs@7.0.0: + /dargs/7.0.0: resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} engines: {node: '>=8'} dev: true - /data-urls@3.0.2: + /data-urls/3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} dependencies: @@ -4859,15 +4823,26 @@ packages: whatwg-url: 11.0.0 dev: true - /dateformat@4.6.3: + /dateformat/4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} dev: true - /debounce@1.2.1: + /debounce/1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} dev: true - /debug@2.6.9(supports-color@6.1.0): + /debug/2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: true + + /debug/2.6.9_supports-color@6.1.0: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: supports-color: '*' @@ -4879,7 +4854,18 @@ packages: supports-color: 6.1.0 dev: true - /debug@3.2.7(supports-color@6.1.0): + /debug/3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + + /debug/3.2.7_supports-color@6.1.0: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' @@ -4891,7 +4877,18 @@ packages: supports-color: 6.1.0 dev: true - /debug@4.3.4(supports-color@6.1.0): + /debug/4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + + /debug/4.3.4_supports-color@6.1.0: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -4902,8 +4899,9 @@ packages: dependencies: ms: 2.1.2 supports-color: 6.1.0 + dev: true - /decamelize-keys@1.1.1: + /decamelize-keys/1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} engines: {node: '>=0.10.0'} dependencies: @@ -4911,29 +4909,29 @@ packages: map-obj: 1.0.1 dev: true - /decamelize@1.2.0: + /decamelize/1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} dev: true - /decimal.js@10.4.3: + /decimal.js/10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} dev: true - /decode-uri-component@0.2.2: + /decode-uri-component/0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} dev: true - /dedent@0.7.0: + /dedent/0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true - /deep-equal@1.0.1: + /deep-equal/1.0.1: resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} dev: true - /deep-equal@1.1.1: + /deep-equal/1.1.1: resolution: {integrity: sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==} dependencies: is-arguments: 1.1.1 @@ -4944,21 +4942,21 @@ packages: regexp.prototype.flags: 1.4.3 dev: true - /deep-extend@0.6.0: + /deep-extend/0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} dev: true - /deep-is@0.1.4: + /deep-is/0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /deepmerge@4.3.1: + /deepmerge/4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} dev: true - /default-gateway@4.2.0: + /default-gateway/4.2.0: resolution: {integrity: sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==} engines: {node: '>=6'} dependencies: @@ -4966,17 +4964,17 @@ packages: ip-regex: 2.1.0 dev: true - /defaults@1.0.4: + /defaults/1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 - /define-lazy-prop@2.0.0: + /define-lazy-prop/2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} dev: true - /define-properties@1.2.0: + /define-properties/1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} dependencies: @@ -4984,21 +4982,21 @@ packages: object-keys: 1.1.1 dev: true - /define-property@0.2.5: + /define-property/0.2.5: resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} engines: {node: '>=0.10.0'} dependencies: is-descriptor: 0.1.6 dev: true - /define-property@1.0.0: + /define-property/1.0.0: resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} engines: {node: '>=0.10.0'} dependencies: is-descriptor: 1.0.2 dev: true - /define-property@2.0.2: + /define-property/2.0.2: resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} engines: {node: '>=0.10.0'} dependencies: @@ -5006,7 +5004,7 @@ packages: isobject: 3.0.1 dev: true - /del@4.1.1: + /del/4.1.1: resolution: {integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==} engines: {node: '>=6'} dependencies: @@ -5019,111 +5017,111 @@ packages: rimraf: 2.7.1 dev: true - /delayed-stream@1.0.0: + /delayed-stream/1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} dev: true - /delegates@1.0.0: + /delegates/1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} dev: true - /depd@1.1.2: + /depd/1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} dev: true - /depd@2.0.0: + /depd/2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} dev: true - /destroy@1.2.0: + /destroy/1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dev: true - /detect-file@1.0.0: + /detect-file/1.0.0: resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} engines: {node: '>=0.10.0'} dev: true - /detect-indent@6.1.0: + /detect-indent/6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} dev: true - /detect-newline@3.1.0: + /detect-newline/3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} dev: true - /detect-node@2.1.0: + /detect-node/2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} dev: true - /diff-sequences@29.4.3: + /diff-sequences/29.4.3: resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /diff@4.0.2: + /diff/4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} dev: true - /dir-glob@3.0.1: + /dir-glob/3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} dependencies: path-type: 4.0.0 dev: true - /dns-equal@1.0.0: + /dns-equal/1.0.0: resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} dev: true - /dns-packet@1.3.4: + /dns-packet/1.3.4: resolution: {integrity: sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==} dependencies: ip: 1.1.8 safe-buffer: 5.2.1 dev: true - /dns-txt@2.0.2: + /dns-txt/2.0.2: resolution: {integrity: sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==} dependencies: buffer-indexof: 1.1.1 dev: true - /doctrine@3.0.0: + /doctrine/3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 dev: true - /domexception@4.0.0: + /domexception/4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} dependencies: webidl-conversions: 7.0.0 dev: true - /dot-prop@5.3.0: + /dot-prop/5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} dependencies: is-obj: 2.0.0 dev: true - /duplexer2@0.1.4: + /duplexer2/0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: readable-stream: 2.3.8 dev: true - /duplexify@4.1.2: + /duplexify/4.1.2: resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} dependencies: end-of-stream: 1.4.4 @@ -5132,55 +5130,55 @@ packages: stream-shift: 1.0.1 dev: true - /eastasianwidth@0.2.0: + /eastasianwidth/0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /ee-first@1.1.1: + /ee-first/1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true - /electron-to-chromium@1.4.361: + /electron-to-chromium/1.4.361: resolution: {integrity: sha512-VocVwjPp05HUXzf3xmL0boRn5b0iyqC7amtDww84Jb1QJNPBc7F69gJyEeXRoriLBC4a5pSyckdllrXAg4mmRA==} dev: true - /emittery@0.13.1: + /emittery/0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} dev: true - /emoji-regex@7.0.3: + /emoji-regex/7.0.3: resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} dev: true - /emoji-regex@8.0.0: + /emoji-regex/8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - /emoji-regex@9.2.2: + /emoji-regex/9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true - /emojis-list@3.0.0: + /emojis-list/3.0.0: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} engines: {node: '>= 4'} dev: true - /encodeurl@1.0.2: + /encodeurl/1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} dev: true - /end-of-stream@1.4.4: + /end-of-stream/1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 dev: true - /engine.io-client@6.4.0: + /engine.io-client/6.4.0: resolution: {integrity: sha512-GyKPDyoEha+XZ7iEqam49vz6auPnNJ9ZBfy89f+rMMas8AuiMWOZ9PVzu8xb9ZC6rafUqiGHSCfu22ih66E+1g==} dependencies: '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 engine.io-parser: 5.0.6 ws: 8.11.0 xmlhttprequest-ssl: 2.0.0 @@ -5190,11 +5188,11 @@ packages: - utf-8-validate dev: false - /engine.io-parser@5.0.6: + /engine.io-parser/5.0.6: resolution: {integrity: sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==} engines: {node: '>=10.0.0'} - /engine.io@6.4.1: + /engine.io/6.4.1: resolution: {integrity: sha512-JFYQurD/nbsA5BSPmbaOSLa3tSVj8L6o4srSwXXY3NqE+gGUNmmPTbhn8tjzcCtSqhFgIeqef81ngny8JM25hw==} engines: {node: '>=10.0.0'} dependencies: @@ -5205,7 +5203,7 @@ packages: base64id: 2.0.0 cookie: 0.4.2 cors: 2.8.5 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 engine.io-parser: 5.0.6 ws: 8.11.0 transitivePeerDependencies: @@ -5213,7 +5211,7 @@ packages: - supports-color - utf-8-validate - /enhanced-resolve@5.12.0: + /enhanced-resolve/5.12.0: resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} engines: {node: '>=10.13.0'} dependencies: @@ -5221,32 +5219,32 @@ packages: tapable: 2.2.1 dev: true - /enquirer@2.3.6: + /enquirer/2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} dependencies: ansi-colors: 4.1.3 dev: true - /entities@4.4.0: + /entities/4.4.0: resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} engines: {node: '>=0.12'} dev: true - /errno@0.1.8: + /errno/0.1.8: resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} hasBin: true dependencies: prr: 1.0.1 dev: true - /error-ex@1.3.2: + /error-ex/1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 dev: true - /es-abstract@1.21.2: + /es-abstract/1.21.2: resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} engines: {node: '>= 0.4'} dependencies: @@ -5286,15 +5284,15 @@ packages: which-typed-array: 1.1.9 dev: true - /es-array-method-boxes-properly@1.0.0: + /es-array-method-boxes-properly/1.0.0: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} dev: true - /es-module-lexer@1.2.1: + /es-module-lexer/1.2.1: resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==} dev: true - /es-set-tostringtag@2.0.1: + /es-set-tostringtag/2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} dependencies: @@ -5303,7 +5301,7 @@ packages: has-tostringtag: 1.0.0 dev: true - /es-to-primitive@1.2.1: + /es-to-primitive/1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} dependencies: @@ -5312,7 +5310,7 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild-loader@2.21.0(webpack@5.79.0): + /esbuild-loader/2.21.0_webpack@5.79.0: resolution: {integrity: sha512-k7ijTkCT43YBSZ6+fBCW1Gin7s46RrJ0VQaM8qA7lq7W+OLsGgtLyFV8470FzYi/4TeDexniTBTPTwZUnXXR5g==} peerDependencies: webpack: ^4.40.0 || ^5.0.0 @@ -5322,11 +5320,11 @@ packages: json5: 2.2.3 loader-utils: 2.0.4 tapable: 2.2.1 - webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e webpack-sources: 1.4.3 dev: true - /esbuild@0.16.17: + /esbuild/0.16.17: resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==} engines: {node: '>=12'} hasBin: true @@ -5356,7 +5354,7 @@ packages: '@esbuild/win32-x64': 0.16.17 dev: true - /esbuild@0.17.16: + /esbuild/0.17.16: resolution: {integrity: sha512-aeSuUKr9aFVY9Dc8ETVELGgkj4urg5isYx8pLf4wlGgB0vTFjxJQdHnNH6Shmx4vYYrOTLCHtRI5i1XZ9l2Zcg==} engines: {node: '>=12'} hasBin: true @@ -5386,29 +5384,29 @@ packages: '@esbuild/win32-x64': 0.17.16 dev: true - /escalade@3.1.1: + /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} - /escape-html@1.0.3: + /escape-html/1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} dev: true - /escape-string-regexp@1.0.5: + /escape-string-regexp/1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - /escape-string-regexp@2.0.0: + /escape-string-regexp/2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} dev: true - /escape-string-regexp@4.0.0: + /escape-string-regexp/4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} dev: true - /escodegen@2.0.0: + /escodegen/2.0.0: resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} engines: {node: '>=6.0'} hasBin: true @@ -5421,7 +5419,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-prettier@8.8.0(eslint@7.32.0): + /eslint-config-prettier/8.8.0_eslint@7.32.0: resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} hasBin: true peerDependencies: @@ -5430,7 +5428,7 @@ packages: eslint: 7.32.0 dev: true - /eslint-plugin-prettier@3.4.1(eslint-config-prettier@8.8.0)(eslint@7.32.0)(prettier@2.8.7): + /eslint-plugin-prettier/3.4.1_mouiu7tdcm2dtderipseaggmee: resolution: {integrity: sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==} engines: {node: '>=6.0.0'} peerDependencies: @@ -5442,12 +5440,12 @@ packages: optional: true dependencies: eslint: 7.32.0 - eslint-config-prettier: 8.8.0(eslint@7.32.0) + eslint-config-prettier: 8.8.0_eslint@7.32.0 prettier: 2.8.7 prettier-linter-helpers: 1.0.0 dev: true - /eslint-scope@5.1.1: + /eslint-scope/5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} dependencies: @@ -5455,29 +5453,29 @@ packages: estraverse: 4.3.0 dev: true - /eslint-utils@2.1.0: + /eslint-utils/2.1.0: resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} engines: {node: '>=6'} dependencies: eslint-visitor-keys: 1.3.0 dev: true - /eslint-visitor-keys@1.3.0: + /eslint-visitor-keys/1.3.0: resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} engines: {node: '>=4'} dev: true - /eslint-visitor-keys@2.1.0: + /eslint-visitor-keys/2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} dev: true - /eslint-visitor-keys@3.4.0: + /eslint-visitor-keys/3.4.0: resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@7.32.0: + /eslint/7.32.0: resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} engines: {node: ^10.12.0 || >=12.0.0} hasBin: true @@ -5488,7 +5486,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 doctrine: 3.0.0 enquirer: 2.3.6 escape-string-regexp: 4.0.0 @@ -5526,74 +5524,74 @@ packages: - supports-color dev: true - /espree@7.3.1: + /espree/7.3.1: resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: acorn: 7.4.1 - acorn-jsx: 5.3.2(acorn@7.4.1) + acorn-jsx: 5.3.2_acorn@7.4.1 eslint-visitor-keys: 1.3.0 dev: true - /esprima@4.0.1: + /esprima/4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true dev: true - /esquery@1.5.0: + /esquery/1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 dev: true - /esrecurse@4.3.0: + /esrecurse/4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 dev: true - /estraverse@4.3.0: + /estraverse/4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} dev: true - /estraverse@5.3.0: + /estraverse/5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} dev: true - /estree-walker@1.0.1: + /estree-walker/1.0.1: resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} dev: true - /esutils@2.0.3: + /esutils/2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} dev: true - /etag@1.8.1: + /etag/1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} dev: true - /eventemitter3@4.0.7: + /eventemitter3/4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} dev: true - /events@3.3.0: + /events/3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} dev: true - /eventsource@2.0.2: + /eventsource/2.0.2: resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==} engines: {node: '>=12.0.0'} dev: true - /execa@1.0.0: + /execa/1.0.0: resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} engines: {node: '>=6'} dependencies: @@ -5606,7 +5604,7 @@ packages: strip-eof: 1.0.0 dev: true - /execa@5.1.1: + /execa/5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} dependencies: @@ -5621,7 +5619,7 @@ packages: strip-final-newline: 2.0.0 dev: true - /execa@7.1.1: + /execa/7.1.1: resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==} engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} dependencies: @@ -5636,34 +5634,34 @@ packages: strip-final-newline: 3.0.0 dev: true - /exit@0.1.2: + /exit/0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} dev: true - /expand-brackets@2.1.4(supports-color@6.1.0): + /expand-brackets/2.1.4_supports-color@6.1.0: resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} engines: {node: '>=0.10.0'} dependencies: - debug: 2.6.9(supports-color@6.1.0) + debug: 2.6.9_supports-color@6.1.0 define-property: 0.2.5 extend-shallow: 2.0.1 posix-character-classes: 0.1.1 regex-not: 1.0.2 - snapdragon: 0.8.2(supports-color@6.1.0) + snapdragon: 0.8.2_supports-color@6.1.0 to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true - /expand-tilde@2.0.2: + /expand-tilde/2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} dependencies: homedir-polyfill: 1.0.3 dev: true - /expect@29.5.0: + /expect/29.5.0: resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -5674,23 +5672,23 @@ packages: jest-util: 29.5.0 dev: true - /express@4.18.2(supports-color@6.1.0): + /express/4.18.2: resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} engines: {node: '>= 0.10.0'} dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.1(supports-color@6.1.0) + body-parser: 1.20.1 content-disposition: 0.5.4 content-type: 1.0.5 cookie: 0.5.0 cookie-signature: 1.0.6 - debug: 2.6.9(supports-color@6.1.0) + debug: 2.6.9 depd: 2.0.0 encodeurl: 1.0.2 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.2.0(supports-color@6.1.0) + finalhandler: 1.2.0 fresh: 0.5.2 http-errors: 2.0.0 merge-descriptors: 1.0.1 @@ -5702,8 +5700,8 @@ packages: qs: 6.11.0 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.18.0(supports-color@6.1.0) - serve-static: 1.15.0(supports-color@6.1.0) + send: 0.18.0 + serve-static: 1.15.0 setprototypeof: 1.2.0 statuses: 2.0.1 type-is: 1.6.18 @@ -5713,14 +5711,53 @@ packages: - supports-color dev: true - /extend-shallow@2.0.1: + /express/4.18.2_supports-color@6.1.0: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1_supports-color@6.1.0 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9_supports-color@6.1.0 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0_supports-color@6.1.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0_supports-color@6.1.0 + serve-static: 1.15.0_supports-color@6.1.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /extend-shallow/2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} dependencies: is-extendable: 0.1.1 dev: true - /extend-shallow@3.0.2: + /extend-shallow/3.0.2: resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} engines: {node: '>=0.10.0'} dependencies: @@ -5728,7 +5765,7 @@ packages: is-extendable: 1.0.1 dev: true - /external-editor@3.1.0: + /external-editor/3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} dependencies: @@ -5736,31 +5773,31 @@ packages: iconv-lite: 0.4.24 tmp: 0.0.33 - /extglob@2.0.4(supports-color@6.1.0): + /extglob/2.0.4_supports-color@6.1.0: resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} engines: {node: '>=0.10.0'} dependencies: array-unique: 0.3.2 define-property: 1.0.0 - expand-brackets: 2.1.4(supports-color@6.1.0) + expand-brackets: 2.1.4_supports-color@6.1.0 extend-shallow: 2.0.1 fragment-cache: 0.2.1 regex-not: 1.0.2 - snapdragon: 0.8.2(supports-color@6.1.0) + snapdragon: 0.8.2_supports-color@6.1.0 to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true - /fast-deep-equal@3.1.3: + /fast-deep-equal/3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-diff@1.2.0: + /fast-diff/1.2.0: resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} dev: true - /fast-glob@3.2.12: + /fast-glob/3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} engines: {node: '>=8.6.0'} dependencies: @@ -5771,56 +5808,56 @@ packages: micromatch: 4.0.5 dev: true - /fast-json-stable-stringify@2.1.0: + /fast-json-stable-stringify/2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true - /fast-levenshtein@2.0.6: + /fast-levenshtein/2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fast-redact@3.1.2: + /fast-redact/3.1.2: resolution: {integrity: sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==} engines: {node: '>=6'} dev: true - /fast-safe-stringify@2.1.1: + /fast-safe-stringify/2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true - /fastq@1.15.0: + /fastq/1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 dev: true - /faye-websocket@0.11.4: + /faye-websocket/0.11.4: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} engines: {node: '>=0.8.0'} dependencies: websocket-driver: 0.7.4 dev: true - /fb-watchman@2.0.2: + /fb-watchman/2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 dev: true - /figures@3.2.0: + /figures/3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} dependencies: escape-string-regexp: 1.0.5 - /file-entry-cache@6.0.1: + /file-entry-cache/6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.0.4 dev: true - /fill-range@4.0.0: + /fill-range/4.0.0: resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} engines: {node: '>=0.10.0'} dependencies: @@ -5830,17 +5867,17 @@ packages: to-regex-range: 2.1.1 dev: true - /fill-range@7.0.1: + /fill-range/7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - /finalhandler@1.2.0(supports-color@6.1.0): + /finalhandler/1.2.0: resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} engines: {node: '>= 0.8'} dependencies: - debug: 2.6.9(supports-color@6.1.0) + debug: 2.6.9 encodeurl: 1.0.2 escape-html: 1.0.3 on-finished: 2.4.1 @@ -5851,7 +5888,22 @@ packages: - supports-color dev: true - /find-cache-dir@3.3.2: + /finalhandler/1.2.0_supports-color@6.1.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9_supports-color@6.1.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /find-cache-dir/3.3.2: resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} engines: {node: '>=8'} dependencies: @@ -5860,32 +5912,32 @@ packages: pkg-dir: 4.2.0 dev: true - /find-node-modules@2.1.3: + /find-node-modules/2.1.3: resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==} dependencies: findup-sync: 4.0.0 merge: 2.1.1 dev: true - /find-replace@3.0.0: + /find-replace/3.0.0: resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} engines: {node: '>=4.0.0'} dependencies: array-back: 3.1.0 dev: true - /find-root@1.1.0: + /find-root/1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} dev: true - /find-up@3.0.0: + /find-up/3.0.0: resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} engines: {node: '>=6'} dependencies: locate-path: 3.0.0 dev: true - /find-up@4.1.0: + /find-up/4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} dependencies: @@ -5893,7 +5945,7 @@ packages: path-exists: 4.0.0 dev: true - /find-up@5.0.0: + /find-up/5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} dependencies: @@ -5901,7 +5953,7 @@ packages: path-exists: 4.0.0 dev: true - /findup-sync@4.0.0: + /findup-sync/4.0.0: resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==} engines: {node: '>= 8'} dependencies: @@ -5911,7 +5963,7 @@ packages: resolve-dir: 1.0.1 dev: true - /flat-cache@3.0.4: + /flat-cache/3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: @@ -5919,11 +5971,11 @@ packages: rimraf: 3.0.2 dev: true - /flatted@3.2.7: + /flatted/3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true - /follow-redirects@1.15.2(debug@4.3.4): + /follow-redirects/1.15.2_debug@4.3.4: resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} engines: {node: '>=4.0'} peerDependencies: @@ -5932,21 +5984,21 @@ packages: debug: optional: true dependencies: - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4_supports-color@6.1.0 dev: true - /for-each@0.3.3: + /for-each/0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 dev: true - /for-in@1.0.2: + /for-in/1.0.2: resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} engines: {node: '>=0.10.0'} dev: true - /form-data@3.0.1: + /form-data/3.0.1: resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} engines: {node: '>= 6'} dependencies: @@ -5955,7 +6007,7 @@ packages: mime-types: 2.1.35 dev: true - /form-data@4.0.0: + /form-data/4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} dependencies: @@ -5964,7 +6016,7 @@ packages: mime-types: 2.1.35 dev: true - /formdata-node@4.4.1: + /formdata-node/4.4.1: resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} engines: {node: '>= 12.20'} dependencies: @@ -5972,24 +6024,24 @@ packages: web-streams-polyfill: 4.0.0-beta.3 dev: false - /forwarded@0.2.0: + /forwarded/0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} dev: true - /fragment-cache@0.2.1: + /fragment-cache/0.2.1: resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} engines: {node: '>=0.10.0'} dependencies: map-cache: 0.2.2 dev: true - /fresh@0.5.2: + /fresh/0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} dev: true - /fs-extra@10.1.0: + /fs-extra/10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} dependencies: @@ -5998,7 +6050,7 @@ packages: universalify: 2.0.0 dev: true - /fs-extra@9.1.0: + /fs-extra/9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} dependencies: @@ -6008,26 +6060,26 @@ packages: universalify: 2.0.0 dev: true - /fs-monkey@1.0.3: + /fs-monkey/1.0.3: resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} dev: true - /fs-readdir-recursive@1.1.0: + /fs-readdir-recursive/1.1.0: resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} dev: true - /fs-teardown@0.3.2: + /fs-teardown/0.3.2: resolution: {integrity: sha512-5xJQGMsGjHdZJ5yw/eyZEkAIHYwQQA6T34PfXUCl5JOeizfLWnz3gBEVfEidgrnnYZKTBW3L7aPrB3aI8f0Vqw==} dependencies: fs-extra: 10.1.0 outvariant: 1.4.0 dev: true - /fs.realpath@1.0.0: + /fs.realpath/1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /fsevents@2.1.3: + /fsevents/2.1.3: resolution: {integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] @@ -6035,7 +6087,7 @@ packages: requiresBuild: true optional: true - /fsevents@2.3.2: + /fsevents/2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] @@ -6043,11 +6095,11 @@ packages: dev: true optional: true - /function-bind@1.1.1: + /function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true - /function.prototype.name@1.1.5: + /function.prototype.name/1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} engines: {node: '>= 0.4'} dependencies: @@ -6057,24 +6109,24 @@ packages: functions-have-names: 1.2.3 dev: true - /functional-red-black-tree@1.0.1: + /functional-red-black-tree/1.0.1: resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} dev: true - /functions-have-names@1.2.3: + /functions-have-names/1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true - /gensync@1.0.0-beta.2: + /gensync/1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} dev: true - /get-caller-file@2.0.5: + /get-caller-file/2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - /get-intrinsic@1.2.0: + /get-intrinsic/1.2.0: resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} dependencies: function-bind: 1.1.1 @@ -6082,24 +6134,24 @@ packages: has-symbols: 1.0.3 dev: true - /get-package-type@0.1.0: + /get-package-type/0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} dev: true - /get-stream@4.1.0: + /get-stream/4.1.0: resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} engines: {node: '>=6'} dependencies: pump: 3.0.0 dev: true - /get-stream@6.0.1: + /get-stream/6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} dev: true - /get-symbol-description@1.0.0: + /get-symbol-description/1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: @@ -6107,12 +6159,12 @@ packages: get-intrinsic: 1.2.0 dev: true - /get-value@2.0.6: + /get-value/2.0.6: resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} engines: {node: '>=0.10.0'} dev: true - /git-log-parser@1.2.0: + /git-log-parser/1.2.0: resolution: {integrity: sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==} dependencies: argv-formatter: 1.0.0 @@ -6123,7 +6175,7 @@ packages: traverse: 0.6.7 dev: true - /git-raw-commits@2.0.11: + /git-raw-commits/2.0.11: resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} engines: {node: '>=10'} hasBin: true @@ -6135,17 +6187,17 @@ packages: through2: 4.0.2 dev: true - /glob-parent@5.1.2: + /glob-parent/5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - /glob-to-regexp@0.4.1: + /glob-to-regexp/0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob@7.1.6: + /glob/7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} dependencies: fs.realpath: 1.0.0 @@ -6156,7 +6208,7 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob@7.2.3: + /glob/7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 @@ -6167,7 +6219,7 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob@9.3.5: + /glob/9.3.5: resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} engines: {node: '>=16 || 14 >=14.17'} dependencies: @@ -6177,14 +6229,14 @@ packages: path-scurry: 1.6.4 dev: true - /global-dirs@0.1.1: + /global-dirs/0.1.1: resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} engines: {node: '>=4'} dependencies: ini: 1.3.8 dev: true - /global-modules@1.0.0: + /global-modules/1.0.0: resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} engines: {node: '>=0.10.0'} dependencies: @@ -6193,7 +6245,7 @@ packages: resolve-dir: 1.0.1 dev: true - /global-prefix@1.0.2: + /global-prefix/1.0.2: resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} engines: {node: '>=0.10.0'} dependencies: @@ -6204,26 +6256,26 @@ packages: which: 1.3.1 dev: true - /globals@11.12.0: + /globals/11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} dev: true - /globals@13.20.0: + /globals/13.20.0: resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true - /globalthis@1.0.3: + /globalthis/1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.0 dev: true - /globby@11.1.0: + /globby/11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} dependencies: @@ -6235,7 +6287,7 @@ packages: slash: 3.0.0 dev: true - /globby@6.1.0: + /globby/6.1.0: resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} engines: {node: '>=0.10.0'} dependencies: @@ -6246,70 +6298,71 @@ packages: pinkie-promise: 2.0.1 dev: true - /gopd@1.0.1: + /gopd/1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.0 dev: true - /graceful-fs@4.2.11: + /graceful-fs/4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true - /grapheme-splitter@1.0.4: + /grapheme-splitter/1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true - /graphql@16.6.0: + /graphql/16.6.0: resolution: {integrity: sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} dev: false - /handle-thing@2.0.1: + /handle-thing/2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} dev: true - /hard-rejection@2.1.0: + /hard-rejection/2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} dev: true - /has-bigints@1.0.2: + /has-bigints/1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true - /has-flag@3.0.0: + /has-flag/3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} + dev: true - /has-flag@4.0.0: + /has-flag/4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-property-descriptors@1.0.0: + /has-property-descriptors/1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: get-intrinsic: 1.2.0 dev: true - /has-proto@1.0.1: + /has-proto/1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} dev: true - /has-symbols@1.0.3: + /has-symbols/1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: true - /has-tostringtag@1.0.0: + /has-tostringtag/1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /has-value@0.3.1: + /has-value/0.3.1: resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} engines: {node: '>=0.10.0'} dependencies: @@ -6318,7 +6371,7 @@ packages: isobject: 2.1.0 dev: true - /has-value@1.0.0: + /has-value/1.0.0: resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} engines: {node: '>=0.10.0'} dependencies: @@ -6327,12 +6380,12 @@ packages: isobject: 3.0.1 dev: true - /has-values@0.1.4: + /has-values/0.1.4: resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} engines: {node: '>=0.10.0'} dev: true - /has-values@1.0.0: + /has-values/1.0.0: resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} engines: {node: '>=0.10.0'} dependencies: @@ -6340,35 +6393,35 @@ packages: kind-of: 4.0.0 dev: true - /has@1.0.3: + /has/1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 dev: true - /headers-polyfill@3.1.2: + /headers-polyfill/3.1.2: resolution: {integrity: sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==} - /homedir-polyfill@1.0.3: + /homedir-polyfill/1.0.3: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} dependencies: parse-passwd: 1.0.0 dev: true - /hosted-git-info@2.8.9: + /hosted-git-info/2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true - /hosted-git-info@4.1.0: + /hosted-git-info/4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} dependencies: lru-cache: 6.0.0 dev: true - /hpack.js@2.1.6: + /hpack.js/2.1.6: resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} dependencies: inherits: 2.0.4 @@ -6377,22 +6430,22 @@ packages: wbuf: 1.7.3 dev: true - /html-encoding-sniffer@3.0.0: + /html-encoding-sniffer/3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} dependencies: whatwg-encoding: 2.0.0 dev: true - /html-entities@1.4.0: + /html-entities/1.4.0: resolution: {integrity: sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==} dev: true - /html-escaper@2.0.2: + /html-escaper/2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - /http-assert@1.5.0: + /http-assert/1.5.0: resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} engines: {node: '>= 0.8'} dependencies: @@ -6400,11 +6453,11 @@ packages: http-errors: 1.8.1 dev: true - /http-deceiver@1.2.7: + /http-deceiver/1.2.7: resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} dev: true - /http-errors@1.6.3: + /http-errors/1.6.3: resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} engines: {node: '>= 0.6'} dependencies: @@ -6414,7 +6467,7 @@ packages: statuses: 1.5.0 dev: true - /http-errors@1.8.1: + /http-errors/1.8.1: resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} engines: {node: '>= 0.6'} dependencies: @@ -6425,7 +6478,7 @@ packages: toidentifier: 1.0.1 dev: true - /http-errors@2.0.0: + /http-errors/2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} dependencies: @@ -6436,92 +6489,92 @@ packages: toidentifier: 1.0.1 dev: true - /http-parser-js@0.5.8: + /http-parser-js/0.5.8: resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} dev: true - /http-proxy-agent@5.0.0: + /http-proxy-agent/5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true - /http-proxy-middleware@0.19.1(debug@4.3.4)(supports-color@6.1.0): + /http-proxy-middleware/0.19.1_tmpgdztspuwvsxzgjkhoqk7duq: resolution: {integrity: sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==} engines: {node: '>=4.0.0'} dependencies: - http-proxy: 1.18.1(debug@4.3.4) + http-proxy: 1.18.1_debug@4.3.4 is-glob: 4.0.3 lodash: 4.17.21 - micromatch: 3.1.10(supports-color@6.1.0) + micromatch: 3.1.10_supports-color@6.1.0 transitivePeerDependencies: - debug - supports-color dev: true - /http-proxy@1.18.1(debug@4.3.4): + /http-proxy/1.18.1_debug@4.3.4: resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.2(debug@4.3.4) + follow-redirects: 1.15.2_debug@4.3.4 requires-port: 1.0.0 transitivePeerDependencies: - debug dev: true - /https-proxy-agent@5.0.1: + /https-proxy-agent/5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true - /human-signals@2.1.0: + /human-signals/2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} dev: true - /human-signals@4.3.1: + /human-signals/4.3.1: resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} engines: {node: '>=14.18.0'} dev: true - /iconv-lite@0.4.24: + /iconv-lite/0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 - /iconv-lite@0.6.3: + /iconv-lite/0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 dev: true - /ieee754@1.2.1: + /ieee754/1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - /ignore@4.0.6: + /ignore/4.0.6: resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} engines: {node: '>= 4'} dev: true - /ignore@5.2.4: + /ignore/5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} dev: true - /import-fresh@3.3.0: + /import-fresh/3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} dependencies: @@ -6529,7 +6582,7 @@ packages: resolve-from: 4.0.0 dev: true - /import-local@2.0.0: + /import-local/2.0.0: resolution: {integrity: sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==} engines: {node: '>=6'} hasBin: true @@ -6538,7 +6591,7 @@ packages: resolve-cwd: 2.0.0 dev: true - /import-local@3.1.0: + /import-local/3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} hasBin: true @@ -6547,35 +6600,35 @@ packages: resolve-cwd: 3.0.0 dev: true - /imurmurhash@0.1.4: + /imurmurhash/0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} dev: true - /indent-string@4.0.0: + /indent-string/4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} dev: true - /inflight@1.0.6: + /inflight/1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true - /inherits@2.0.3: + /inherits/2.0.3: resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} dev: true - /inherits@2.0.4: + /inherits/2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /ini@1.3.8: + /ini/1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true - /inquirer@8.2.5: + /inquirer/8.2.5: resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} engines: {node: '>=12.0.0'} dependencies: @@ -6595,7 +6648,7 @@ packages: through: 2.3.8 wrap-ansi: 7.0.0 - /internal-ip@4.3.0: + /internal-ip/4.3.0: resolution: {integrity: sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==} engines: {node: '>=6'} dependencies: @@ -6603,7 +6656,7 @@ packages: ipaddr.js: 1.9.1 dev: true - /internal-slot@1.0.5: + /internal-slot/1.0.5: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} dependencies: @@ -6612,40 +6665,40 @@ packages: side-channel: 1.0.4 dev: true - /ip-regex@2.1.0: + /ip-regex/2.1.0: resolution: {integrity: sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==} engines: {node: '>=4'} dev: true - /ip@1.1.8: + /ip/1.1.8: resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==} dev: true - /ipaddr.js@1.9.1: + /ipaddr.js/1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} dev: true - /is-absolute-url@3.0.3: + /is-absolute-url/3.0.3: resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} engines: {node: '>=8'} dev: true - /is-accessor-descriptor@0.1.6: + /is-accessor-descriptor/0.1.6: resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /is-accessor-descriptor@1.0.0: + /is-accessor-descriptor/1.0.0: resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} engines: {node: '>=0.10.0'} dependencies: kind-of: 6.0.3 dev: true - /is-arguments@1.1.1: + /is-arguments/1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: @@ -6653,7 +6706,7 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-array-buffer@3.0.2: + /is-array-buffer/3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: call-bind: 1.0.2 @@ -6661,23 +6714,23 @@ packages: is-typed-array: 1.1.10 dev: true - /is-arrayish@0.2.1: + /is-arrayish/0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true - /is-bigint@1.0.4: + /is-bigint/1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 dev: true - /is-binary-path@2.1.0: + /is-binary-path/2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 - /is-boolean-object@1.1.2: + /is-boolean-object/1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: @@ -6685,50 +6738,50 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-buffer@1.1.6: + /is-buffer/1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: true - /is-builtin-module@3.2.1: + /is-builtin-module/3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} dependencies: builtin-modules: 3.3.0 dev: true - /is-callable@1.2.7: + /is-callable/1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} dev: true - /is-core-module@2.12.0: + /is-core-module/2.12.0: resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} dependencies: has: 1.0.3 dev: true - /is-data-descriptor@0.1.4: + /is-data-descriptor/0.1.4: resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /is-data-descriptor@1.0.0: + /is-data-descriptor/1.0.0: resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} engines: {node: '>=0.10.0'} dependencies: kind-of: 6.0.3 dev: true - /is-date-object@1.0.5: + /is-date-object/1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-descriptor@0.1.6: + /is-descriptor/0.1.6: resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} engines: {node: '>=0.10.0'} dependencies: @@ -6737,7 +6790,7 @@ packages: kind-of: 5.1.0 dev: true - /is-descriptor@1.0.2: + /is-descriptor/1.0.2: resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==} engines: {node: '>=0.10.0'} dependencies: @@ -6746,136 +6799,136 @@ packages: kind-of: 6.0.3 dev: true - /is-docker@2.2.1: + /is-docker/2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true dev: true - /is-extendable@0.1.1: + /is-extendable/0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} dev: true - /is-extendable@1.0.1: + /is-extendable/1.0.1: resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} engines: {node: '>=0.10.0'} dependencies: is-plain-object: 2.0.4 dev: true - /is-extglob@2.1.1: + /is-extglob/2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - /is-fullwidth-code-point@2.0.0: + /is-fullwidth-code-point/2.0.0: resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} engines: {node: '>=4'} dev: true - /is-fullwidth-code-point@3.0.0: + /is-fullwidth-code-point/3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - /is-fullwidth-code-point@4.0.0: + /is-fullwidth-code-point/4.0.0: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} dev: true - /is-generator-fn@2.1.0: + /is-generator-fn/2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} dev: true - /is-generator-function@1.0.10: + /is-generator-function/1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-glob@4.0.3: + /is-glob/4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - /is-interactive@1.0.0: + /is-interactive/1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} - /is-module@1.0.0: + /is-module/1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} dev: true - /is-negative-zero@2.0.2: + /is-negative-zero/2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} dev: true - /is-node-process@1.2.0: + /is-node-process/1.2.0: resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} dev: false - /is-number-object@1.0.7: + /is-number-object/1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-number@3.0.0: + /is-number/3.0.0: resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /is-number@7.0.0: + /is-number/7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - /is-obj@2.0.0: + /is-obj/2.0.0: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} dev: true - /is-path-cwd@2.2.0: + /is-path-cwd/2.2.0: resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} engines: {node: '>=6'} dev: true - /is-path-in-cwd@2.1.0: + /is-path-in-cwd/2.1.0: resolution: {integrity: sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==} engines: {node: '>=6'} dependencies: is-path-inside: 2.1.0 dev: true - /is-path-inside@2.1.0: + /is-path-inside/2.1.0: resolution: {integrity: sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==} engines: {node: '>=6'} dependencies: path-is-inside: 1.0.2 dev: true - /is-plain-obj@1.1.0: + /is-plain-obj/1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} dev: true - /is-plain-object@2.0.4: + /is-plain-object/2.0.4: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true - /is-potential-custom-element-name@1.0.1: + /is-potential-custom-element-name/1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true - /is-regex@1.1.4: + /is-regex/1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: @@ -6883,49 +6936,49 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-shared-array-buffer@1.0.2: + /is-shared-array-buffer/1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.2 dev: true - /is-stream@1.1.0: + /is-stream/1.1.0: resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} engines: {node: '>=0.10.0'} dev: true - /is-stream@2.0.1: + /is-stream/2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} dev: true - /is-stream@3.0.0: + /is-stream/3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /is-string@1.0.7: + /is-string/1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-symbol@1.0.4: + /is-symbol/1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /is-text-path@1.0.1: + /is-text-path/1.0.1: resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} engines: {node: '>=0.10.0'} dependencies: text-extensions: 1.9.0 dev: true - /is-typed-array@1.1.10: + /is-typed-array/1.1.10: resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} engines: {node: '>= 0.4'} dependencies: @@ -6936,63 +6989,63 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-unicode-supported@0.1.0: + /is-unicode-supported/0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} - /is-utf8@0.2.1: + /is-utf8/0.2.1: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} dev: true - /is-weakref@1.0.2: + /is-weakref/1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 dev: true - /is-windows@1.0.2: + /is-windows/1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} dev: true - /is-wsl@1.1.0: + /is-wsl/1.1.0: resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} engines: {node: '>=4'} dev: true - /is-wsl@2.2.0: + /is-wsl/2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} dependencies: is-docker: 2.2.1 dev: true - /isarray@1.0.0: + /isarray/1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true - /isbinaryfile@5.0.0: + /isbinaryfile/5.0.0: resolution: {integrity: sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==} engines: {node: '>= 14.0.0'} dev: true - /isexe@2.0.0: + /isexe/2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /isobject@2.1.0: + /isobject/2.1.0: resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} engines: {node: '>=0.10.0'} dependencies: isarray: 1.0.0 dev: true - /isobject@3.0.1: + /isobject/3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} dev: true - /issue-parser@6.0.0: + /issue-parser/6.0.0: resolution: {integrity: sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==} engines: {node: '>=10.13'} dependencies: @@ -7003,12 +7056,12 @@ packages: lodash.uniqby: 4.7.0 dev: true - /istanbul-lib-coverage@3.2.0: + /istanbul-lib-coverage/3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} dev: true - /istanbul-lib-instrument@5.2.1: + /istanbul-lib-instrument/5.2.1: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: @@ -7021,7 +7074,7 @@ packages: - supports-color dev: true - /istanbul-lib-report@3.0.0: + /istanbul-lib-report/3.0.0: resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} engines: {node: '>=8'} dependencies: @@ -7030,18 +7083,18 @@ packages: supports-color: 7.2.0 dev: true - /istanbul-lib-source-maps@4.0.1: + /istanbul-lib-source-maps/4.0.1: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 istanbul-lib-coverage: 3.2.0 source-map: 0.6.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-reports@3.1.5: + /istanbul-reports/3.1.5: resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} engines: {node: '>=8'} dependencies: @@ -7049,7 +7102,7 @@ packages: istanbul-lib-report: 3.0.0 dev: true - /jest-changed-files@29.5.0: + /jest-changed-files/29.5.0: resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7057,7 +7110,7 @@ packages: p-limit: 3.1.0 dev: true - /jest-circus@29.5.0: + /jest-circus/29.5.0: resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7085,7 +7138,7 @@ packages: - supports-color dev: true - /jest-cli@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): + /jest-cli/29.5.0_rrli7kzx2akox3oq6aahu3rvje: resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -7095,14 +7148,14 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.5.0(ts-node@10.9.1) + '@jest/core': 29.5.0_ts-node@10.9.1 '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + jest-config: 29.5.0_rrli7kzx2akox3oq6aahu3rvje jest-util: 29.5.0 jest-validate: 29.5.0 prompts: 2.4.2 @@ -7113,7 +7166,7 @@ packages: - ts-node dev: true - /jest-config@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): + /jest-config/29.5.0_rrli7kzx2akox3oq6aahu3rvje: resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -7129,7 +7182,7 @@ packages: '@jest/test-sequencer': 29.5.0 '@jest/types': 29.5.0 '@types/node': 18.15.11 - babel-jest: 29.5.0(@babel/core@7.21.4) + babel-jest: 29.5.0_@babel+core@7.21.4 chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.1 @@ -7148,12 +7201,12 @@ packages: pretty-format: 29.5.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4) + ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e transitivePeerDependencies: - supports-color dev: true - /jest-diff@29.5.0: + /jest-diff/29.5.0: resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7163,14 +7216,14 @@ packages: pretty-format: 29.5.0 dev: true - /jest-docblock@29.4.3: + /jest-docblock/29.4.3: resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 dev: true - /jest-each@29.5.0: + /jest-each/29.5.0: resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7181,7 +7234,7 @@ packages: pretty-format: 29.5.0 dev: true - /jest-environment-jsdom@29.5.0: + /jest-environment-jsdom/29.5.0: resolution: {integrity: sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -7204,7 +7257,7 @@ packages: - utf-8-validate dev: true - /jest-environment-node@29.5.0: + /jest-environment-node/29.5.0: resolution: {integrity: sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7216,12 +7269,12 @@ packages: jest-util: 29.5.0 dev: true - /jest-get-type@29.4.3: + /jest-get-type/29.4.3: resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-haste-map@29.5.0: + /jest-haste-map/29.5.0: resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7240,7 +7293,7 @@ packages: fsevents: 2.3.2 dev: true - /jest-leak-detector@29.5.0: + /jest-leak-detector/29.5.0: resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7248,7 +7301,7 @@ packages: pretty-format: 29.5.0 dev: true - /jest-matcher-utils@29.5.0: + /jest-matcher-utils/29.5.0: resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7258,7 +7311,7 @@ packages: pretty-format: 29.5.0 dev: true - /jest-message-util@29.5.0: + /jest-message-util/29.5.0: resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7273,7 +7326,7 @@ packages: stack-utils: 2.0.6 dev: true - /jest-mock@29.5.0: + /jest-mock/29.5.0: resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7282,7 +7335,7 @@ packages: jest-util: 29.5.0 dev: true - /jest-pnp-resolver@1.2.3(jest-resolve@29.5.0): + /jest-pnp-resolver/1.2.3_jest-resolve@29.5.0: resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: @@ -7294,12 +7347,12 @@ packages: jest-resolve: 29.5.0 dev: true - /jest-regex-util@29.4.3: + /jest-regex-util/29.4.3: resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-resolve-dependencies@29.5.0: + /jest-resolve-dependencies/29.5.0: resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7309,14 +7362,14 @@ packages: - supports-color dev: true - /jest-resolve@29.5.0: + /jest-resolve/29.5.0: resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 graceful-fs: 4.2.11 jest-haste-map: 29.5.0 - jest-pnp-resolver: 1.2.3(jest-resolve@29.5.0) + jest-pnp-resolver: 1.2.3_jest-resolve@29.5.0 jest-util: 29.5.0 jest-validate: 29.5.0 resolve: 1.22.2 @@ -7324,7 +7377,7 @@ packages: slash: 3.0.0 dev: true - /jest-runner@29.5.0: + /jest-runner/29.5.0: resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7353,7 +7406,7 @@ packages: - supports-color dev: true - /jest-runtime@29.5.0: + /jest-runtime/29.5.0: resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7383,14 +7436,14 @@ packages: - supports-color dev: true - /jest-snapshot@29.5.0: + /jest-snapshot/29.5.0: resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.21.4 '@babel/generator': 7.21.4 - '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.4) - '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.4) + '@babel/plugin-syntax-jsx': 7.21.4_@babel+core@7.21.4 + '@babel/plugin-syntax-typescript': 7.21.4_@babel+core@7.21.4 '@babel/traverse': 7.21.4 '@babel/types': 7.21.4 '@jest/expect-utils': 29.5.0 @@ -7398,7 +7451,7 @@ packages: '@jest/types': 29.5.0 '@types/babel__traverse': 7.18.3 '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.4) + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.4 chalk: 4.1.2 expect: 29.5.0 graceful-fs: 4.2.11 @@ -7414,7 +7467,7 @@ packages: - supports-color dev: true - /jest-util@29.5.0: + /jest-util/29.5.0: resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7426,7 +7479,7 @@ packages: picomatch: 2.3.1 dev: true - /jest-validate@29.5.0: + /jest-validate/29.5.0: resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7438,7 +7491,7 @@ packages: pretty-format: 29.5.0 dev: true - /jest-watcher@29.5.0: + /jest-watcher/29.5.0: resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7452,7 +7505,7 @@ packages: string-length: 4.0.2 dev: true - /jest-worker@27.5.1: + /jest-worker/27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: @@ -7461,7 +7514,7 @@ packages: supports-color: 8.1.1 dev: true - /jest-worker@29.5.0: + /jest-worker/29.5.0: resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7471,7 +7524,7 @@ packages: supports-color: 8.1.1 dev: true - /jest@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): + /jest/29.5.0_rrli7kzx2akox3oq6aahu3rvje: resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -7481,31 +7534,31 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.5.0(ts-node@10.9.1) + '@jest/core': 29.5.0_ts-node@10.9.1 '@jest/types': 29.5.0 import-local: 3.1.0 - jest-cli: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + jest-cli: 29.5.0_rrli7kzx2akox3oq6aahu3rvje transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: true - /joycon@3.1.1: + /joycon/3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} dev: true - /js-levenshtein@1.1.6: + /js-levenshtein/1.1.6: resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} engines: {node: '>=0.10.0'} dev: false - /js-tokens@4.0.0: + /js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true - /js-yaml@3.14.1: + /js-yaml/3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true dependencies: @@ -7513,7 +7566,7 @@ packages: esprima: 4.0.1 dev: true - /js-yaml@4.1.0: + /js-yaml/4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: @@ -7521,7 +7574,7 @@ packages: dev: true optional: true - /jsdom@20.0.3: + /jsdom/20.0.3: resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} engines: {node: '>=14'} peerDependencies: @@ -7562,50 +7615,50 @@ packages: - utf-8-validate dev: true - /jsesc@0.5.0: + /jsesc/0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true dev: true - /jsesc@2.5.2: + /jsesc/2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true dev: true - /json-bigint@1.0.0: + /json-bigint/1.0.0: resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} dependencies: bignumber.js: 9.1.1 dev: true - /json-parse-even-better-errors@2.3.1: + /json-parse-even-better-errors/2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true - /json-schema-traverse@0.4.1: + /json-schema-traverse/0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true - /json-schema-traverse@1.0.0: + /json-schema-traverse/1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: true - /json-stable-stringify-without-jsonify@1.0.1: + /json-stable-stringify-without-jsonify/1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true - /json5@2.2.3: + /json5/2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true dev: true - /jsonc-parser@3.2.0: + /jsonc-parser/3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} dev: true - /jsonfile@6.1.0: + /jsonfile/6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.0 @@ -7613,56 +7666,56 @@ packages: graceful-fs: 4.2.11 dev: true - /jsonparse@1.3.1: + /jsonparse/1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} dev: true - /keygrip@1.1.0: + /keygrip/1.1.0: resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} engines: {node: '>= 0.6'} dependencies: tsscmp: 1.0.6 dev: true - /killable@1.0.1: + /killable/1.0.1: resolution: {integrity: sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==} dev: true - /kind-of@3.2.2: + /kind-of/3.2.2: resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} engines: {node: '>=0.10.0'} dependencies: is-buffer: 1.1.6 dev: true - /kind-of@4.0.0: + /kind-of/4.0.0: resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} engines: {node: '>=0.10.0'} dependencies: is-buffer: 1.1.6 dev: true - /kind-of@5.1.0: + /kind-of/5.1.0: resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} engines: {node: '>=0.10.0'} dev: true - /kind-of@6.0.3: + /kind-of/6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} dev: true - /kleur@3.0.3: + /kleur/3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} dev: true - /koa-compose@4.1.0: + /koa-compose/4.1.0: resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} dev: true - /koa-convert@2.0.0: + /koa-convert/2.0.0: resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} engines: {node: '>= 10'} dependencies: @@ -7670,34 +7723,34 @@ packages: koa-compose: 4.1.0 dev: true - /koa-etag@4.0.0: + /koa-etag/4.0.0: resolution: {integrity: sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==} dependencies: etag: 1.8.1 dev: true - /koa-send@5.0.1: + /koa-send/5.0.1: resolution: {integrity: sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==} engines: {node: '>= 8'} dependencies: - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 http-errors: 1.8.1 resolve-path: 1.4.0 transitivePeerDependencies: - supports-color dev: true - /koa-static@5.0.0: + /koa-static/5.0.0: resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==} engines: {node: '>= 7.6.0'} dependencies: - debug: 3.2.7(supports-color@6.1.0) + debug: 3.2.7 koa-send: 5.0.1 transitivePeerDependencies: - supports-color dev: true - /koa@2.14.2: + /koa/2.14.2: resolution: {integrity: sha512-VFI2bpJaodz6P7x2uyLiX6RLYpZmOJqNmoCst/Yyd7hQlszyPwG/I9CQJ63nOtKSxpt5M7NH67V6nJL2BwCl7g==} engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} dependencies: @@ -7706,7 +7759,7 @@ packages: content-disposition: 0.5.4 content-type: 1.0.5 cookies: 0.8.0 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 delegates: 1.0.0 depd: 2.0.0 destroy: 1.2.0 @@ -7728,17 +7781,17 @@ packages: - supports-color dev: true - /leven@2.1.0: + /leven/2.1.0: resolution: {integrity: sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==} engines: {node: '>=0.10.0'} dev: true - /leven@3.1.0: + /leven/3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} dev: true - /levn@0.3.0: + /levn/0.3.0: resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} engines: {node: '>= 0.8.0'} dependencies: @@ -7746,7 +7799,7 @@ packages: type-check: 0.3.2 dev: true - /levn@0.4.1: + /levn/0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} dependencies: @@ -7754,16 +7807,16 @@ packages: type-check: 0.4.0 dev: true - /lilconfig@2.1.0: + /lilconfig/2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} dev: true - /lines-and-columns@1.2.4: + /lines-and-columns/1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true - /lint-staged@13.2.1: + /lint-staged/13.2.1: resolution: {integrity: sha512-8gfzinVXoPfga5Dz/ZOn8I2GOhf81Wvs+KwbEXQn/oWZAvCVS2PivrXfVbFJc93zD16uC0neS47RXHIjXKYZQw==} engines: {node: ^14.13.1 || >=16.0.0} hasBin: true @@ -7771,7 +7824,7 @@ packages: chalk: 5.2.0 cli-truncate: 3.1.0 commander: 10.0.0 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 execa: 7.1.1 lilconfig: 2.1.0 listr2: 5.0.8 @@ -7786,7 +7839,7 @@ packages: - supports-color dev: true - /listr2@5.0.8: + /listr2/5.0.8: resolution: {integrity: sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==} engines: {node: ^14.13.1 || >=16.0.0} peerDependencies: @@ -7805,17 +7858,17 @@ packages: wrap-ansi: 7.0.0 dev: true - /load-tsconfig@0.2.5: + /load-tsconfig/0.2.5: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /loader-runner@4.3.0: + /loader-runner/4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} dev: true - /loader-utils@2.0.4: + /loader-utils/2.0.4: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} engines: {node: '>=8.9.0'} dependencies: @@ -7824,7 +7877,7 @@ packages: json5: 2.2.3 dev: true - /locate-path@3.0.0: + /locate-path/3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} dependencies: @@ -7832,89 +7885,89 @@ packages: path-exists: 3.0.0 dev: true - /locate-path@5.0.0: + /locate-path/5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} dependencies: p-locate: 4.1.0 dev: true - /locate-path@6.0.0: + /locate-path/6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} dependencies: p-locate: 5.0.0 dev: true - /lodash.assignwith@4.2.0: + /lodash.assignwith/4.2.0: resolution: {integrity: sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==} dev: true - /lodash.camelcase@4.3.0: + /lodash.camelcase/4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true - /lodash.capitalize@4.2.1: + /lodash.capitalize/4.2.1: resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} dev: true - /lodash.debounce@4.0.8: + /lodash.debounce/4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: true - /lodash.escaperegexp@4.1.2: + /lodash.escaperegexp/4.1.2: resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} dev: true - /lodash.isplainobject@4.0.6: + /lodash.isplainobject/4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} dev: true - /lodash.isstring@4.0.1: + /lodash.isstring/4.0.1: resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} dev: true - /lodash.map@4.6.0: + /lodash.map/4.6.0: resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==} dev: true - /lodash.merge@4.6.2: + /lodash.merge/4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true - /lodash.mergewith@4.6.2: + /lodash.mergewith/4.6.2: resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} dev: true optional: true - /lodash.sortby@4.7.0: + /lodash.sortby/4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} dev: true - /lodash.truncate@4.4.2: + /lodash.truncate/4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} dev: true - /lodash.uniq@4.5.0: + /lodash.uniq/4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} dev: true optional: true - /lodash.uniqby@4.7.0: + /lodash.uniqby/4.7.0: resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} dev: true - /lodash@4.17.21: + /lodash/4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - /log-symbols@4.1.0: + /log-symbols/4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - /log-update@4.0.0: + /log-update/4.0.0: resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} engines: {node: '>=10'} dependencies: @@ -7924,93 +7977,93 @@ packages: wrap-ansi: 6.2.0 dev: true - /loglevel@1.8.1: + /loglevel/1.8.1: resolution: {integrity: sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==} engines: {node: '>= 0.6.0'} dev: true - /longest@2.0.1: + /longest/2.0.1: resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==} engines: {node: '>=0.10.0'} dev: true - /lru-cache@5.1.1: + /lru-cache/5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 dev: true - /lru-cache@6.0.0: + /lru-cache/6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 dev: true - /lru-cache@9.0.1: + /lru-cache/9.0.1: resolution: {integrity: sha512-C8QsKIN1UIXeOs3iWmiZ1lQY+EnKDojWd37fXy1aSbJvH4iSma1uy2OWuoB3m4SYRli5+CUjDv3Dij5DVoetmg==} engines: {node: 14 || >=16.14} dev: true - /make-dir@3.1.0: + /make-dir/3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} dependencies: semver: 6.3.0 dev: true - /make-error@1.3.6: + /make-error/1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /makeerror@1.0.12: + /makeerror/1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: tmpl: 1.0.5 dev: true - /map-cache@0.2.2: + /map-cache/0.2.2: resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} engines: {node: '>=0.10.0'} dev: true - /map-obj@1.0.1: + /map-obj/1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} dev: true - /map-obj@4.3.0: + /map-obj/4.3.0: resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} engines: {node: '>=8'} dev: true - /map-visit@1.0.0: + /map-visit/1.0.0: resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} engines: {node: '>=0.10.0'} dependencies: object-visit: 1.0.1 dev: true - /media-typer@0.3.0: + /media-typer/0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} dev: true - /memfs@3.5.0: + /memfs/3.5.0: resolution: {integrity: sha512-yK6o8xVJlQerz57kvPROwTMgx5WtGwC2ZxDtOUsnGl49rHjYkfQoPNZPCKH73VdLE1BwBu/+Fx/NL8NYMUw2aA==} engines: {node: '>= 4.0.0'} dependencies: fs-monkey: 1.0.3 dev: true - /memory-fs@0.4.1: + /memory-fs/0.4.1: resolution: {integrity: sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==} dependencies: errno: 0.1.8 readable-stream: 2.3.8 dev: true - /meow@8.1.2: + /meow/8.1.2: resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} engines: {node: '>=10'} dependencies: @@ -8027,50 +8080,50 @@ packages: yargs-parser: 20.2.9 dev: true - /merge-descriptors@1.0.1: + /merge-descriptors/1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} dev: true - /merge-stream@2.0.0: + /merge-stream/2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + /merge/2.1.1: + resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} dev: true - /merge@2.1.1: - resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} + /merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} dev: true - /methods@1.1.2: + /methods/1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} dev: true - /micromatch@3.1.10(supports-color@6.1.0): + /micromatch/3.1.10_supports-color@6.1.0: resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} engines: {node: '>=0.10.0'} dependencies: arr-diff: 4.0.0 array-unique: 0.3.2 - braces: 2.3.2(supports-color@6.1.0) + braces: 2.3.2_supports-color@6.1.0 define-property: 2.0.2 extend-shallow: 3.0.2 - extglob: 2.0.4(supports-color@6.1.0) + extglob: 2.0.4_supports-color@6.1.0 fragment-cache: 0.2.1 kind-of: 6.0.3 - nanomatch: 1.2.13(supports-color@6.1.0) + nanomatch: 1.2.13_supports-color@6.1.0 object.pick: 1.3.0 regex-not: 1.0.2 - snapdragon: 0.8.2(supports-color@6.1.0) + snapdragon: 0.8.2_supports-color@6.1.0 to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true - /micromatch@4.0.5: + /micromatch/4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: @@ -8078,60 +8131,60 @@ packages: picomatch: 2.3.1 dev: true - /mime-db@1.52.0: + /mime-db/1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - /mime-types@2.1.35: + /mime-types/2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 - /mime@1.6.0: + /mime/1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} hasBin: true dev: true - /mime@2.6.0: + /mime/2.6.0: resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} engines: {node: '>=4.0.0'} hasBin: true dev: true - /mimic-fn@2.1.0: + /mimic-fn/2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - /mimic-fn@4.0.0: + /mimic-fn/4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} dev: true - /min-indent@1.0.1: + /min-indent/1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} dev: true - /minimalistic-assert@1.0.1: + /minimalistic-assert/1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} dev: true - /minimatch@3.1.2: + /minimatch/3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 dev: true - /minimatch@8.0.4: + /minimatch/8.0.4: resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 dev: true - /minimist-options@4.1.0: + /minimist-options/4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} dependencies: @@ -8140,25 +8193,25 @@ packages: kind-of: 6.0.3 dev: true - /minimist@1.2.7: + /minimist/1.2.7: resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} dev: true - /minimist@1.2.8: + /minimist/1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /minipass@4.2.8: + /minipass/4.2.8: resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} engines: {node: '>=8'} dev: true - /minipass@5.0.0: + /minipass/5.0.0: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} dev: true - /mixin-deep@1.3.2: + /mixin-deep/1.3.2: resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} engines: {node: '>=0.10.0'} dependencies: @@ -8166,34 +8219,34 @@ packages: is-extendable: 1.0.1 dev: true - /mkdirp@0.5.6: + /mkdirp/0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true dependencies: minimist: 1.2.8 dev: true - /mri@1.1.4: + /mri/1.1.4: resolution: {integrity: sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==} engines: {node: '>=4'} dev: true - /ms@2.0.0: + /ms/2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: true - /ms@2.1.2: + /ms/2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - /ms@2.1.3: + /ms/2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true - /multicast-dns-service-types@1.1.0: + /multicast-dns-service-types/1.1.0: resolution: {integrity: sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==} dev: true - /multicast-dns@6.2.3: + /multicast-dns/6.2.3: resolution: {integrity: sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==} hasBin: true dependencies: @@ -8201,15 +8254,15 @@ packages: thunky: 1.1.0 dev: true - /mustache@4.2.0: + /mustache/4.2.0: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true dev: true - /mute-stream@0.0.8: + /mute-stream/0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - /mz@2.7.0: + /mz/2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: any-promise: 1.3.0 @@ -8217,11 +8270,11 @@ packages: thenify-all: 1.6.0 dev: true - /nanocolors@0.2.13: + /nanocolors/0.2.13: resolution: {integrity: sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==} dev: true - /nanomatch@1.2.13(supports-color@6.1.0): + /nanomatch/1.2.13_supports-color@6.1.0: resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} engines: {node: '>=0.10.0'} dependencies: @@ -8234,38 +8287,38 @@ packages: kind-of: 6.0.3 object.pick: 1.3.0 regex-not: 1.0.2 - snapdragon: 0.8.2(supports-color@6.1.0) + snapdragon: 0.8.2_supports-color@6.1.0 to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true - /natural-compare-lite@1.4.0: + /natural-compare-lite/1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} dev: true - /natural-compare@1.4.0: + /natural-compare/1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /negotiator@0.6.3: + /negotiator/0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} - /neo-async@2.6.2: + /neo-async/2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true - /nice-try@1.0.5: + /nice-try/1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} dev: true - /node-domexception@1.0.0: + /node-domexception/1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} dev: false - /node-fetch@2.6.7: + /node-fetch/2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} peerDependencies: @@ -8277,7 +8330,7 @@ packages: whatwg-url: 5.0.0 dev: true - /node-fetch@2.6.9: + /node-fetch/2.6.9: resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} engines: {node: 4.x || >=6.0.0} peerDependencies: @@ -8289,20 +8342,20 @@ packages: whatwg-url: 5.0.0 dev: false - /node-forge@0.10.0: + /node-forge/0.10.0: resolution: {integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==} engines: {node: '>= 6.0.0'} dev: true - /node-int64@0.4.0: + /node-int64/0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /node-releases@2.0.10: + /node-releases/2.0.10: resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} dev: true - /normalize-package-data@2.5.0: + /normalize-package-data/2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 @@ -8311,7 +8364,7 @@ packages: validate-npm-package-license: 3.0.4 dev: true - /normalize-package-data@3.0.3: + /normalize-package-data/3.0.3: resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} engines: {node: '>=10'} dependencies: @@ -8321,40 +8374,40 @@ packages: validate-npm-package-license: 3.0.4 dev: true - /normalize-path@3.0.0: + /normalize-path/3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - /npm-run-path@2.0.2: + /npm-run-path/2.0.2: resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} engines: {node: '>=4'} dependencies: path-key: 2.0.1 dev: true - /npm-run-path@4.0.1: + /npm-run-path/4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} dependencies: path-key: 3.1.1 dev: true - /npm-run-path@5.1.0: + /npm-run-path/5.1.0: resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 dev: true - /nwsapi@2.2.4: + /nwsapi/2.2.4: resolution: {integrity: sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==} dev: true - /object-assign@4.1.1: + /object-assign/4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - /object-copy@0.1.0: + /object-copy/0.1.0: resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} engines: {node: '>=0.10.0'} dependencies: @@ -8363,11 +8416,11 @@ packages: kind-of: 3.2.2 dev: true - /object-inspect@1.12.3: + /object-inspect/1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} dev: true - /object-is@1.1.5: + /object-is/1.1.5: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} engines: {node: '>= 0.4'} dependencies: @@ -8375,19 +8428,19 @@ packages: define-properties: 1.2.0 dev: true - /object-keys@1.1.1: + /object-keys/1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} dev: true - /object-visit@1.0.1: + /object-visit/1.0.1: resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true - /object.assign@4.1.4: + /object.assign/4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: @@ -8397,7 +8450,7 @@ packages: object-keys: 1.1.1 dev: true - /object.getownpropertydescriptors@2.1.5: + /object.getownpropertydescriptors/2.1.5: resolution: {integrity: sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==} engines: {node: '>= 0.8'} dependencies: @@ -8407,57 +8460,57 @@ packages: es-abstract: 1.21.2 dev: true - /object.pick@1.3.0: + /object.pick/1.3.0: resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true - /obuf@1.1.2: + /obuf/1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} dev: true - /on-exit-leak-free@0.2.0: + /on-exit-leak-free/0.2.0: resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} dev: true - /on-finished@2.4.1: + /on-finished/2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} dependencies: ee-first: 1.1.1 dev: true - /on-headers@1.0.2: + /on-headers/1.0.2: resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} engines: {node: '>= 0.8'} dev: true - /once@1.4.0: + /once/1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 dev: true - /onetime@5.1.2: + /onetime/5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - /onetime@6.0.0: + /onetime/6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 dev: true - /only@0.0.2: + /only/0.0.2: resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} dev: true - /open@8.4.2: + /open/8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} dependencies: @@ -8466,14 +8519,14 @@ packages: is-wsl: 2.2.0 dev: true - /opn@5.5.0: + /opn/5.5.0: resolution: {integrity: sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==} engines: {node: '>=4'} dependencies: is-wsl: 1.1.0 dev: true - /optionator@0.8.3: + /optionator/0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} dependencies: @@ -8485,7 +8538,7 @@ packages: word-wrap: 1.2.3 dev: true - /optionator@0.9.1: + /optionator/0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} engines: {node: '>= 0.8.0'} dependencies: @@ -8497,7 +8550,7 @@ packages: word-wrap: 1.2.3 dev: true - /ora@5.4.1: + /ora/5.4.1: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} dependencies: @@ -8511,78 +8564,78 @@ packages: strip-ansi: 6.0.1 wcwidth: 1.0.1 - /os-tmpdir@1.0.2: + /os-tmpdir/1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - /outvariant@1.4.0: + /outvariant/1.4.0: resolution: {integrity: sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==} - /p-finally@1.0.0: + /p-finally/1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} dev: true - /p-limit@2.3.0: + /p-limit/2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} dependencies: p-try: 2.2.0 dev: true - /p-limit@3.1.0: + /p-limit/3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 dev: true - /p-locate@3.0.0: + /p-locate/3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} engines: {node: '>=6'} dependencies: p-limit: 2.3.0 dev: true - /p-locate@4.1.0: + /p-locate/4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} dependencies: p-limit: 2.3.0 dev: true - /p-locate@5.0.0: + /p-locate/5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} dependencies: p-limit: 3.1.0 dev: true - /p-map@2.1.0: + /p-map/2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} dev: true - /p-map@4.0.0: + /p-map/4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} dependencies: aggregate-error: 3.1.0 dev: true - /p-retry@3.0.1: + /p-retry/3.0.1: resolution: {integrity: sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==} engines: {node: '>=6'} dependencies: retry: 0.12.0 dev: true - /p-try@2.2.0: + /p-try/2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} dev: true - /page-with@0.6.1(@swc/core@1.3.49)(esbuild@0.17.16): + /page-with/0.6.1_57233mj27fjz7synoeubptyy7e: resolution: {integrity: sha512-5J58fSpc8CKonUWCPsh8b2LctFrNSOpXQ8O3tB+/iJvixOQf1qHp4+cDLiIVsl/WiuheXdZTzMcuR0KLQMaWcg==} dependencies: '@open-draft/until': 2.1.0 @@ -8590,14 +8643,14 @@ packages: '@types/express': 4.17.17 '@types/mustache': 4.2.2 '@types/uuid': 8.3.4 - debug: 4.3.4(supports-color@6.1.0) - express: 4.18.2(supports-color@6.1.0) + debug: 4.3.4 + express: 4.18.2 headers-polyfill: 3.1.2 memfs: 3.5.0 mustache: 4.2.0 playwright: 1.32.3 uuid: 8.3.2 - webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e webpack-merge: 5.8.0 transitivePeerDependencies: - '@swc/core' @@ -8607,14 +8660,14 @@ packages: - webpack-cli dev: true - /parent-module@1.0.1: + /parent-module/1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} dependencies: callsites: 3.1.0 dev: true - /parse-json@5.2.0: + /parse-json/5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: @@ -8624,70 +8677,70 @@ packages: lines-and-columns: 1.2.4 dev: true - /parse-passwd@1.0.0: + /parse-passwd/1.0.0: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} dev: true - /parse5@6.0.1: + /parse5/6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} dev: true - /parse5@7.1.2: + /parse5/7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: entities: 4.4.0 dev: true - /parseurl@1.3.3: + /parseurl/1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} dev: true - /pascalcase@0.1.1: + /pascalcase/0.1.1: resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} engines: {node: '>=0.10.0'} dev: true - /path-exists@3.0.0: + /path-exists/3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} dev: true - /path-exists@4.0.0: + /path-exists/4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} dev: true - /path-is-absolute@1.0.1: + /path-is-absolute/1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} dev: true - /path-is-inside@1.0.2: + /path-is-inside/1.0.2: resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} dev: true - /path-key@2.0.1: + /path-key/2.0.1: resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} engines: {node: '>=4'} dev: true - /path-key@3.1.1: + /path-key/3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} dev: true - /path-key@4.0.0: + /path-key/4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} dev: true - /path-parse@1.0.7: + /path-parse/1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-scurry@1.6.4: + /path-scurry/1.6.4: resolution: {integrity: sha512-Qp/9IHkdNiXJ3/Kon++At2nVpnhRiPq/aSvQN+H3U1WZbvNRK0RIQK/o4HMqPoXjpuGJUEWpHSs6Mnjxqh3TQg==} engines: {node: '>=16 || 14 >=14.17'} dependencies: @@ -8695,63 +8748,63 @@ packages: minipass: 5.0.0 dev: true - /path-to-regexp@0.1.7: + /path-to-regexp/0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: true - /path-to-regexp@6.2.1: + /path-to-regexp/6.2.1: resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} dev: false - /path-type@4.0.0: + /path-type/4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} dev: true - /picocolors@1.0.0: + /picocolors/1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true - /picomatch@2.3.1: + /picomatch/2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - /pidtree@0.6.0: + /pidtree/0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} hasBin: true dev: true - /pify@2.3.0: + /pify/2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} dev: true - /pify@4.0.1: + /pify/4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} dev: true - /pinkie-promise@2.0.1: + /pinkie-promise/2.0.1: resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} engines: {node: '>=0.10.0'} dependencies: pinkie: 2.0.4 dev: true - /pinkie@2.0.4: + /pinkie/2.0.4: resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} engines: {node: '>=0.10.0'} dev: true - /pino-abstract-transport@0.5.0: + /pino-abstract-transport/0.5.0: resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} dependencies: duplexify: 4.1.2 split2: 4.2.0 dev: true - /pino-pretty@7.6.1: + /pino-pretty/7.6.1: resolution: {integrity: sha512-H7N6ZYkiyrfwBGW9CSjx0uyO9Q2Lyt73881+OTYk8v3TiTdgN92QHrWlEq/LeWw5XtDP64jeSk3mnc6T+xX9/w==} hasBin: true dependencies: @@ -8770,11 +8823,11 @@ packages: strip-json-comments: 3.1.1 dev: true - /pino-std-serializers@4.0.0: + /pino-std-serializers/4.0.0: resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} dev: true - /pino@7.11.0: + /pino/7.11.0: resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} hasBin: true dependencies: @@ -8791,32 +8844,32 @@ packages: thread-stream: 0.15.2 dev: true - /pirates@4.0.5: + /pirates/4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} dev: true - /pkg-dir@3.0.0: + /pkg-dir/3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} engines: {node: '>=6'} dependencies: find-up: 3.0.0 dev: true - /pkg-dir@4.2.0: + /pkg-dir/4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} dependencies: find-up: 4.1.0 dev: true - /playwright-core@1.32.3: + /playwright-core/1.32.3: resolution: {integrity: sha512-SB+cdrnu74ZIn5Ogh/8278ngEh9NEEV0vR4sJFmK04h2iZpybfbqBY0bX6+BLYWVdV12JLLI+JEFtSnYgR+mWg==} engines: {node: '>=14'} hasBin: true dev: true - /playwright@1.32.3: + /playwright/1.32.3: resolution: {integrity: sha512-h/ylpgoj6l/EjkfUDyx8cdOlfzC96itPpPe8BXacFkqpw/YsuxkpPyVbzEq4jw+bAJh5FLgh31Ljg2cR6HV3uw==} engines: {node: '>=14'} hasBin: true @@ -8825,23 +8878,34 @@ packages: playwright-core: 1.32.3 dev: true - /portfinder@1.0.32(supports-color@6.1.0): + /portfinder/1.0.32: + resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} + engines: {node: '>= 0.12.0'} + dependencies: + async: 2.6.4 + debug: 3.2.7 + mkdirp: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: true + + /portfinder/1.0.32_supports-color@6.1.0: resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} dependencies: async: 2.6.4 - debug: 3.2.7(supports-color@6.1.0) + debug: 3.2.7_supports-color@6.1.0 mkdirp: 0.5.6 transitivePeerDependencies: - supports-color dev: true - /posix-character-classes@0.1.1: + /posix-character-classes/0.1.1: resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} engines: {node: '>=0.10.0'} dev: true - /postcss-load-config@3.1.4(ts-node@10.9.1): + /postcss-load-config/3.1.4_ts-node@10.9.1: resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -8854,34 +8918,34 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - ts-node: 10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4) + ts-node: 10.9.1_l7nicavc6cghsvyjdpeszw7e5e yaml: 1.10.2 dev: true - /prelude-ls@1.1.2: + /prelude-ls/1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} dev: true - /prelude-ls@1.2.1: + /prelude-ls/1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} dev: true - /prettier-linter-helpers@1.0.0: + /prettier-linter-helpers/1.0.0: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} dependencies: fast-diff: 1.2.0 dev: true - /prettier@2.8.7: + /prettier/2.8.7: resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==} engines: {node: '>=10.13.0'} hasBin: true dev: true - /pretty-format@29.5.0: + /pretty-format/29.5.0: resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -8890,20 +8954,20 @@ packages: react-is: 18.2.0 dev: true - /process-nextick-args@2.0.1: + /process-nextick-args/2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true - /process-warning@1.0.0: + /process-warning/1.0.0: resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} dev: true - /progress@2.0.3: + /progress/2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} dev: true - /prompts@2.4.2: + /prompts/2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} dependencies: @@ -8911,7 +8975,7 @@ packages: sisteransi: 1.0.5 dev: true - /proxy-addr@2.0.7: + /proxy-addr/2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} dependencies: @@ -8919,81 +8983,81 @@ packages: ipaddr.js: 1.9.1 dev: true - /prr@1.0.1: + /prr/1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} dev: true - /psl@1.9.0: + /psl/1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true - /pump@3.0.0: + /pump/3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 dev: true - /punycode@1.3.2: + /punycode/1.3.2: resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} dev: true - /punycode@2.3.0: + /punycode/2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} dev: true - /pure-rand@6.0.1: + /pure-rand/6.0.1: resolution: {integrity: sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==} dev: true - /q@1.5.1: + /q/1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} dev: true - /qs@6.11.0: + /qs/6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.4 dev: true - /querystring@0.2.0: + /querystring/0.2.0: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. dev: true - /querystringify@2.2.0: + /querystringify/2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} dev: true - /queue-microtask@1.2.3: + /queue-microtask/1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true - /quick-format-unescaped@4.0.4: + /quick-format-unescaped/4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} dev: true - /quick-lru@4.0.1: + /quick-lru/4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} dev: true - /randombytes@2.1.0: + /randombytes/2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 dev: true - /range-parser@1.2.1: + /range-parser/1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} dev: true - /raw-body@2.5.1: + /raw-body/2.5.1: resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} engines: {node: '>= 0.8'} dependencies: @@ -9003,7 +9067,7 @@ packages: unpipe: 1.0.0 dev: true - /rc@1.2.8: + /rc/1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true dependencies: @@ -9013,11 +9077,11 @@ packages: strip-json-comments: 2.0.1 dev: true - /react-is@18.2.0: + /react-is/18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true - /read-pkg-up@7.0.1: + /read-pkg-up/7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} dependencies: @@ -9026,7 +9090,7 @@ packages: type-fest: 0.8.1 dev: true - /read-pkg@5.2.0: + /read-pkg/5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} dependencies: @@ -9036,7 +9100,7 @@ packages: type-fest: 0.6.0 dev: true - /readable-stream@2.3.8: + /readable-stream/2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: core-util-is: 1.0.3 @@ -9048,7 +9112,7 @@ packages: util-deprecate: 1.0.2 dev: true - /readable-stream@3.6.2: + /readable-stream/3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} dependencies: @@ -9056,18 +9120,18 @@ packages: string_decoder: 1.3.0 util-deprecate: 1.0.2 - /readdirp@3.4.0: + /readdirp/3.4.0: resolution: {integrity: sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 - /real-require@0.1.0: + /real-require/0.1.0: resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} engines: {node: '>= 12.13.0'} dev: true - /redent@3.0.0: + /redent/3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} dependencies: @@ -9075,28 +9139,28 @@ packages: strip-indent: 3.0.0 dev: true - /regenerate-unicode-properties@10.1.0: + /regenerate-unicode-properties/10.1.0: resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} engines: {node: '>=4'} dependencies: regenerate: 1.4.2 dev: true - /regenerate@1.4.2: + /regenerate/1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} dev: true - /regenerator-runtime@0.13.11: + /regenerator-runtime/0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} dev: true - /regenerator-transform@0.15.1: + /regenerator-transform/0.15.1: resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} dependencies: '@babel/runtime': 7.21.0 dev: true - /regex-not@1.0.2: + /regex-not/1.0.2: resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} engines: {node: '>=0.10.0'} dependencies: @@ -9104,7 +9168,7 @@ packages: safe-regex: 1.1.0 dev: true - /regexp.prototype.flags@1.4.3: + /regexp.prototype.flags/1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} engines: {node: '>= 0.4'} dependencies: @@ -9113,12 +9177,12 @@ packages: functions-have-names: 1.2.3 dev: true - /regexpp@3.2.0: + /regexpp/3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} dev: true - /regexpu-core@5.3.2: + /regexpu-core/5.3.2: resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} engines: {node: '>=4'} dependencies: @@ -9130,62 +9194,62 @@ packages: unicode-match-property-value-ecmascript: 2.1.0 dev: true - /registry-auth-token@4.2.2: + /registry-auth-token/4.2.2: resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==} engines: {node: '>=6.0.0'} dependencies: rc: 1.2.8 dev: true - /regjsparser@0.9.1: + /regjsparser/0.9.1: resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} hasBin: true dependencies: jsesc: 0.5.0 dev: true - /repeat-element@1.1.4: + /repeat-element/1.1.4: resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} engines: {node: '>=0.10.0'} dev: true - /repeat-string@1.6.1: + /repeat-string/1.6.1: resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} engines: {node: '>=0.10'} dev: true - /require-directory@2.1.1: + /require-directory/2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - /require-from-string@2.0.2: + /require-from-string/2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} dev: true - /require-main-filename@2.0.0: + /require-main-filename/2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true - /requires-port@1.0.0: + /requires-port/1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: true - /resolve-cwd@2.0.0: + /resolve-cwd/2.0.0: resolution: {integrity: sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==} engines: {node: '>=4'} dependencies: resolve-from: 3.0.0 dev: true - /resolve-cwd@3.0.0: + /resolve-cwd/3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 dev: true - /resolve-dir@1.0.1: + /resolve-dir/1.0.1: resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} engines: {node: '>=0.10.0'} dependencies: @@ -9193,29 +9257,29 @@ packages: global-modules: 1.0.0 dev: true - /resolve-from@3.0.0: + /resolve-from/3.0.0: resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} engines: {node: '>=4'} dev: true - /resolve-from@4.0.0: + /resolve-from/4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} dev: true - /resolve-from@5.0.0: + /resolve-from/5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} dev: true - /resolve-global@1.0.0: + /resolve-global/1.0.0: resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} engines: {node: '>=8'} dependencies: global-dirs: 0.1.1 dev: true - /resolve-path@1.4.0: + /resolve-path/1.4.0: resolution: {integrity: sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==} engines: {node: '>= 0.8'} dependencies: @@ -9223,17 +9287,17 @@ packages: path-is-absolute: 1.0.1 dev: true - /resolve-url@0.2.1: + /resolve-url/0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated dev: true - /resolve.exports@2.0.2: + /resolve.exports/2.0.2: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} dev: true - /resolve@1.22.2: + /resolve/1.22.2: resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true dependencies: @@ -9242,47 +9306,47 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /restore-cursor@3.1.0: + /restore-cursor/3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - /ret@0.1.15: + /ret/0.1.15: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} dev: true - /retry@0.12.0: + /retry/0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} dev: true - /reusify@1.0.4: + /reusify/1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rfdc@1.3.0: + /rfdc/1.3.0: resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} dev: true - /rimraf@2.7.1: + /rimraf/2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true dependencies: glob: 7.2.3 dev: true - /rimraf@3.0.2: + /rimraf/3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 dev: true - /rollup@2.79.1: + /rollup/2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} engines: {node: '>=10.0.0'} hasBin: true @@ -9290,7 +9354,7 @@ packages: fsevents: 2.3.2 dev: true - /rollup@3.20.2: + /rollup/3.20.2: resolution: {integrity: sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true @@ -9298,29 +9362,29 @@ packages: fsevents: 2.3.2 dev: true - /run-async@2.4.1: + /run-async/2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} - /run-parallel@1.2.0: + /run-parallel/1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true - /rxjs@7.8.0: + /rxjs/7.8.0: resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: tslib: 2.5.0 - /safe-buffer@5.1.2: + /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true - /safe-buffer@5.2.1: + /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - /safe-regex-test@1.0.0: + /safe-regex-test/1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: call-bind: 1.0.2 @@ -9328,79 +9392,79 @@ packages: is-regex: 1.1.4 dev: true - /safe-regex@1.1.0: + /safe-regex/1.1.0: resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} dependencies: ret: 0.1.15 dev: true - /safe-stable-stringify@2.4.3: + /safe-stable-stringify/2.4.3: resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} engines: {node: '>=10'} dev: true - /safer-buffer@2.1.2: + /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - /saxes@6.0.0: + /saxes/6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} dependencies: xmlchars: 2.2.0 dev: true - /schema-utils@1.0.0: + /schema-utils/1.0.0: resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==} engines: {node: '>= 4'} dependencies: ajv: 6.12.6 - ajv-errors: 1.0.1(ajv@6.12.6) - ajv-keywords: 3.5.2(ajv@6.12.6) + ajv-errors: 1.0.1_ajv@6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 dev: true - /schema-utils@2.7.1: + /schema-utils/2.7.1: resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} engines: {node: '>= 8.9.0'} dependencies: '@types/json-schema': 7.0.11 ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) + ajv-keywords: 3.5.2_ajv@6.12.6 dev: true - /schema-utils@3.1.1: + /schema-utils/3.1.1: resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} engines: {node: '>= 10.13.0'} dependencies: '@types/json-schema': 7.0.11 ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) + ajv-keywords: 3.5.2_ajv@6.12.6 dev: true - /secure-json-parse@2.7.0: + /secure-json-parse/2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} dev: true - /select-hose@2.0.0: + /select-hose/2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} dev: true - /selfsigned@1.10.14: + /selfsigned/1.10.14: resolution: {integrity: sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==} dependencies: node-forge: 0.10.0 dev: true - /semver@5.7.1: + /semver/5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true dev: true - /semver@6.3.0: + /semver/6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true dev: true - /semver@7.3.7: + /semver/7.3.7: resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} engines: {node: '>=10'} hasBin: true @@ -9408,7 +9472,7 @@ packages: lru-cache: 6.0.0 dev: true - /semver@7.4.0: + /semver/7.4.0: resolution: {integrity: sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==} engines: {node: '>=10'} hasBin: true @@ -9416,11 +9480,32 @@ packages: lru-cache: 6.0.0 dev: true - /send@0.18.0(supports-color@6.1.0): + /send/0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + 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 + transitivePeerDependencies: + - supports-color + dev: true + + /send/0.18.0_supports-color@6.1.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} dependencies: - debug: 2.6.9(supports-color@6.1.0) + debug: 2.6.9_supports-color@6.1.0 depd: 2.0.0 destroy: 1.2.0 encodeurl: 1.0.2 @@ -9437,19 +9522,19 @@ packages: - supports-color dev: true - /serialize-javascript@6.0.1: + /serialize-javascript/6.0.1: resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} dependencies: randombytes: 2.1.0 dev: true - /serve-index@1.9.1(supports-color@6.1.0): + /serve-index/1.9.1_supports-color@6.1.0: resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} engines: {node: '>= 0.8.0'} dependencies: accepts: 1.3.8 batch: 0.6.1 - debug: 2.6.9(supports-color@6.1.0) + debug: 2.6.9_supports-color@6.1.0 escape-html: 1.0.3 http-errors: 1.6.3 mime-types: 2.1.35 @@ -9458,23 +9543,35 @@ packages: - supports-color dev: true - /serve-static@1.15.0(supports-color@6.1.0): + /serve-static/1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + dev: true + + /serve-static/1.15.0_supports-color@6.1.0: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} dependencies: encodeurl: 1.0.2 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.18.0(supports-color@6.1.0) + send: 0.18.0_supports-color@6.1.0 transitivePeerDependencies: - supports-color dev: true - /set-blocking@2.0.0: + /set-blocking/2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /set-value@2.0.1: + /set-value/2.0.1: resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} engines: {node: '>=0.10.0'} dependencies: @@ -9484,46 +9581,46 @@ packages: split-string: 3.1.0 dev: true - /setprototypeof@1.1.0: + /setprototypeof/1.1.0: resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} dev: true - /setprototypeof@1.2.0: + /setprototypeof/1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} dev: true - /shallow-clone@3.0.1: + /shallow-clone/3.0.1: resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} engines: {node: '>=8'} dependencies: kind-of: 6.0.3 dev: true - /shebang-command@1.2.0: + /shebang-command/1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 dev: true - /shebang-command@2.0.0: + /shebang-command/2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 dev: true - /shebang-regex@1.0.0: + /shebang-regex/1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} dev: true - /shebang-regex@3.0.0: + /shebang-regex/3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} dev: true - /side-channel@1.0.4: + /side-channel/1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 @@ -9531,25 +9628,25 @@ packages: object-inspect: 1.12.3 dev: true - /signal-exit@3.0.7: + /signal-exit/3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - /simple-git-hooks@2.8.1: + /simple-git-hooks/2.8.1: resolution: {integrity: sha512-DYpcVR1AGtSfFUNzlBdHrQGPsOhuuEJ/FkmPOOlFysP60AHd3nsEpkGq/QEOdtUyT1Qhk7w9oLmFoMG+75BDog==} hasBin: true requiresBuild: true dev: true - /sisteransi@1.0.5: + /sisteransi/1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: true - /slash@3.0.0: + /slash/3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} dev: true - /slice-ansi@3.0.0: + /slice-ansi/3.0.0: resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} engines: {node: '>=8'} dependencies: @@ -9558,7 +9655,7 @@ packages: is-fullwidth-code-point: 3.0.0 dev: true - /slice-ansi@4.0.0: + /slice-ansi/4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} dependencies: @@ -9567,7 +9664,7 @@ packages: is-fullwidth-code-point: 3.0.0 dev: true - /slice-ansi@5.0.0: + /slice-ansi/5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} dependencies: @@ -9575,7 +9672,7 @@ packages: is-fullwidth-code-point: 4.0.0 dev: true - /snapdragon-node@2.1.1: + /snapdragon-node/2.1.1: resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} engines: {node: '>=0.10.0'} dependencies: @@ -9584,19 +9681,19 @@ packages: snapdragon-util: 3.0.1 dev: true - /snapdragon-util@3.0.1: + /snapdragon-util/3.0.1: resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /snapdragon@0.8.2(supports-color@6.1.0): + /snapdragon/0.8.2_supports-color@6.1.0: resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} engines: {node: '>=0.10.0'} dependencies: base: 0.11.2 - debug: 2.6.9(supports-color@6.1.0) + debug: 2.6.9_supports-color@6.1.0 define-property: 0.2.5 extend-shallow: 2.0.1 map-cache: 0.2.2 @@ -9607,7 +9704,7 @@ packages: - supports-color dev: true - /socket.io-adapter@2.5.2: + /socket.io-adapter/2.5.2: resolution: {integrity: sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==} dependencies: ws: 8.11.0 @@ -9615,12 +9712,12 @@ packages: - bufferutil - utf-8-validate - /socket.io-client@4.6.1: + /socket.io-client/4.6.1: resolution: {integrity: sha512-5UswCV6hpaRsNg5kkEHVcbBIXEYoVbMQaHJBXJCyEQ+CiFPV1NIOY0XOFWG4XR4GZcB8Kn6AsRs/9cy9TbqVMQ==} engines: {node: '>=10.0.0'} dependencies: '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 engine.io-client: 6.4.0 socket.io-parser: 4.2.2 transitivePeerDependencies: @@ -9629,22 +9726,22 @@ packages: - utf-8-validate dev: false - /socket.io-parser@4.2.2: + /socket.io-parser/4.2.2: resolution: {integrity: sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==} engines: {node: '>=10.0.0'} dependencies: '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 transitivePeerDependencies: - supports-color - /socket.io@4.6.1: + /socket.io/4.6.1: resolution: {integrity: sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==} engines: {node: '>=10.0.0'} dependencies: accepts: 1.3.8 base64id: 2.0.0 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 engine.io: 6.4.1 socket.io-adapter: 2.5.2 socket.io-parser: 4.2.2 @@ -9653,11 +9750,11 @@ packages: - supports-color - utf-8-validate - /sockjs-client@1.6.1(supports-color@6.1.0): + /sockjs-client/1.6.1_supports-color@6.1.0: resolution: {integrity: sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==} engines: {node: '>=12'} dependencies: - debug: 3.2.7(supports-color@6.1.0) + debug: 3.2.7_supports-color@6.1.0 eventsource: 2.0.2 faye-websocket: 0.11.4 inherits: 2.0.4 @@ -9666,7 +9763,7 @@ packages: - supports-color dev: true - /sockjs@0.3.24: + /sockjs/0.3.24: resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} dependencies: faye-websocket: 0.11.4 @@ -9674,17 +9771,17 @@ packages: websocket-driver: 0.7.4 dev: true - /sonic-boom@2.8.0: + /sonic-boom/2.8.0: resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} dependencies: atomic-sleep: 1.0.0 dev: true - /source-list-map@2.0.1: + /source-list-map/2.0.1: resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} dev: true - /source-map-resolve@0.5.3: + /source-map-resolve/0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} deprecated: See https://github.com/lydell/source-map-resolve#deprecated dependencies: @@ -9695,72 +9792,72 @@ packages: urix: 0.1.0 dev: true - /source-map-support@0.5.13: + /source-map-support/0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: true - /source-map-support@0.5.21: + /source-map-support/0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: true - /source-map-url@0.4.1: + /source-map-url/0.4.1: resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} deprecated: See https://github.com/lydell/source-map-url#deprecated dev: true - /source-map@0.5.7: + /source-map/0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} dev: true - /source-map@0.6.1: + /source-map/0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} dev: true - /source-map@0.8.0-beta.0: + /source-map/0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} dependencies: whatwg-url: 7.1.0 dev: true - /spawn-error-forwarder@1.0.0: + /spawn-error-forwarder/1.0.0: resolution: {integrity: sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==} dev: true - /spdx-correct@3.2.0: + /spdx-correct/3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.13 dev: true - /spdx-exceptions@2.3.0: + /spdx-exceptions/2.3.0: resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} dev: true - /spdx-expression-parse@3.0.1: + /spdx-expression-parse/3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 spdx-license-ids: 3.0.13 dev: true - /spdx-license-ids@3.0.13: + /spdx-license-ids/3.0.13: resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} dev: true - /spdy-transport@3.0.0(supports-color@6.1.0): + /spdy-transport/3.0.0_supports-color@6.1.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4_supports-color@6.1.0 detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -9770,55 +9867,55 @@ packages: - supports-color dev: true - /spdy@4.0.2(supports-color@6.1.0): + /spdy/4.0.2_supports-color@6.1.0: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} dependencies: - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4_supports-color@6.1.0 handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 - spdy-transport: 3.0.0(supports-color@6.1.0) + spdy-transport: 3.0.0_supports-color@6.1.0 transitivePeerDependencies: - supports-color dev: true - /split-string@3.1.0: + /split-string/3.1.0: resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} engines: {node: '>=0.10.0'} dependencies: extend-shallow: 3.0.2 dev: true - /split2@1.0.0: + /split2/1.0.0: resolution: {integrity: sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==} dependencies: through2: 2.0.5 dev: true - /split2@3.2.2: + /split2/3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: readable-stream: 3.6.2 dev: true - /split2@4.2.0: + /split2/4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} dev: true - /sprintf-js@1.0.3: + /sprintf-js/1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true - /stack-utils@2.0.6: + /stack-utils/2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 dev: true - /static-extend@0.1.2: + /static-extend/0.1.2: resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} engines: {node: '>=0.10.0'} dependencies: @@ -9826,46 +9923,46 @@ packages: object-copy: 0.1.0 dev: true - /statuses@1.5.0: + /statuses/1.5.0: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} dev: true - /statuses@2.0.1: + /statuses/2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - /stream-combiner2@1.1.1: + /stream-combiner2/1.1.1: resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} dependencies: duplexer2: 0.1.4 readable-stream: 2.3.8 dev: true - /stream-read-all@3.0.1: + /stream-read-all/3.0.1: resolution: {integrity: sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==} engines: {node: '>=10'} dev: true - /stream-shift@1.0.1: + /stream-shift/1.0.1: resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} dev: true - /streamsearch@1.1.0: + /streamsearch/1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} dev: true - /strict-event-emitter@0.5.0: + /strict-event-emitter/0.5.0: resolution: {integrity: sha512-sqnMpVJLSB3daNO6FcvsEk4Mq5IJeAwDeH80DP1S8+pgxrF6yZnE1+VeapesGled7nEcIkz1Ax87HzaIy+02kA==} dev: false - /string-argv@0.3.1: + /string-argv/0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} engines: {node: '>=0.6.19'} dev: true - /string-length@4.0.2: + /string-length/4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} dependencies: @@ -9873,7 +9970,7 @@ packages: strip-ansi: 6.0.1 dev: true - /string-width@3.1.0: + /string-width/3.1.0: resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} engines: {node: '>=6'} dependencies: @@ -9882,7 +9979,7 @@ packages: strip-ansi: 5.2.0 dev: true - /string-width@4.2.3: + /string-width/4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} dependencies: @@ -9890,7 +9987,7 @@ packages: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string-width@5.1.2: + /string-width/5.1.2: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} dependencies: @@ -9899,7 +9996,7 @@ packages: strip-ansi: 7.0.1 dev: true - /string.prototype.trim@1.2.7: + /string.prototype.trim/1.2.7: resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} engines: {node: '>= 0.4'} dependencies: @@ -9908,7 +10005,7 @@ packages: es-abstract: 1.21.2 dev: true - /string.prototype.trimend@1.0.6: + /string.prototype.trimend/1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 @@ -9916,7 +10013,7 @@ packages: es-abstract: 1.21.2 dev: true - /string.prototype.trimstart@1.0.6: + /string.prototype.trimstart/1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 @@ -9924,82 +10021,82 @@ packages: es-abstract: 1.21.2 dev: true - /string_decoder@1.1.1: + /string_decoder/1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 dev: true - /string_decoder@1.3.0: + /string_decoder/1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 - /strip-ansi@3.0.1: + /strip-ansi/3.0.1: resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 dev: true - /strip-ansi@5.2.0: + /strip-ansi/5.2.0: resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} engines: {node: '>=6'} dependencies: ansi-regex: 4.1.1 dev: true - /strip-ansi@6.0.1: + /strip-ansi/6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 - /strip-ansi@7.0.1: + /strip-ansi/7.0.1: resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 dev: true - /strip-bom@4.0.0: + /strip-bom/4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} dev: true - /strip-eof@1.0.0: + /strip-eof/1.0.0: resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} engines: {node: '>=0.10.0'} dev: true - /strip-final-newline@2.0.0: + /strip-final-newline/2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} dev: true - /strip-final-newline@3.0.0: + /strip-final-newline/3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} dev: true - /strip-indent@3.0.0: + /strip-indent/3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} dependencies: min-indent: 1.0.1 dev: true - /strip-json-comments@2.0.1: + /strip-json-comments/2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} dev: true - /strip-json-comments@3.1.1: + /strip-json-comments/3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} dev: true - /sucrase@3.32.0: + /sucrase/3.32.0: resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} engines: {node: '>=8'} hasBin: true @@ -10013,42 +10110,43 @@ packages: ts-interface-checker: 0.1.13 dev: true - /supports-color@5.5.0: + /supports-color/5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} dependencies: has-flag: 3.0.0 dev: true - /supports-color@6.1.0: + /supports-color/6.1.0: resolution: {integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==} engines: {node: '>=6'} dependencies: has-flag: 3.0.0 + dev: true - /supports-color@7.2.0: + /supports-color/7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - /supports-color@8.1.1: + /supports-color/8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 dev: true - /supports-preserve-symlinks-flag@1.0.0: + /supports-preserve-symlinks-flag/1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true - /symbol-tree@3.2.4: + /symbol-tree/3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true - /table-layout@3.0.2: + /table-layout/3.0.2: resolution: {integrity: sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==} engines: {node: '>=12.17'} hasBin: true @@ -10062,7 +10160,7 @@ packages: wordwrapjs: 5.1.0 dev: true - /table@6.8.1: + /table/6.8.1: resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} engines: {node: '>=10.0.0'} dependencies: @@ -10073,12 +10171,12 @@ packages: strip-ansi: 6.0.1 dev: true - /tapable@2.2.1: + /tapable/2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} dev: true - /terser-webpack-plugin@5.3.7(@swc/core@1.3.49)(esbuild@0.17.16)(webpack@5.79.0): + /terser-webpack-plugin/5.3.7_4mbh3ks6vevmq3w4sbjme7looe: resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -10101,10 +10199,10 @@ packages: schema-utils: 3.1.1 serialize-javascript: 6.0.1 terser: 5.16.9 - webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e dev: true - /terser@5.16.9: + /terser/5.16.9: resolution: {integrity: sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg==} engines: {node: '>=10'} hasBin: true @@ -10115,7 +10213,7 @@ packages: source-map-support: 0.5.21 dev: true - /test-exclude@6.0.0: + /test-exclude/6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} dependencies: @@ -10124,77 +10222,77 @@ packages: minimatch: 3.1.2 dev: true - /text-extensions@1.9.0: + /text-extensions/1.9.0: resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} engines: {node: '>=0.10'} dev: true - /text-table@0.2.0: + /text-table/0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /thenify-all@1.6.0: + /thenify-all/1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 dev: true - /thenify@3.3.1: + /thenify/3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 dev: true - /thread-stream@0.15.2: + /thread-stream/0.15.2: resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} dependencies: real-require: 0.1.0 dev: true - /through2@2.0.5: + /through/2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + /through2/2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: readable-stream: 2.3.8 xtend: 4.0.2 dev: true - /through2@4.0.2: + /through2/4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: readable-stream: 3.6.2 dev: true - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - - /thunky@1.1.0: + /thunky/1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} dev: true - /tmp@0.0.33: + /tmp/0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 - /tmpl@1.0.5: + /tmpl/1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true - /to-fast-properties@2.0.0: + /to-fast-properties/2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} dev: true - /to-object-path@0.3.0: + /to-object-path/0.3.0: resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /to-regex-range@2.1.1: + /to-regex-range/2.1.1: resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} engines: {node: '>=0.10.0'} dependencies: @@ -10202,13 +10300,13 @@ packages: repeat-string: 1.6.1 dev: true - /to-regex-range@5.0.1: + /to-regex-range/5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - /to-regex@3.0.2: + /to-regex/3.0.2: resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} engines: {node: '>=0.10.0'} dependencies: @@ -10218,12 +10316,12 @@ packages: safe-regex: 1.1.0 dev: true - /toidentifier@1.0.1: + /toidentifier/1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} dev: true - /tough-cookie@4.1.2: + /tough-cookie/4.1.2: resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} engines: {node: '>=6'} dependencies: @@ -10233,41 +10331,41 @@ packages: url-parse: 1.5.10 dev: true - /tr46@0.0.3: + /tr46/0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - /tr46@1.0.1: + /tr46/1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} dependencies: punycode: 2.3.0 dev: true - /tr46@3.0.0: + /tr46/3.0.0: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} dependencies: punycode: 2.3.0 dev: true - /traverse@0.6.7: + /traverse/0.6.7: resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} dev: true - /tree-kill@1.2.2: + /tree-kill/1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true dev: true - /trim-newlines@3.0.1: + /trim-newlines/3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} dev: true - /ts-interface-checker@0.1.13: + /ts-interface-checker/0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-node@10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@4.9.5): + /ts-node/10.9.1_faublg25f7qpbcz6w4cw6yyzse: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -10299,7 +10397,7 @@ packages: yn: 3.1.1 dev: true - /ts-node@10.9.1(@swc/core@1.3.49)(@types/node@18.15.11)(typescript@5.0.4): + /ts-node/10.9.1_l7nicavc6cghsvyjdpeszw7e5e: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -10331,19 +10429,19 @@ packages: yn: 3.1.1 dev: true - /tslib@1.14.1: + /tslib/1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib@2.5.0: + /tslib/2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - /tsscmp@1.0.6: + /tsscmp/1.0.6: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} dev: true - /tsup@6.7.0(@swc/core@1.3.49)(ts-node@10.9.1)(typescript@5.0.4): + /tsup/6.7.0_kpvxmbmtx6ydv4unklsjw2abeq: resolution: {integrity: sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==} engines: {node: '>=14.18'} hasBin: true @@ -10360,15 +10458,15 @@ packages: optional: true dependencies: '@swc/core': 1.3.49 - bundle-require: 4.0.1(esbuild@0.17.16) + bundle-require: 4.0.1_esbuild@0.17.16 cac: 6.7.14 chokidar: 3.4.1 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4 esbuild: 0.17.16 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 3.1.4(ts-node@10.9.1) + postcss-load-config: 3.1.4_ts-node@10.9.1 resolve-from: 5.0.0 rollup: 3.20.2 source-map: 0.8.0-beta.0 @@ -10380,7 +10478,7 @@ packages: - ts-node dev: true - /tsutils@3.21.0(typescript@5.0.4): + /tsutils/3.21.0_typescript@5.0.4: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: @@ -10390,55 +10488,55 @@ packages: typescript: 5.0.4 dev: true - /type-check@0.3.2: + /type-check/0.3.2: resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 dev: true - /type-check@0.4.0: + /type-check/0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 dev: true - /type-detect@4.0.8: + /type-detect/4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} dev: true - /type-fest@0.18.1: + /type-fest/0.18.1: resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} engines: {node: '>=10'} dev: true - /type-fest@0.20.2: + /type-fest/0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} dev: true - /type-fest@0.21.3: + /type-fest/0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - /type-fest@0.6.0: + /type-fest/0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} dev: true - /type-fest@0.8.1: + /type-fest/0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} dev: true - /type-fest@2.19.0: + /type-fest/2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} dev: false - /type-is@1.6.18: + /type-is/1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} dependencies: @@ -10446,7 +10544,7 @@ packages: mime-types: 2.1.35 dev: true - /typed-array-length@1.0.4: + /typed-array-length/1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: call-bind: 1.0.2 @@ -10454,29 +10552,29 @@ packages: is-typed-array: 1.1.10 dev: true - /typescript@4.9.5: + /typescript/4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} hasBin: true dev: true - /typescript@5.0.4: + /typescript/5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} hasBin: true dev: true - /typical@4.0.0: + /typical/4.0.0: resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} engines: {node: '>=8'} dev: true - /typical@7.1.1: + /typical/7.1.1: resolution: {integrity: sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==} engines: {node: '>=12.17'} dev: true - /unbox-primitive@1.0.2: + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: call-bind: 1.0.2 @@ -10485,19 +10583,19 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /undici@5.21.2: + /undici/5.21.2: resolution: {integrity: sha512-f6pTQ9RF4DQtwoWSaC42P/NKlUjvezVvd9r155ohqkwFNRyBKM3f3pcty3ouusefNRyM25XhIQEbeQ46sZDJfQ==} engines: {node: '>=12.18'} dependencies: busboy: 1.6.0 dev: true - /unicode-canonical-property-names-ecmascript@2.0.0: + /unicode-canonical-property-names-ecmascript/2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} dev: true - /unicode-match-property-ecmascript@2.0.0: + /unicode-match-property-ecmascript/2.0.0: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} dependencies: @@ -10505,17 +10603,17 @@ packages: unicode-property-aliases-ecmascript: 2.1.0 dev: true - /unicode-match-property-value-ecmascript@2.1.0: + /unicode-match-property-value-ecmascript/2.1.0: resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} engines: {node: '>=4'} dev: true - /unicode-property-aliases-ecmascript@2.1.0: + /unicode-property-aliases-ecmascript/2.1.0: resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} engines: {node: '>=4'} dev: true - /union-value@1.0.1: + /union-value/1.0.1: resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} engines: {node: '>=0.10.0'} dependencies: @@ -10525,22 +10623,22 @@ packages: set-value: 2.0.1 dev: true - /universalify@0.2.0: + /universalify/0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} dev: true - /universalify@2.0.0: + /universalify/2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} dev: true - /unpipe@1.0.0: + /unpipe/1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} dev: true - /unset-value@1.0.0: + /unset-value/1.0.0: resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} engines: {node: '>=0.10.0'} dependencies: @@ -10548,7 +10646,7 @@ packages: isobject: 3.0.1 dev: true - /update-browserslist-db@1.0.10(browserslist@4.21.5): + /update-browserslist-db/1.0.10_browserslist@4.21.5: resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} hasBin: true peerDependencies: @@ -10559,18 +10657,18 @@ packages: picocolors: 1.0.0 dev: true - /uri-js@4.4.1: + /uri-js/4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.0 dev: true - /urix@0.1.0: + /urix/0.1.0: resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} deprecated: Please see https://github.com/lydell/urix#deprecated dev: true - /url-loader@4.1.1(webpack@5.79.0): + /url-loader/4.1.1_webpack@5.79.0: resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -10583,32 +10681,32 @@ packages: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.1.1 - webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e dev: true - /url-parse@1.5.10: + /url-parse/1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} dependencies: querystringify: 2.2.0 requires-port: 1.0.0 dev: true - /url@0.11.0: + /url/0.11.0: resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} dependencies: punycode: 1.3.2 querystring: 0.2.0 dev: true - /use@3.1.1: + /use/3.1.1: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} engines: {node: '>=0.10.0'} dev: true - /util-deprecate@1.0.2: + /util-deprecate/1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - /util.promisify@1.1.1: + /util.promisify/1.1.1: resolution: {integrity: sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==} dependencies: call-bind: 1.0.2 @@ -10618,31 +10716,31 @@ packages: object.getownpropertydescriptors: 2.1.5 dev: true - /utils-merge@1.0.1: + /utils-merge/1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} dev: true - /uuid@3.4.0: + /uuid/3.4.0: resolution: {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. hasBin: true dev: true - /uuid@8.3.2: + /uuid/8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true dev: true - /v8-compile-cache-lib@3.0.1: + /v8-compile-cache-lib/3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /v8-compile-cache@2.3.0: + /v8-compile-cache/2.3.0: resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true - /v8-to-istanbul@9.1.0: + /v8-to-istanbul/9.1.0: resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} dependencies: @@ -10651,31 +10749,31 @@ packages: convert-source-map: 1.9.0 dev: true - /validate-npm-package-license@3.0.4: + /validate-npm-package-license/3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 dev: true - /vary@1.1.2: + /vary/1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - /w3c-xmlserializer@4.0.0: + /w3c-xmlserializer/4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} dependencies: xml-name-validator: 4.0.0 dev: true - /walker@1.0.8: + /walker/1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 dev: true - /watchpack@2.4.0: + /watchpack/2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} dependencies: @@ -10683,35 +10781,35 @@ packages: graceful-fs: 4.2.11 dev: true - /wbuf@1.7.3: + /wbuf/1.7.3: resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} dependencies: minimalistic-assert: 1.0.1 dev: true - /wcwidth@1.0.1: + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 - /web-streams-polyfill@4.0.0-beta.3: + /web-streams-polyfill/4.0.0-beta.3: resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} engines: {node: '>= 14'} dev: false - /webidl-conversions@3.0.1: + /webidl-conversions/3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - /webidl-conversions@4.0.2: + /webidl-conversions/4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} dev: true - /webidl-conversions@7.0.0: + /webidl-conversions/7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} dev: true - /webpack-dev-middleware@3.7.3(webpack@5.79.0): + /webpack-dev-middleware/3.7.3_webpack@5.79.0: resolution: {integrity: sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==} engines: {node: '>= 6'} peerDependencies: @@ -10721,11 +10819,11 @@ packages: mime: 2.6.0 mkdirp: 0.5.6 range-parser: 1.2.1 - webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e webpack-log: 2.0.0 dev: true - /webpack-dev-server@3.11.3(webpack@5.79.0): + /webpack-dev-server/3.11.3_webpack@5.79.0: resolution: {integrity: sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==} engines: {node: '>= 6.11.5'} hasBin: true @@ -10739,13 +10837,13 @@ packages: ansi-html-community: 0.0.8 bonjour: 3.5.0 chokidar: 3.4.1 - compression: 1.7.4(supports-color@6.1.0) + compression: 1.7.4_supports-color@6.1.0 connect-history-api-fallback: 1.6.0 - debug: 4.3.4(supports-color@6.1.0) + debug: 4.3.4_supports-color@6.1.0 del: 4.1.1 - express: 4.18.2(supports-color@6.1.0) + express: 4.18.2_supports-color@6.1.0 html-entities: 1.4.0 - http-proxy-middleware: 0.19.1(debug@4.3.4)(supports-color@6.1.0) + http-proxy-middleware: 0.19.1_tmpgdztspuwvsxzgjkhoqk7duq import-local: 2.0.0 internal-ip: 4.3.0 ip: 1.1.8 @@ -10754,19 +10852,19 @@ packages: loglevel: 1.8.1 opn: 5.5.0 p-retry: 3.0.1 - portfinder: 1.0.32(supports-color@6.1.0) + portfinder: 1.0.32_supports-color@6.1.0 schema-utils: 1.0.0 selfsigned: 1.10.14 semver: 6.3.0 - serve-index: 1.9.1(supports-color@6.1.0) + serve-index: 1.9.1_supports-color@6.1.0 sockjs: 0.3.24 - sockjs-client: 1.6.1(supports-color@6.1.0) - spdy: 4.0.2(supports-color@6.1.0) + sockjs-client: 1.6.1_supports-color@6.1.0 + spdy: 4.0.2_supports-color@6.1.0 strip-ansi: 3.0.1 supports-color: 6.1.0 url: 0.11.0 - webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) - webpack-dev-middleware: 3.7.3(webpack@5.79.0) + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e + webpack-dev-middleware: 3.7.3_webpack@5.79.0 webpack-log: 2.0.0 ws: 6.2.2 yargs: 13.3.2 @@ -10775,16 +10873,16 @@ packages: - utf-8-validate dev: true - /webpack-http-server@0.5.0(@swc/core@1.3.49)(esbuild@0.17.16): + /webpack-http-server/0.5.0_57233mj27fjz7synoeubptyy7e: resolution: {integrity: sha512-kyewxAnzmDuZxe09fn/Bb0PeEnaDxHChYKFVsMy4oeBUs9Cyv2j1uEgzQJ7ljPFexLU8ongUS4i4O+e22CeBZQ==} dependencies: '@types/express': 4.17.17 '@types/mustache': 4.2.2 - express: 4.18.2(supports-color@6.1.0) + express: 4.18.2 memfs: 3.5.0 mustache: 4.2.0 outvariant: 1.4.0 - webpack: 5.79.0(@swc/core@1.3.49)(esbuild@0.17.16) + webpack: 5.79.0_57233mj27fjz7synoeubptyy7e transitivePeerDependencies: - '@swc/core' - esbuild @@ -10793,7 +10891,7 @@ packages: - webpack-cli dev: true - /webpack-log@2.0.0: + /webpack-log/2.0.0: resolution: {integrity: sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==} engines: {node: '>= 6'} dependencies: @@ -10801,7 +10899,7 @@ packages: uuid: 3.4.0 dev: true - /webpack-merge@5.8.0: + /webpack-merge/5.8.0: resolution: {integrity: sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==} engines: {node: '>=10.0.0'} dependencies: @@ -10809,19 +10907,19 @@ packages: wildcard: 2.0.0 dev: true - /webpack-sources@1.4.3: + /webpack-sources/1.4.3: resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} dependencies: source-list-map: 2.0.1 source-map: 0.6.1 dev: true - /webpack-sources@3.2.3: + /webpack-sources/3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} dev: true - /webpack@5.79.0(@swc/core@1.3.49)(esbuild@0.17.16): + /webpack/5.79.0_57233mj27fjz7synoeubptyy7e: resolution: {integrity: sha512-3mN4rR2Xq+INd6NnYuL9RC9GAmc1ROPKJoHhrZ4pAjdMFEkJJWrsPw8o2JjCIyQyTu7rTXYn4VG6OpyB3CobZg==} engines: {node: '>=10.13.0'} hasBin: true @@ -10837,7 +10935,7 @@ packages: '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 acorn: 8.8.2 - acorn-import-assertions: 1.8.0(acorn@8.8.2) + acorn-import-assertions: 1.8.0_acorn@8.8.2 browserslist: 4.21.5 chrome-trace-event: 1.0.3 enhanced-resolve: 5.12.0 @@ -10852,7 +10950,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.1.1 tapable: 2.2.1 - terser-webpack-plugin: 5.3.7(@swc/core@1.3.49)(esbuild@0.17.16)(webpack@5.79.0) + terser-webpack-plugin: 5.3.7_4mbh3ks6vevmq3w4sbjme7looe watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -10861,7 +10959,7 @@ packages: - uglify-js dev: true - /websocket-driver@0.7.4: + /websocket-driver/0.7.4: resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} engines: {node: '>=0.8.0'} dependencies: @@ -10870,24 +10968,24 @@ packages: websocket-extensions: 0.1.4 dev: true - /websocket-extensions@0.1.4: + /websocket-extensions/0.1.4: resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} engines: {node: '>=0.8.0'} dev: true - /whatwg-encoding@2.0.0: + /whatwg-encoding/2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} dependencies: iconv-lite: 0.6.3 dev: true - /whatwg-mimetype@3.0.0: + /whatwg-mimetype/3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} dev: true - /whatwg-url@11.0.0: + /whatwg-url/11.0.0: resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} engines: {node: '>=12'} dependencies: @@ -10895,13 +10993,13 @@ packages: webidl-conversions: 7.0.0 dev: true - /whatwg-url@5.0.0: + /whatwg-url/5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - /whatwg-url@7.1.0: + /whatwg-url/7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} dependencies: lodash.sortby: 4.7.0 @@ -10909,7 +11007,7 @@ packages: webidl-conversions: 4.0.2 dev: true - /which-boxed-primitive@1.0.2: + /which-boxed-primitive/1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 @@ -10919,11 +11017,11 @@ packages: is-symbol: 1.0.4 dev: true - /which-module@2.0.0: + /which-module/2.0.0: resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} dev: true - /which-typed-array@1.1.9: + /which-typed-array/1.1.9: resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} engines: {node: '>= 0.4'} dependencies: @@ -10935,14 +11033,14 @@ packages: is-typed-array: 1.1.10 dev: true - /which@1.3.1: + /which/1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true dependencies: isexe: 2.0.0 dev: true - /which@2.0.2: + /which/2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true @@ -10950,21 +11048,21 @@ packages: isexe: 2.0.0 dev: true - /wildcard@2.0.0: + /wildcard/2.0.0: resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==} dev: true - /word-wrap@1.2.3: + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true - /wordwrapjs@5.1.0: + /wordwrapjs/5.1.0: resolution: {integrity: sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==} engines: {node: '>=12.17'} dev: true - /wrap-ansi@5.1.0: + /wrap-ansi/5.1.0: resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} engines: {node: '>=6'} dependencies: @@ -10973,7 +11071,7 @@ packages: strip-ansi: 5.2.0 dev: true - /wrap-ansi@6.2.0: + /wrap-ansi/6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} dependencies: @@ -10982,7 +11080,7 @@ packages: strip-ansi: 6.0.1 dev: true - /wrap-ansi@7.0.0: + /wrap-ansi/7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} dependencies: @@ -10990,11 +11088,11 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 - /wrappy@1.0.2: + /wrappy/1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /write-file-atomic@4.0.2: + /write-file-atomic/4.0.2: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: @@ -11002,7 +11100,7 @@ packages: signal-exit: 3.0.7 dev: true - /ws@6.2.2: + /ws/6.2.2: resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} peerDependencies: bufferutil: ^4.0.1 @@ -11016,7 +11114,7 @@ packages: async-limiter: 1.0.1 dev: true - /ws@7.5.9: + /ws/7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} peerDependencies: @@ -11029,7 +11127,7 @@ packages: optional: true dev: true - /ws@8.11.0: + /ws/8.11.0: resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} engines: {node: '>=10.0.0'} peerDependencies: @@ -11041,7 +11139,7 @@ packages: utf-8-validate: optional: true - /ws@8.13.0: + /ws/8.13.0: resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} engines: {node: '>=10.0.0'} peerDependencies: @@ -11054,74 +11152,74 @@ packages: optional: true dev: true - /xml-name-validator@4.0.0: + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} dev: true - /xmlchars@2.2.0: + /xmlchars/2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true - /xmlhttprequest-ssl@2.0.0: + /xmlhttprequest-ssl/2.0.0: resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} engines: {node: '>=0.4.0'} dev: false - /xtend@4.0.2: + /xtend/4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} dev: true - /y18n@4.0.3: + /y18n/4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} dev: true - /y18n@5.0.8: + /y18n/5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - /yallist@3.1.1: + /yallist/3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true - /yallist@4.0.0: + /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true - /yaml@1.10.2: + /yaml/1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} dev: true - /yaml@2.2.1: + /yaml/2.2.1: resolution: {integrity: sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==} engines: {node: '>= 14'} dev: true - /yargs-parser@10.1.0: + /yargs-parser/10.1.0: resolution: {integrity: sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==} dependencies: camelcase: 4.1.0 dev: true - /yargs-parser@13.1.2: + /yargs-parser/13.1.2: resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} dependencies: camelcase: 5.3.1 decamelize: 1.2.0 dev: true - /yargs-parser@20.2.9: + /yargs-parser/20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} dev: true - /yargs-parser@21.1.1: + /yargs-parser/21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - /yargs@13.3.2: + /yargs/13.3.2: resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==} dependencies: cliui: 5.0.0 @@ -11136,7 +11234,7 @@ packages: yargs-parser: 13.1.2 dev: true - /yargs@17.7.1: + /yargs/17.7.1: resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} engines: {node: '>=12'} dependencies: @@ -11148,17 +11246,17 @@ packages: y18n: 5.0.8 yargs-parser: 21.1.1 - /ylru@1.3.2: + /ylru/1.3.2: resolution: {integrity: sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==} engines: {node: '>= 4.0.0'} dev: true - /yn@3.1.1: + /yn/3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} dev: true - /yocto-queue@0.1.0: + /yocto-queue/0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true diff --git a/test/jest.setup.js b/test/jest.setup.js new file mode 100644 index 000000000..53f2852b9 --- /dev/null +++ b/test/jest.setup.js @@ -0,0 +1,35 @@ +const { TextEncoder, TextDecoder } = require('util') + +const PureURL = globalThis.URL + +globalThis.URL = function URL(url, base) { + try { + console.warn('URL', { url, base }) + const final = new PureURL(url, base) + return final + } catch (error) { + console.error('[URL DEBUGGER] Invalid URL:', { url, base }) + throw error + } +} + +/** + * @note Temporary global polyfills for Jest because it's + * ignoring Node.js defaults. + */ +Object.defineProperties(globalThis, { + TextDecoder: { value: TextDecoder }, + TextEncoder: { value: TextEncoder }, +}) + +const { Blob } = require('buffer') +const { Request, Response, Headers, File, FormData } = require('undici') + +Object.defineProperties(globalThis, { + Headers: { value: Headers }, + Request: { value: Request }, + Response: { value: Response }, + File: { value: File }, + Blob: { value: Blob }, + FormData: { value: FormData }, +}) diff --git a/test/node/msw-api/setup-remote-server/use.app.js b/test/node/msw-api/setup-remote-server/use.app.js new file mode 100644 index 000000000..adb2798be --- /dev/null +++ b/test/node/msw-api/setup-remote-server/use.app.js @@ -0,0 +1,39 @@ +const express = require('express') +const { rest, HttpResponse } = require('msw') +const { setupServer } = require('msw/node') + +// Enable API mocking as usual. +const server = setupServer( + rest.get('https://example.com/resource', () => { + return HttpResponse.json([1, 2, 3]) + }), +) + +server.listen() + +// Spawn a Node.js application. +const app = express() + +app.get('/resource', async (req, res) => { + const data = await fetch('https://example.com/resource').then((response) => + response.json(), + ) + + res.set(200).json(data) +}) + +const httpServer = app.listen(() => { + if (!process.send) { + throw new Error( + 'Failed to start a test Node.js app: not spawned as a child process of the test', + ) + } + + const address = httpServer.address() + + if (typeof address === 'string') { + return process.send(address) + } + + process.send(new URL(`http://localhost:${address.port}`).href) +}) diff --git a/test/node/msw-api/setup-remote-server/use.node.test.ts b/test/node/msw-api/setup-remote-server/use.node.test.ts new file mode 100644 index 000000000..3c4fc34a2 --- /dev/null +++ b/test/node/msw-api/setup-remote-server/use.node.test.ts @@ -0,0 +1,123 @@ +/** + * @jest-environment node + */ +import { ChildProcess, spawn } from 'child_process' +import { invariant } from 'outvariant' +import { HttpResponse, rest } from 'msw' +import { setupRemoteServer } from 'msw/node' +import { DeferredPromise } from '@open-draft/deferred-promise' + +const remote = setupRemoteServer() + +class TestNodeApp { + private io: ChildProcess = null as any + private _url: URL | null = null + + constructor(private readonly appSourcePath: string) {} + + get url() { + invariant( + this._url, + 'Failed to return the URL for the test Node app: the app is not running. Did you forget to call ".spawn()"?', + ) + + return this._url.href + } + + public async spawn() { + const spawnPromise = new DeferredPromise() + + this.io = spawn('node', [this.appSourcePath], { + // Establish an IPC between the test and the test app. + // This IPC is not required for the remote interception to work. + // This IPC is required for the test app to be spawned at a random port + // and be able to communicate the port back to the test. + stdio: ['inherit', 'inherit', 'inherit', 'ipc'], + }) + + this.io + .on('message', (message) => { + try { + const url = new URL(message.toString()) + spawnPromise.resolve(url) + } catch (error) { + return + } + }) + .on('error', (error) => spawnPromise.reject(error)) + .on('exit', (code) => { + if (code !== 0) { + spawnPromise.reject( + new Error(`Failed to spawn a test Node app (exit code: ${code})`), + ) + } + }) + + spawnPromise.then((url) => { + this._url = url + }) + + return Promise.race([ + spawnPromise, + new Promise((_, reject) => { + setTimeout(() => { + reject(new Error('Failed to spawn a test Node app within timeout')) + }, 5_000) + }), + ]) + } + + public async close() { + const closePromise = new DeferredPromise() + + this.io.send('SIGTERM', (error) => { + if (error) { + closePromise.reject(error) + } else { + closePromise.resolve() + } + }) + + return closePromise + } +} + +const testApp = new TestNodeApp(require.resolve('./use.app.js')) + +beforeAll(async () => { + await remote.listen() + await testApp.spawn() +}) + +afterEach(() => { + remote.resetHandlers() +}) + +afterAll(async () => { + await remote.close() + await testApp.close() +}) + +it('returns a mocked response defined in the app by default', async () => { + const response = await fetch(new URL('/resource', testApp.url)) + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + + const json = await response.json() + expect(json).toEqual([1, 2, 3]) +}) + +it('returns a mocked response from the matching runtime request handler', async () => { + remote.use( + rest.get('https://example.com/resource', () => { + return HttpResponse.json({ mocked: true }) + }), + ) + + const response = await fetch(new URL('/resource', testApp.url)) + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + + const json = await response.json() + expect(json).toEqual({ mocked: true }) +}) From d27fc23df6f187d11dc1bfe9d3d6cd42a57e5c95 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sun, 28 May 2023 12:07:52 +0200 Subject: [PATCH 145/210] chore: move client creation to "setupRemoteServer" --- src/node/SetupServerApi.ts | 30 +++--------------------------- src/node/setupRemoteServer.ts | 32 +++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 28 deletions(-) diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index e6fbd2520..520997f82 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -5,8 +5,7 @@ import { Interceptor, InterceptorReadyState, } from '@mswjs/interceptors' -import { io, Socket } from 'socket.io-client' -import { DeferredPromise } from '@open-draft/deferred-promise' +import { type Socket } from 'socket.io-client' import { SetupApi } from '~/core/SetupApi' import { RequestHandler } from '~/core/handlers/RequestHandler' import { LifeCycleEventsMap, SharedOptions } from '~/core/sharedOptions' @@ -16,8 +15,8 @@ import { handleRequest } from '~/core/utils/handleRequest' import { devUtils } from '~/core/utils/internal/devUtils' import { SetupServer } from './glossary' import { - SYNC_SERVER_URL, SyncServerEventsMap, + createSyncClient, createRemoteServerResolver, } from './setupRemoteServer' @@ -103,7 +102,7 @@ export class SetupServerApi options, ) as RequiredDeep - this.syncSocketPromise = this.createSyncServerConnection() + this.syncSocketPromise = createSyncClient() // Apply the interceptor when starting the server. this.interceptor.apply() @@ -146,27 +145,4 @@ ${`${pragma} ${header}`} public close(): void { this.dispose() } - - private async createSyncServerConnection(): Promise { - const connectionPromise = new DeferredPromise< - Socket | undefined - >() - const socket = io(SYNC_SERVER_URL.href, { - timeout: 200, - reconnection: false, - extraHeaders: { - 'x-msw-request-type': 'internal-request', - }, - }) - - socket.on('connect', () => { - connectionPromise.resolve(socket) - }) - - socket.io.on('error', () => { - connectionPromise.resolve(undefined) - }) - - return connectionPromise - } } diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index 019524ff3..4bb085e02 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -1,7 +1,7 @@ import * as http from 'http' import { invariant } from 'outvariant' import { Server as WebSocketServer } from 'socket.io' -import type { Socket } from 'socket.io-client' +import { Socket, io } from 'socket.io-client' import { Emitter } from 'strict-event-emitter' import { DeferredPromise } from '@open-draft/deferred-promise' import { @@ -220,3 +220,33 @@ async function closeSyncServer(server: WebSocketServer): Promise { return serverClosePromise } + +/** + * Creates a WebSocket client connected to the internal + * WebSocket sync server of MSW. + */ +export async function createSyncClient(): Promise< + Socket | undefined +> { + const connectionPromise = new DeferredPromise< + Socket | undefined + >() + + const socket = io(SYNC_SERVER_URL.href, { + timeout: 200, + reconnection: false, + extraHeaders: { + 'x-msw-request-type': 'internal-request', + }, + }) + + socket.on('connect', () => { + connectionPromise.resolve(socket) + }) + + socket.io.on('error', () => { + connectionPromise.resolve(undefined) + }) + + return connectionPromise +} From 6e0c634f5f71bf1969cb3b1dc17bc71ae6c1047a Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sun, 28 May 2023 12:11:08 +0200 Subject: [PATCH 146/210] fix: format errors --- src/node/setupRemoteServer.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index 4bb085e02..2640a7ce7 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -20,6 +20,7 @@ import { serializeResponse, } from '~/core/utils/request/serializeUtils' import { LifeCycleEventEmitter } from '~/core/sharedOptions' +import { devUtils } from '~/core/utils/internal/devUtils' const SYNC_SERVER_PORT = +(process.env.MSW_INTERNAL_WEBSOCKET_PORT || 50222) export const SYNC_SERVER_URL = new URL(`http://localhost:${SYNC_SERVER_PORT}`) @@ -121,7 +122,9 @@ ${`${pragma} ${header}`} invariant( syncServer, - 'Failed to close a remote server: no server is running. Did you forget to call and await ".listen()"?', + devUtils.formatMessage( + 'Failed to close a remote server: no server is running. Did you forget to call and await ".listen()"?', + ), ) await closeSyncServer(syncServer) @@ -171,6 +174,9 @@ export function createRemoteServerResolver(options: { }) } +/** + * Creates an internal WebSocket sync server. + */ async function createSyncServer(): Promise< WebSocketServer > { @@ -233,9 +239,15 @@ export async function createSyncClient(): Promise< >() const socket = io(SYNC_SERVER_URL.href, { + // Keep a low timeout and no reconnection logic because + // the user is expected to enable remote interception + // before the actual application with "setupServer" uses + // this function to try and connect to a potentially running server. timeout: 200, reconnection: false, extraHeaders: { + // Mark all Socket.io requests with an internal header + // so they are always bypassed in the remote request handler. 'x-msw-request-type': 'internal-request', }, }) From 0bd22bb7b18a37c4af8f18057c4c621496ee4c30 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 6 Jun 2023 16:46:49 +0200 Subject: [PATCH 147/210] feat(setupRemoteServer): support life-cycle events --- src/core/handlers/RemoteRequestHandler.ts | 51 ++++++ src/core/utils/handleRequest.ts | 14 +- src/core/utils/internal/emitterUtils.ts | 70 ++++++++ src/core/utils/internal/isObject.ts | 2 +- src/core/utils/request/serializeUtils.ts | 33 +++- src/node/SetupServerApi.ts | 69 ++++++-- src/node/setupRemoteServer.ts | 130 +++++++------- .../life-cycle-events/on.node.test.ts | 158 ++++++++++++++++++ .../msw-api/setup-remote-server/use.app.js | 23 +++ .../setup-remote-server/use.node.test.ts | 79 +-------- .../node/msw-api/setup-remote-server/utils.ts | 76 +++++++++ 11 files changed, 543 insertions(+), 162 deletions(-) create mode 100644 src/core/handlers/RemoteRequestHandler.ts create mode 100644 src/core/utils/internal/emitterUtils.ts create mode 100644 test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts create mode 100644 test/node/msw-api/setup-remote-server/utils.ts diff --git a/src/core/handlers/RemoteRequestHandler.ts b/src/core/handlers/RemoteRequestHandler.ts new file mode 100644 index 000000000..bd0f11eb4 --- /dev/null +++ b/src/core/handlers/RemoteRequestHandler.ts @@ -0,0 +1,51 @@ +import type { Socket } from 'socket.io-client' +import { DeferredPromise } from '@open-draft/deferred-promise' +import { RestHandler } from './RestHandler' +import type { SyncServerEventsMap } from '../../node/setupRemoteServer' +import { + deserializeResponse, + serializeRequest, +} from '../utils/request/serializeUtils' + +export class RemoteRequestHandler extends RestHandler { + constructor(args: { + requestId: string + socketPromise: Promise | undefined> + }) { + super(/.+/, /.+/, async ({ request }) => { + // Bypass the socket.io HTTP handshake so the sync WS server connection + // doesn't hang forever. Check this as the first thing to unblock the handling. + // Keep this predicate as a part of the resolver so that internal requests + // aren't considered unhandled. + if (request.headers.get('x-msw-request-type') === 'internal-request') { + return + } + + const socket = await args.socketPromise + + // If the sync server hasn't been started or failed to connect, + // skip this request handler altogether, it has no effect. + if (socket == null) { + return + } + + socket.emit('request', await serializeRequest(request), args.requestId) + + const responsePromise = new DeferredPromise() + + /** + * @todo Handle timeouts. + * @todo Handle socket errors. + */ + socket.on('response', (serializedResponse) => { + responsePromise.resolve( + serializedResponse + ? deserializeResponse(serializedResponse) + : undefined, + ) + }) + + return await responsePromise + }) + } +} diff --git a/src/core/utils/handleRequest.ts b/src/core/utils/handleRequest.ts index 9209f85d3..473614417 100644 --- a/src/core/utils/handleRequest.ts +++ b/src/core/utils/handleRequest.ts @@ -6,6 +6,7 @@ import { RequiredDeep } from '../typeUtils' import { ResponseLookupResult, getResponse } from './getResponse' import { onUnhandledRequest } from './request/onUnhandledRequest' import { readResponseCookies } from './request/readResponseCookies' +import { RemoteRequestHandler } from '../handlers/RemoteRequestHandler' export interface HandleRequestOptions { /** @@ -77,11 +78,22 @@ export async function handleRequest( return } - const { response } = lookupResult.data + const { handler, response } = lookupResult.data // When the handled request returned no mocked response, warn the developer, // as it may be an oversight on their part. Perform the request as-is. if (!response) { + // Prevent the internal request handler for "setupRemoteServer" to mark + // requests as handled. Also, prevent it from marking internal requests, + // such as WebSocket internal events, as handled. + if ( + handler instanceof RemoteRequestHandler && + request.headers.get('x-msw-request-type') !== 'internal-request' + ) { + await onUnhandledRequest(request, handlers, options.onUnhandledRequest) + emitter.emit('request:unhandled', request, requestId) + } + emitter.emit('request:end', request, requestId) handleRequestOptions?.onPassthroughResponse?.(request) return diff --git a/src/core/utils/internal/emitterUtils.ts b/src/core/utils/internal/emitterUtils.ts new file mode 100644 index 000000000..8d7e37cc7 --- /dev/null +++ b/src/core/utils/internal/emitterUtils.ts @@ -0,0 +1,70 @@ +import { type EventMap, type Emitter } from 'strict-event-emitter' +import { + SerializedRequest, + SerializedResponse, + deserializeRequest, + deserializeResponse, + isSerializedRequest, + isSerializedResponse, + serializeRequest, + serializeResponse, +} from '../request/serializeUtils' + +export type TransformEventsFunction< + FromEvents extends EventMap, + ToEvents extends { [EventName in keyof FromEvents]: unknown }, +> = ( + eventName: EventName, + args: FromEvents[EventName], +) => Promise + +export function onAnyEvent( + emitter: Emitter, + listener: ( + eventName: EventName, + ...args: Events[EventName] + ) => void, +): void { + const rawEmit = emitter.emit + + emitter.emit = function (eventName, ...args) { + listener(eventName, ...args) + return rawEmit.call(this, eventName, ...args) + } +} + +export async function serializeEventPayload( + payload: Array, +): Promise> { + return Promise.all( + payload.map(async (data) => { + if (data instanceof Request) { + return serializeRequest(data) + } + + if (data instanceof Response) { + return serializeResponse(data) + } + + return data + }), + ) +} + +export async function deserializeEventPayload( + payload: Array, +): Promise> { + return Promise.all( + payload.map(async (data) => { + if (isSerializedRequest(data)) { + return deserializeRequest(data) + } + + if (isSerializedResponse(data)) { + return deserializeResponse(data) + } + + return data + }), + ) +} diff --git a/src/core/utils/internal/isObject.ts b/src/core/utils/internal/isObject.ts index e4b730fc8..6dac43338 100644 --- a/src/core/utils/internal/isObject.ts +++ b/src/core/utils/internal/isObject.ts @@ -1,6 +1,6 @@ /** * Determines if the given value is an object. */ -export function isObject(value: any): boolean { +export function isObject(value: any): value is object { return value != null && typeof value === 'object' && !Array.isArray(value) } diff --git a/src/core/utils/request/serializeUtils.ts b/src/core/utils/request/serializeUtils.ts index 6964db4c4..e355f80d5 100644 --- a/src/core/utils/request/serializeUtils.ts +++ b/src/core/utils/request/serializeUtils.ts @@ -3,8 +3,10 @@ import { flattenHeadersObject, type FlatHeadersObject, } from 'headers-polyfill' +import { isObject } from '../internal/isObject' export interface SerializedRequest { + __serializedType: 'request' method: string url: string headers: FlatHeadersObject @@ -12,6 +14,7 @@ export interface SerializedRequest { } export interface SerializedResponse { + __serializedType: 'response' status: number statusText?: string headers: FlatHeadersObject @@ -31,6 +34,7 @@ export async function serializeRequest( : await request.clone().arrayBuffer() return { + __serializedType: 'request', method: request.method, url: request.url, headers: flattenHeadersObject(headersToObject(request.headers)), @@ -38,19 +42,27 @@ export async function serializeRequest( } } +export function isSerializedRequest( + value: unknown, +): value is SerializedRequest { + return ( + isObject(value) && + '__serializedType' in value && + value.__serializedType === 'request' + ) +} + /** * Create a Fetch API `Request` instance out of the * given serialized request object. Useful to revive * serialized requests during a message channel transfer. */ export function deserializeRequest(serialized: SerializedRequest): Request { - const request = new Request(serialized.url, { + return new Request(serialized.url, { method: serialized.method, headers: serialized.headers, body: serialized.body, }) - - return request } /** @@ -64,6 +76,7 @@ export async function serializeResponse( const responseBody = await response.clone().arrayBuffer() return { + __serializedType: 'response', status: response.status, statusText: response.statusText, headers: flattenHeadersObject(headersToObject(response.headers)), @@ -71,17 +84,25 @@ export async function serializeResponse( } } +export function isSerializedResponse( + value: unknown, +): value is SerializedResponse { + return ( + isObject(value) && + '__serializedType' in value && + value.__serializedType === 'response' + ) +} + /** * Create a Fetch API `Response` instance out of the * given serialized response object. Useful to revive * serialized responses during a message channel transfer. */ export function deserializeResponse(serialized: SerializedResponse): Response { - const response = new Response(serialized.body, { + return new Response(serialized.body, { status: serialized.status, statusText: serialized.statusText, headers: serialized.headers, }) - - return response } diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 520997f82..4e9fa1a41 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -14,11 +14,12 @@ import { mergeRight } from '~/core/utils/internal/mergeRight' import { handleRequest } from '~/core/utils/handleRequest' import { devUtils } from '~/core/utils/internal/devUtils' import { SetupServer } from './glossary' +import { SyncServerEventsMap, createSyncClient } from './setupRemoteServer' import { - SyncServerEventsMap, - createSyncClient, - createRemoteServerResolver, -} from './setupRemoteServer' + onAnyEvent, + serializeEventPayload, +} from '~/core/utils/internal/emitterUtils' +import { RemoteRequestHandler } from '~/core/handlers/RemoteRequestHandler' const DEFAULT_LISTEN_OPTIONS: RequiredDeep = { onUnhandledRequest: 'warn', @@ -65,15 +66,10 @@ export class SetupServerApi request, requestId, [ - createRemoteServerResolver({ + new RemoteRequestHandler({ requestId, socketPromise: this.syncSocketPromise, }), - /** - * @todo Spreading the list of all request handlers can be costly. - * Consider finding another way of always running the sync server resolver - * first. - */ ...this.currentHandlers, ], this.resolvedOptions, @@ -104,6 +100,59 @@ export class SetupServerApi this.syncSocketPromise = createSyncClient() + // Once the connection to the remote WebSocket server succeeds, + // pipe any life-cycle events from this process through that socket. + onAnyEvent(this.emitter, async (eventName, ...data) => { + const socket = await this.syncSocketPromise + + if (!socket) { + return + } + + const forwardLifeCycleEvent = async () => { + const payload = await serializeEventPayload(data) + socket.emit( + 'lifeCycleEventForward', + /** + * @todo Annotating serialized/desirialized mirror channels is tough. + */ + ...([eventName, ...payload] as any), + ) + } + + switch (eventName) { + case 'request:start': + case 'request:match': + case 'request:unhandled': + case 'request:end': { + const request = data[0] as Request + + if ( + request.headers.get('x-msw-request-type') === 'internal-request' + ) { + return + } + + forwardLifeCycleEvent() + break + } + + case 'response:bypass': + case 'response:mocked': { + const request = data[1] as Request + + if ( + request.headers.get('x-msw-request-type') === 'internal-request' + ) { + return + } + + forwardLifeCycleEvent() + break + } + } + }) + // Apply the interceptor when starting the server. this.interceptor.apply() diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index 2640a7ce7..2a57f22fe 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -9,20 +9,23 @@ import { RequestHandler, SetupApi, handleRequest, - rest, } from '~/core' import { SerializedRequest, SerializedResponse, deserializeRequest, - deserializeResponse, - serializeRequest, serializeResponse, } from '~/core/utils/request/serializeUtils' import { LifeCycleEventEmitter } from '~/core/sharedOptions' import { devUtils } from '~/core/utils/internal/devUtils' +import { deserializeEventPayload } from '~/core/utils/internal/emitterUtils' + +const SYNC_SERVER_DEFAULT_PORT = 50222 +const SYNC_SERVER_ENV_VARIABLE_NAME = 'MSW_INTERNAL_WEBSOCKET_PORT' +const SYNC_SERVER_PORT = + Number.parseInt(process.env[SYNC_SERVER_ENV_VARIABLE_NAME] || '') || + SYNC_SERVER_DEFAULT_PORT -const SYNC_SERVER_PORT = +(process.env.MSW_INTERNAL_WEBSOCKET_PORT || 50222) export const SYNC_SERVER_URL = new URL(`http://localhost:${SYNC_SERVER_PORT}`) /** @@ -38,12 +41,38 @@ export interface SetupRemoteServer { events: LifeCycleEventEmitter } +export type SerializedLifeCycleEventsMap = { + 'request:start': [request: SerializedRequest, requestId: string] + 'request:match': [request: SerializedRequest, requestId: string] + 'request:unhandled': [request: SerializedRequest, requestId: string] + 'request:end': [request: SerializedRequest, requestId: string] + 'response:mocked': [ + response: SerializedResponse, + request: SerializedRequest, + requestId: string, + ] + 'response:bypass': [ + response: SerializedResponse, + request: SerializedRequest, + requestId: string, + ] + unhandledException: [ + error: Error, + request: SerializedRequest, + requestId: string, + ] +} + export interface SyncServerEventsMap { request( serializedRequest: SerializedRequest, requestId: string, ): Promise | void response(serializedResponse?: SerializedResponse): Promise | void + lifeCycleEventForward( + eventName: EventName, + ...data: SerializedLifeCycleEventsMap[EventName] + ): void } declare global { @@ -54,15 +83,12 @@ export class SetupRemoteServerApi extends SetupApi implements SetupRemoteServer { - protected emitter: Emitter - constructor(...handlers: Array) { super(...handlers) - - this.emitter = new Emitter() } public async listen(): Promise { + const placeholderEmitter = new Emitter() const server = await createSyncServer() server.removeAllListeners() @@ -77,8 +103,11 @@ export class SetupRemoteServerApi request, requestId, this.currentHandlers, + /** + * @todo Support resolve options from the `.listen()` call. + */ { onUnhandledRequest() {} }, - this.emitter, + placeholderEmitter, ) socket.emit( @@ -87,16 +116,10 @@ export class SetupRemoteServerApi ) }) - /** - * @todo Have the socket signal back whichever response - * was used for whichever request. Include request ID - * and somehow let this API know whether the response was - * the mocked one or note. - */ - // socket.on('response', (serializedResponse) => { - // const response = deserializeResponse(serializedResponse) - // this.emitter.emit('response', response, requestId) - // }) + socket.on('lifeCycleEventForward', async (eventName, ...data) => { + const deserializedData: any = await deserializeEventPayload(data) + this.emitter.emit(eventName, ...deserializedData) + }) }) } @@ -131,49 +154,6 @@ ${`${pragma} ${header}`} } } -/** - * A request handler that resolves any outgoing HTTP requests - * against any established `setupRemoteServer()` WebSocket instance. - */ -export function createRemoteServerResolver(options: { - requestId: string - socketPromise: Promise | undefined> -}) { - return rest.all('*', async ({ request }) => { - // Bypass the socket.io HTTP handshake so the sync WS server connection - // doesn't hang forever. Check this as the first thing to unblock the handling. - if (request.headers.get('x-msw-request-type') === 'internal-request') { - return - } - - const socket = await options.socketPromise - - // If the sync server hasn't been started or failed to connect, - // skip this request handler altogether, it has no effect. - if (socket == null) { - return - } - - socket.emit('request', await serializeRequest(request), options.requestId) - - const responsePromise = new DeferredPromise() - - /** - * @todo Handle timeouts. - * @todo Handle socket errors. - */ - socket.on('response', (serializedResponse) => { - responsePromise.resolve( - serializedResponse - ? deserializeResponse(serializedResponse) - : undefined, - ) - }) - - return await responsePromise - }) -} - /** * Creates an internal WebSocket sync server. */ @@ -200,12 +180,28 @@ async function createSyncServer(): Promise< }, }) - httpServer.listen(+SYNC_SERVER_URL.port, SYNC_SERVER_URL.hostname, () => { - globalThis.syncServer = ws - serverReadyPromise.resolve(ws) - }) + httpServer.listen( + Number.parseInt(SYNC_SERVER_URL.port), + SYNC_SERVER_URL.hostname, + () => { + globalThis.syncServer = ws + serverReadyPromise.resolve(ws) + }, + ) + + httpServer.on('error', (error: Error | NodeJS.ErrnoException) => { + if ( + 'code' in error && + error.code === 'EADDRINUSE' && + Number.parseInt(SYNC_SERVER_URL.port) === SYNC_SERVER_DEFAULT_PORT + ) { + devUtils.warn( + 'The default internal WebSocket server port (%d) is in use. Please consider freeing the port or specifying a different port using the "%s" environment variable.', + SYNC_SERVER_DEFAULT_PORT, + SYNC_SERVER_ENV_VARIABLE_NAME, + ) + } - httpServer.on('error', (error) => { serverReadyPromise.reject(error) }) diff --git a/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts b/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts new file mode 100644 index 000000000..e90f5b084 --- /dev/null +++ b/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts @@ -0,0 +1,158 @@ +/** + * @jest-environment node + */ +import { rest, HttpResponse, SetupApi, LifeCycleEventsMap } from 'msw' +import { setupRemoteServer } from 'msw/node' +import { DeferredPromise } from '@open-draft/deferred-promise' +import { HttpServer } from '@open-draft/test-server/http' +import { waitFor } from '../../../../support/waitFor' +import { TestNodeApp } from '../utils' + +const remote = setupRemoteServer() + +const testApp = new TestNodeApp(require.resolve('../use.app.js')) +const httpServer = new HttpServer((app) => { + app.get('/greeting', (req, res) => { + res.send('hello') + }) +}) + +function spyOnLifeCycleEvents(setupApi: SetupApi) { + const listener = jest.fn() + const requestIdPromise = new DeferredPromise() + + setupApi.events + .on('request:start', (request, requestId) => { + requestIdPromise.resolve(requestId) + listener(`[request:start] ${request.method} ${request.url} ${requestId}`) + }) + .on('request:match', (request, requestId) => { + listener(`[request:match] ${request.method} ${request.url} ${requestId}`) + }) + .on('request:unhandled', (request, requestId) => { + listener( + `[request:unhandled] ${request.method} ${request.url} ${requestId}`, + ) + }) + .on('request:end', (request, requestId) => { + listener(`[request:end] ${request.method} ${request.url} ${requestId}`) + }) + + setupApi.events + .on('response:mocked', async (response, request, requestId) => { + listener( + `[response:mocked] ${request.method} ${request.url} ${requestId} ${ + response.status + } ${await response.clone().text()}`, + ) + }) + .on('response:bypass', async (response, request, requestId) => { + listener( + `[response:bypass] ${request.method} ${request.url} ${requestId} ${ + response.status + } ${await response.clone().text()}`, + ) + }) + + return { + listener, + waitForRequestId() { + return requestIdPromise + }, + } +} + +beforeAll(async () => { + await remote.listen() + await httpServer.listen() + await testApp.start() +}) + +afterEach(() => { + remote.resetHandlers() +}) + +afterAll(async () => { + await remote.close() + await httpServer.close() + await testApp.close() +}) + +it('emits correct events for the request handled in the test process', async () => { + remote.use( + rest.get('https://example.com/resource', () => { + return HttpResponse.json({ mocked: true }) + }), + ) + + const { listener, waitForRequestId } = spyOnLifeCycleEvents(remote) + + const response = await fetch(new URL('/resource', testApp.url)) + const requestId = await waitForRequestId() + + // Must return the mocked response defined in this test. + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + expect(await response.json()).toEqual({ mocked: true }) + + // Must pipe all the relevant life-cycle events. + await waitFor(() => { + expect(listener.mock.calls).toEqual([ + [`[request:start] GET https://example.com/resource ${requestId}`], + [`[request:match] GET https://example.com/resource ${requestId}`], + [`[request:end] GET https://example.com/resource ${requestId}`], + [ + `[response:mocked] GET https://example.com/resource ${requestId} 200 {"mocked":true}`, + ], + ]) + }) +}) + +it('emits correct events for the request handled in the remote process', async () => { + const { listener, waitForRequestId } = spyOnLifeCycleEvents(remote) + + const response = await fetch(new URL('/resource', testApp.url)) + const requestId = await waitForRequestId() + + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + expect(await response.json()).toEqual([1, 2, 3]) + + await waitFor(() => { + expect(listener.mock.calls).toEqual([ + [`[request:start] GET https://example.com/resource ${requestId}`], + [`[request:match] GET https://example.com/resource ${requestId}`], + [`[request:end] GET https://example.com/resource ${requestId}`], + [ + `[response:mocked] GET https://example.com/resource ${requestId} 200 [1,2,3]`, + ], + ]) + }) +}) + +it('emits correct events for the request unhandled by either parties', async () => { + const { listener, waitForRequestId } = spyOnLifeCycleEvents(remote) + + const resourceUrl = httpServer.http.url('/greeting') + // Request a special route in the running app that performs a proxy request + // to the resource specified in the "Location" request header. + const response = await fetch(new URL('/proxy', testApp.url), { + headers: { + Location: resourceUrl, + }, + }) + const requestId = await waitForRequestId() + + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + expect(await response.text()).toEqual('hello') + + await waitFor(() => { + expect(listener.mock.calls).toEqual([ + [`[request:start] GET ${resourceUrl} ${requestId}`], + [`[request:unhandled] GET ${resourceUrl} ${requestId}`], + [`[request:end] GET ${resourceUrl} ${requestId}`], + [`[response:bypass] GET ${resourceUrl} ${requestId} 200 hello`], + ]) + }) +}) diff --git a/test/node/msw-api/setup-remote-server/use.app.js b/test/node/msw-api/setup-remote-server/use.app.js index adb2798be..bfa988e6a 100644 --- a/test/node/msw-api/setup-remote-server/use.app.js +++ b/test/node/msw-api/setup-remote-server/use.app.js @@ -22,6 +22,29 @@ app.get('/resource', async (req, res) => { res.set(200).json(data) }) +app.use('/proxy', async (req, res) => { + const response = await fetch(req.header('location'), { + method: req.method, + headers: req.headers, + }) + res.writeHead(response.status, response.statusText) + + if (response.body) { + const reader = response.body.getReader() + reader.read().then(function processResult(result) { + if (result.done) { + res.end() + return + } + + res.write(Buffer.from(result.value)) + reader.read().then(processResult) + }) + } else { + res.end() + } +}) + const httpServer = app.listen(() => { if (!process.send) { throw new Error( diff --git a/test/node/msw-api/setup-remote-server/use.node.test.ts b/test/node/msw-api/setup-remote-server/use.node.test.ts index 3c4fc34a2..dfe1532e6 100644 --- a/test/node/msw-api/setup-remote-server/use.node.test.ts +++ b/test/node/msw-api/setup-remote-server/use.node.test.ts @@ -1,92 +1,17 @@ /** * @jest-environment node */ -import { ChildProcess, spawn } from 'child_process' -import { invariant } from 'outvariant' import { HttpResponse, rest } from 'msw' import { setupRemoteServer } from 'msw/node' -import { DeferredPromise } from '@open-draft/deferred-promise' +import { TestNodeApp } from './utils' const remote = setupRemoteServer() -class TestNodeApp { - private io: ChildProcess = null as any - private _url: URL | null = null - - constructor(private readonly appSourcePath: string) {} - - get url() { - invariant( - this._url, - 'Failed to return the URL for the test Node app: the app is not running. Did you forget to call ".spawn()"?', - ) - - return this._url.href - } - - public async spawn() { - const spawnPromise = new DeferredPromise() - - this.io = spawn('node', [this.appSourcePath], { - // Establish an IPC between the test and the test app. - // This IPC is not required for the remote interception to work. - // This IPC is required for the test app to be spawned at a random port - // and be able to communicate the port back to the test. - stdio: ['inherit', 'inherit', 'inherit', 'ipc'], - }) - - this.io - .on('message', (message) => { - try { - const url = new URL(message.toString()) - spawnPromise.resolve(url) - } catch (error) { - return - } - }) - .on('error', (error) => spawnPromise.reject(error)) - .on('exit', (code) => { - if (code !== 0) { - spawnPromise.reject( - new Error(`Failed to spawn a test Node app (exit code: ${code})`), - ) - } - }) - - spawnPromise.then((url) => { - this._url = url - }) - - return Promise.race([ - spawnPromise, - new Promise((_, reject) => { - setTimeout(() => { - reject(new Error('Failed to spawn a test Node app within timeout')) - }, 5_000) - }), - ]) - } - - public async close() { - const closePromise = new DeferredPromise() - - this.io.send('SIGTERM', (error) => { - if (error) { - closePromise.reject(error) - } else { - closePromise.resolve() - } - }) - - return closePromise - } -} - const testApp = new TestNodeApp(require.resolve('./use.app.js')) beforeAll(async () => { await remote.listen() - await testApp.spawn() + await testApp.start() }) afterEach(() => { diff --git a/test/node/msw-api/setup-remote-server/utils.ts b/test/node/msw-api/setup-remote-server/utils.ts new file mode 100644 index 000000000..937aed103 --- /dev/null +++ b/test/node/msw-api/setup-remote-server/utils.ts @@ -0,0 +1,76 @@ +import { invariant } from 'outvariant' +import { ChildProcess, spawn } from 'child_process' +import { DeferredPromise } from '@open-draft/deferred-promise' + +export class TestNodeApp { + private io: ChildProcess = null as any + private _url: URL | null = null + + constructor(private readonly appSourcePath: string) {} + + get url() { + invariant( + this._url, + 'Failed to return the URL for the test Node app: the app is not running. Did you forget to call ".spawn()"?', + ) + + return this._url.href + } + + public async start(): Promise { + const spawnPromise = new DeferredPromise() + + this.io = spawn('node', [this.appSourcePath], { + // Establish an IPC between the test and the test app. + // This IPC is not required for the remote interception to work. + // This IPC is required for the test app to be spawned at a random port + // and be able to communicate the port back to the test. + stdio: ['inherit', 'inherit', 'inherit', 'ipc'], + }) + + this.io + .on('message', (message) => { + try { + const url = new URL(message.toString()) + spawnPromise.resolve(url) + } catch (error) { + return + } + }) + .on('error', (error) => spawnPromise.reject(error)) + .on('exit', (code) => { + if (code !== 0) { + spawnPromise.reject( + new Error(`Failed to spawn a test Node app (exit code: ${code})`), + ) + } + }) + + spawnPromise.then((url) => { + this._url = url + }) + + return Promise.race([ + spawnPromise, + new Promise((_, reject) => { + setTimeout(() => { + reject(new Error('Failed to spawn a test Node app within timeout')) + }, 5_000) + }), + ]) + } + + public async close() { + const closePromise = new DeferredPromise() + + this.io.send('SIGTERM', (error) => { + if (error) { + closePromise.reject(error) + } else { + closePromise.resolve() + } + }) + + return closePromise + } +} From b25655c323affb266fabf5bf00fc1e7d928a0992 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 9 Jun 2023 13:26:49 +0200 Subject: [PATCH 148/210] fix: normalize response status and status text when logging --- src/core/handlers/GraphQLHandler.ts | 4 +-- src/core/handlers/RestHandler.ts | 4 +-- .../utils/logging/serializeResponse.test.ts | 2 +- src/core/utils/logging/serializeResponse.ts | 14 ++++++++-- test/browser/rest-api/basic.test.ts | 8 +----- test/browser/rest-api/plain-response.mocks.ts | 10 +++++++ test/browser/rest-api/plain-response.test.ts | 27 +++++++++++++++++++ 7 files changed, 55 insertions(+), 14 deletions(-) create mode 100644 test/browser/rest-api/plain-response.mocks.ts create mode 100644 test/browser/rest-api/plain-response.test.ts diff --git a/src/core/handlers/GraphQLHandler.ts b/src/core/handlers/GraphQLHandler.ts index b6b7996f0..509cc2f6b 100644 --- a/src/core/handlers/GraphQLHandler.ts +++ b/src/core/handlers/GraphQLHandler.ts @@ -169,7 +169,7 @@ Consider naming this operation or using "graphql.operation()" request handler to ) { const loggedRequest = await serializeRequest(request) const loggedResponse = await serializeResponse(response) - const statusColor = getStatusCodeColor(response.status) + const statusColor = getStatusCodeColor(loggedResponse.status) const requestInfo = parsedRequest?.operationName ? `${parsedRequest?.operationType} ${parsedRequest?.operationName}` : `anonymous ${parsedRequest?.operationType}` @@ -179,7 +179,7 @@ Consider naming this operation or using "graphql.operation()" request handler to getTimestamp(), `${requestInfo}`, `color:${statusColor}`, - `${response.status} ${response.statusText}`, + `${loggedResponse.status} ${loggedResponse.statusText}`, 'color:inherit', ) console.log('Request:', loggedRequest) diff --git a/src/core/handlers/RestHandler.ts b/src/core/handlers/RestHandler.ts index c90f7360a..148453675 100644 --- a/src/core/handlers/RestHandler.ts +++ b/src/core/handlers/RestHandler.ts @@ -147,7 +147,7 @@ export class RestHandler extends RequestHandler< const publicUrl = getPublicUrlFromRequest(request) const loggedRequest = await serializeRequest(request) const loggedResponse = await serializeResponse(response) - const statusColor = getStatusCodeColor(response.status) + const statusColor = getStatusCodeColor(loggedResponse.status) console.groupCollapsed( devUtils.formatMessage('%s %s %s (%c%s%c)'), @@ -155,7 +155,7 @@ export class RestHandler extends RequestHandler< request.method, publicUrl, `color:${statusColor}`, - `${response.status} ${response.statusText}`, + `${loggedResponse.status} ${loggedResponse.statusText}`, 'color:inherit', ) console.log('Request', loggedRequest) diff --git a/src/core/utils/logging/serializeResponse.test.ts b/src/core/utils/logging/serializeResponse.test.ts index 171df65e7..61a903286 100644 --- a/src/core/utils/logging/serializeResponse.test.ts +++ b/src/core/utils/logging/serializeResponse.test.ts @@ -8,7 +8,7 @@ it('serializes response without body', async () => { const result = await serializeResponse(new Response(null)) expect(result.status).toBe(200) - expect(result.statusText).toBe('') + expect(result.statusText).toBe('OK') expect(result.headers).toEqual({}) expect(result.body).toBe('') }) diff --git a/src/core/utils/logging/serializeResponse.ts b/src/core/utils/logging/serializeResponse.ts index fd33dc37a..4b0e4034d 100644 --- a/src/core/utils/logging/serializeResponse.ts +++ b/src/core/utils/logging/serializeResponse.ts @@ -1,5 +1,8 @@ +import statuses from '@bundled-es-modules/statuses' import { HeadersObject, headersToObject } from 'headers-polyfill' +const { message } = statuses + export interface SerializedResponse { status: number statusText: string @@ -13,9 +16,16 @@ export async function serializeResponse( const responseClone = response.clone() const responseText = await responseClone.text() + // Normalize the response status and status text when logging + // since the default Response instance doesn't infer status texts + // from status codes. This has no effect on the actual response instance. + const responseStatus = responseClone.status || 200 + const responseStatusText = + responseClone.statusText || message[responseStatus] || 'OK' + return { - status: responseClone.status, - statusText: responseClone.statusText, + status: responseStatus, + statusText: responseStatusText, headers: headersToObject(responseClone.headers), body: responseText, } diff --git a/test/browser/rest-api/basic.test.ts b/test/browser/rest-api/basic.test.ts index 6c0287a73..28e110ba4 100644 --- a/test/browser/rest-api/basic.test.ts +++ b/test/browser/rest-api/basic.test.ts @@ -1,14 +1,8 @@ import { test, expect } from '../playwright.extend' -test('mocks response to a GET request', async ({ - loadExample, - fetch, - page, -}) => { +test('mocks response to a GET request', async ({ loadExample, fetch }) => { await loadExample(require.resolve('./basic.mocks.ts')) - await page.pause() - const response = await fetch('https://example.com/users/octocat') const status = response.status() const headers = response.headers() diff --git a/test/browser/rest-api/plain-response.mocks.ts b/test/browser/rest-api/plain-response.mocks.ts new file mode 100644 index 000000000..0af61987f --- /dev/null +++ b/test/browser/rest-api/plain-response.mocks.ts @@ -0,0 +1,10 @@ +import { rest } from 'msw' +import { setupWorker } from 'msw/browser' + +const worker = setupWorker( + rest.get('/greeting', () => { + return new Response('Hello, world!') + }), +) + +worker.start() diff --git a/test/browser/rest-api/plain-response.test.ts b/test/browser/rest-api/plain-response.test.ts new file mode 100644 index 000000000..a1d0ae18d --- /dev/null +++ b/test/browser/rest-api/plain-response.test.ts @@ -0,0 +1,27 @@ +import { test, expect } from '../playwright.extend' + +test('returns a plain Response as a mocked response', async ({ + loadExample, + fetch, + spyOnConsole, +}) => { + await loadExample(require.resolve('./plain-response.mocks.ts')) + const consoleSpy = spyOnConsole() + + const response = await fetch('/greeting') + const status = response.status() + const headers = response.headers() + const body = await response.text() + + // Must return the correct response. + expect(status).toBe(200) + expect(headers).toHaveProperty('x-powered-by', 'msw') + expect(body).toEqual('Hello, world!') + + // Must print the correct log message in the console. + expect(consoleSpy.get('startGroupCollapsed')).toEqual( + expect.arrayContaining([ + expect.stringMatching(/\[MSW\] \d{2}:\d{2}:\d{2} GET \/greeting 200 OK/), + ]), + ) +}) From a7caf12c710461d62c629bf19d56d977de45728c Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 29 Jun 2023 11:06:31 +0200 Subject: [PATCH 149/210] test: add "Response.error" integration test --- .../rest-api/response/response-error.mocks.ts | 10 ++++++ .../rest-api/response/response-error.test.ts | 21 +++++++++++ .../rest-api/response/response-error.test.ts | 35 +++++++++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 test/browser/rest-api/response/response-error.mocks.ts create mode 100644 test/browser/rest-api/response/response-error.test.ts create mode 100644 test/node/rest-api/response/response-error.test.ts diff --git a/test/browser/rest-api/response/response-error.mocks.ts b/test/browser/rest-api/response/response-error.mocks.ts new file mode 100644 index 000000000..f0c26bb3a --- /dev/null +++ b/test/browser/rest-api/response/response-error.mocks.ts @@ -0,0 +1,10 @@ +import { rest } from 'msw' +import { setupWorker } from 'msw/browser' + +const worker = setupWorker( + rest.get('/resource', () => { + return Response.error() + }), +) + +worker.start() diff --git a/test/browser/rest-api/response/response-error.test.ts b/test/browser/rest-api/response/response-error.test.ts new file mode 100644 index 000000000..0c15535e3 --- /dev/null +++ b/test/browser/rest-api/response/response-error.test.ts @@ -0,0 +1,21 @@ +import { test, expect } from '../../playwright.extend' + +test('responds with a mocked error response using "Response.error" shorthand', async ({ + loadExample, + fetch, + page, +}) => { + await loadExample(require.resolve('./response-error.mocks.ts')) + + const responseError = await page.evaluate(() => { + return fetch('/resource') + .then(() => null) + .catch((error) => error) + }) + + await page.pause() + + expect(responseError).toEqual(new TypeError('Failed to fetch')) + // Guard against false positives due to exceptions arising from the library. + expect(responseError.cause).toBeUndefined() +}) diff --git a/test/node/rest-api/response/response-error.test.ts b/test/node/rest-api/response/response-error.test.ts new file mode 100644 index 000000000..dfb65941e --- /dev/null +++ b/test/node/rest-api/response/response-error.test.ts @@ -0,0 +1,35 @@ +/** + * @jest-environment node + */ +import { rest } from 'msw' +import { setupServer } from 'msw/node' + +const server = setupServer() + +beforeAll(() => { + server.listen() +}) + +afterEach(() => { + server.resetHandlers() +}) + +afterAll(() => { + server.close() +}) + +it('responds with a mocked error response using "Response.error" shorthand', async () => { + server.use( + rest.get('https://api.example.com/resource', () => { + return Response.error() + }), + ) + + const responseError = await fetch('https://api.example.com/resource') + .then(() => null) + .catch((error) => error) + + expect(responseError).toEqual(new TypeError('Failed to fetch')) + // Guard against false positives due to exceptions arising from the library. + expect(responseError.cause).toBeUndefined() +}) From 82e381206a0947d08c836d7a799a2762a16cf635 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 29 Jun 2023 16:06:10 +0200 Subject: [PATCH 150/210] feat: do not set "x-powered-by" mocked response header --- src/browser/setupWorker/glossary.ts | 1 + .../start/createFallbackRequestListener.ts | 4 ++++ .../start/createResponseListener.ts | 3 +-- src/core/utils/handleRequest.ts | 2 -- src/mockServiceWorker.js | 10 +++++++++- src/node/SetupServerApi.ts | 4 ++++ test/browser/graphql-api/cookies.test.ts | 2 +- .../graphql-api/operation-reference.test.ts | 6 ++---- test/browser/graphql-api/operation.test.ts | 14 ++++---------- test/browser/msw-api/context/delay.test.ts | 9 +++------ test/browser/msw-api/distribution/iife.test.ts | 1 - .../browser/msw-api/exception-handling.test.ts | 3 +-- test/browser/msw-api/hard-reload.test.ts | 3 +-- test/browser/msw-api/integrity-check.test.ts | 6 ++---- .../fallback-mode/fallback-mode.test.ts | 1 - .../msw-api/setup-worker/start/quiet.test.ts | 4 +--- test/browser/msw-api/setup-worker/stop.test.ts | 6 ++---- test/browser/msw-api/unregister.test.ts | 7 +++---- test/browser/rest-api/basic.test.ts | 3 +-- test/browser/rest-api/context.test.ts | 2 +- test/browser/rest-api/cookies-request.test.ts | 12 ++++-------- test/browser/rest-api/cookies.test.ts | 4 ++-- test/browser/rest-api/generator.test.ts | 4 ++-- test/browser/rest-api/params.test.ts | 3 +-- test/browser/rest-api/plain-response.test.ts | 3 +-- test/browser/rest-api/query.test.ts | 6 ++---- test/browser/rest-api/redirect.test.ts | 5 ++--- .../rest-api/request/matching/method.test.ts | 3 +-- .../matching/path-params-decode.test.ts | 2 +- .../rest-api/request/matching/uri.test.ts | 12 ++++++------ .../browser/rest-api/response-patching.test.ts | 18 ++++++------------ .../rest-api/response/body/body-binary.test.ts | 3 +-- .../rest-api/response/body/body-blob.test.ts | 2 +- .../response/body/body-formdata.test.ts | 2 +- .../scenarios/generator.node.test.ts | 2 -- .../scenarios/response-patching..node.test.ts | 5 +---- .../rest-api/response/body-binary.node.test.ts | 2 -- 37 files changed, 73 insertions(+), 106 deletions(-) diff --git a/src/browser/setupWorker/glossary.ts b/src/browser/setupWorker/glossary.ts index 8a15eb80e..aa1e9ed4c 100644 --- a/src/browser/setupWorker/glossary.ts +++ b/src/browser/setupWorker/glossary.ts @@ -46,6 +46,7 @@ export type ServiceWorkerIncomingResponse = Pick< 'type' | 'ok' | 'status' | 'statusText' | 'body' | 'headers' | 'redirected' > & { requestId: string + isMockedResponse: boolean } /** diff --git a/src/browser/setupWorker/start/createFallbackRequestListener.ts b/src/browser/setupWorker/start/createFallbackRequestListener.ts index 657923adc..e365856b0 100644 --- a/src/browser/setupWorker/start/createFallbackRequestListener.ts +++ b/src/browser/setupWorker/start/createFallbackRequestListener.ts @@ -44,6 +44,10 @@ export function createFallbackRequestListener( }) interceptor.on('response', (response, request, requestId) => { + /** + * @todo @fixme Don't rely on this response header since it's not set anymore. + * Instead, extend the Interceptors to deliver the "isMockedResponse" flag in the args. + */ if (response.headers.get('x-powered-by') === 'msw') { context.emitter.emit('response:mocked', response, request, requestId) } else { diff --git a/src/browser/setupWorker/start/createResponseListener.ts b/src/browser/setupWorker/start/createResponseListener.ts index 966adab13..5592ee7f3 100644 --- a/src/browser/setupWorker/start/createResponseListener.ts +++ b/src/browser/setupWorker/start/createResponseListener.ts @@ -26,9 +26,8 @@ export function createResponseListener(context: SetupWorkerInternalContext) { } const response = new Response(responseJson.body, responseJson) - const isMockedResponse = response.headers.get('x-powered-by') === 'msw' - if (isMockedResponse) { + if (responseJson.isMockedResponse) { context.emitter.emit( 'response:mocked', response, diff --git a/src/core/utils/handleRequest.ts b/src/core/utils/handleRequest.ts index 9209f85d3..dae7c7327 100644 --- a/src/core/utils/handleRequest.ts +++ b/src/core/utils/handleRequest.ts @@ -98,8 +98,6 @@ export async function handleRequest( return } - response.headers.set('x-powered-by', 'msw') - // Store all the received response cookies in the virtual cookie store. readResponseCookies(request, response) diff --git a/src/mockServiceWorker.js b/src/mockServiceWorker.js index accd59acf..fd4ed115c 100644 --- a/src/mockServiceWorker.js +++ b/src/mockServiceWorker.js @@ -9,6 +9,7 @@ */ const INTEGRITY_CHECKSUM = '' +const IS_MOCKED_RESPONSE = Symbol('isMockedResponse') const activeClientIds = new Set() self.addEventListener('install', function () { @@ -154,6 +155,7 @@ async function handleRequest(event, requestId) { type: 'RESPONSE', payload: { requestId, + isMockedResponse: IS_MOCKED_RESPONSE in response, type: responseClone.type, status: responseClone.status, statusText: responseClone.statusText, @@ -302,5 +304,11 @@ function sendToClient(client, message, transferrables = []) { } async function respondWithMock(response) { - return new Response(response.body, response) + const mockedResponse = new Response(response.body, response) + Reflect.defineProperty(mockedResponse, IS_MOCKED_RESPONSE, { + value: true, + enumerable: true, + }) + + return mockedResponse } diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 1b809a232..5e326c1a8 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -66,6 +66,10 @@ export class SetupServerApi }) this.interceptor.on('response', (response, request, requestId) => { + /** + * @todo @fixme Don't rely on this response header since it's not set anymore. + * Instead, extend the Interceptors to deliver the "isMockedResponse" flag in the args. + */ if (response.headers.get('x-powered-by') === 'msw') { this.emitter.emit('response:mocked', response, request, requestId) } else { diff --git a/test/browser/graphql-api/cookies.test.ts b/test/browser/graphql-api/cookies.test.ts index a94805ad9..c451f8dcc 100644 --- a/test/browser/graphql-api/cookies.test.ts +++ b/test/browser/graphql-api/cookies.test.ts @@ -20,7 +20,7 @@ test('sets cookie on the mocked GraphQL response', async ({ const headers = await res.allHeaders() const body = await res.json() - expect(headers).toHaveProperty('x-powered-by', 'msw') + expect(res.fromServiceWorker()).toBe(true) expect(headers).not.toHaveProperty('set-cookie') expect(body).toEqual({ data: { diff --git a/test/browser/graphql-api/operation-reference.test.ts b/test/browser/graphql-api/operation-reference.test.ts index 5c7f7663f..7e4850d66 100644 --- a/test/browser/graphql-api/operation-reference.test.ts +++ b/test/browser/graphql-api/operation-reference.test.ts @@ -23,11 +23,10 @@ test('allows referencing the request body in the GraphQL query handler', async ( id: 'abc-123', }, }) - const headers = await res.allHeaders() const body = await res.json() expect(res.status()).toBe(200) - expect(headers).toHaveProperty('x-powered-by', 'msw') + expect(res.fromServiceWorker()).toBe(true) expect(body).toEqual({ data: { query: GET_USER_QUERY, @@ -58,11 +57,10 @@ test('allows referencing the request body in the GraphQL mutation handler', asyn password: 'super-secret', }, }) - const headers = await res.allHeaders() const body = await res.json() expect(res.status()).toBe(200) - expect(headers).toHaveProperty('x-powered-by', 'msw') + expect(res.fromServiceWorker()).toBe(true) expect(body).toEqual({ data: { query: LOGIN_MUTATION, diff --git a/test/browser/graphql-api/operation.test.ts b/test/browser/graphql-api/operation.test.ts index 193e9dcf9..2658867bc 100644 --- a/test/browser/graphql-api/operation.test.ts +++ b/test/browser/graphql-api/operation.test.ts @@ -39,11 +39,10 @@ test('intercepts and mocks a GraphQL query', async ({ id: 'abc-123', }, }) - const headers = await res.allHeaders() const body = await res.json() expect(res.status()).toBe(200) - expect(headers).toHaveProperty('x-powered-by', 'msw') + expect(res.fromServiceWorker()).toBe(true) expect(body).toEqual({ data: { query: GET_USER_QUERY, @@ -87,9 +86,7 @@ test('intercepts and mocks an anonymous GraphQL query', async ({ expect(consoleSpy.get('warning')).toBeUndefined() expect(res.status()).toBe(200) - - const headers = await res.allHeaders() - expect(headers).toHaveProperty('x-powered-by', 'msw') + expect(res.fromServiceWorker()).toBe(true) const body = await res.json() expect(body).toEqual({ @@ -128,11 +125,10 @@ test('intercepts and mocks a GraphQL mutation', async ({ password: 'super-secret', }, }) - const headers = await res.allHeaders() const body = await res.json() expect(res.status()).toBe(200) - expect(headers).toHaveProperty('x-powered-by', 'msw') + expect(res.fromServiceWorker()).toBe(true) expect(body).toEqual({ data: { query: LOGIN_MUTATION, @@ -184,12 +180,10 @@ test('bypasses seemingly compatible REST requests', async ({ const res = await query(server.http.url('/search'), { query: 'favorite books', }) - - const headers = await res.allHeaders() const body = await res.json() expect(res.status()).toBe(200) - expect(headers).not.toHaveProperty('x-powered-by', 'msw') + expect(res.fromServiceWorker()).toBe(true) expect(body).toEqual({ results: [1, 2, 3], }) diff --git a/test/browser/msw-api/context/delay.test.ts b/test/browser/msw-api/context/delay.test.ts index 3a07d55dd..d4b6031ac 100644 --- a/test/browser/msw-api/context/delay.test.ts +++ b/test/browser/msw-api/context/delay.test.ts @@ -44,10 +44,9 @@ test('uses explicit server response delay', async ({ loadExample, fetch }) => { expect(timing.responseStart).toRoughlyEqual(1200, 250) const status = res.status() - const headers = await res.allHeaders() const body = await res.json() - expect(headers).toHaveProperty('x-powered-by', 'msw') + expect(res.fromServiceWorker()).toBe(true) expect(status).toBe(200) expect(body).toEqual({ mocked: true }) }) @@ -64,10 +63,9 @@ test('uses realistic server response delay when no delay value is provided', asy expect(timing.responseStart).toRoughlyEqual(250, 300) const status = res.status() - const headers = await res.allHeaders() const body = await res.json() - expect(headers).toHaveProperty('x-powered-by', 'msw') + expect(res.fromServiceWorker()).toBe(true) expect(status).toBe(200) expect(body).toEqual({ mocked: true, @@ -85,10 +83,9 @@ test('uses realistic server response delay when "real" delay mode is provided', expect(timing.responseStart).toRoughlyEqual(250, 300) const status = res.status() - const headers = await res.allHeaders() const body = await res.json() - expect(headers).toHaveProperty('x-powered-by', 'msw') + expect(res.fromServiceWorker()).toBe(true) expect(status).toBe(200) expect(body).toEqual({ mocked: true, diff --git a/test/browser/msw-api/distribution/iife.test.ts b/test/browser/msw-api/distribution/iife.test.ts index 12974d0fa..400c8c492 100644 --- a/test/browser/msw-api/distribution/iife.test.ts +++ b/test/browser/msw-api/distribution/iife.test.ts @@ -27,7 +27,6 @@ test('supports the usage of the iife bundle in a `, }) From 59c3e5286a319a9b0cd87424bf0c2890b631a735 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 30 Jun 2023 13:12:45 +0200 Subject: [PATCH 156/210] chore(release): v0.0.0-fetch.rc-15 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5841f31ad..77f67c2e8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-14", + "version": "0.0.0-fetch.rc-15", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/core/index.js", "module": "./lib/core/index.mjs", From 47fd803b17dbd456514fce3af2da721e29d40071 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 20 Jul 2023 15:51:22 +0200 Subject: [PATCH 157/210] feat: make life-cycle event listeners have object argument --- MIGRATING.md | 13 +++-- .../start/createFallbackRequestListener.ts | 10 ++-- .../start/createRequestListener.ts | 2 +- .../start/createResponseListener.ts | 21 +++----- src/core/sharedOptions.ts | 52 ++++++++++++++++--- src/core/utils/handleRequest.test.ts | 30 +++++------ src/core/utils/handleRequest.ts | 22 ++++---- src/node/SetupServerApi.ts | 8 +-- .../msw-api/regression/handle-stream.mocks.ts | 4 +- .../life-cycle-events/on.mocks.ts | 14 ++--- .../life-cycle-events/on.node.test.ts | 14 ++--- 11 files changed, 118 insertions(+), 72 deletions(-) diff --git a/MIGRATING.md b/MIGRATING.md index db22c97a5..3c781dacd 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -474,12 +474,19 @@ bypass(request, { ## Life-cycle events +The life-cycle events listeners now accept a single argument being an object with contextual properties. + +```diff +-server.events.on('request:start', (request, requestId) = {}) ++server.events.on('request:start', ({ request, requestId}) => {}) +``` + The request and response instances exposed in the life-cycle API have also been updated to return Fetch API `Request` and `Response` respectively. The request ID is now exposed as a standalone argument (previously, `req.id`). ```js -server.events.on('request:start', (request, requestId) => { +server.events.on('request:start', ({ request, requestId }) => { console.log(request.method, request.url) }) ``` @@ -487,7 +494,7 @@ server.events.on('request:start', (request, requestId) => { To read a request body, make sure to clone the request first. Otherwise, it won't be performed as it would be already read. ```js -server.events.on('request:match', async (request) => { +server.events.on('request:match', async ({ request }) => { // Make sure to clone the request so it could be // processed further down the line. const clone = request.clone() @@ -500,7 +507,7 @@ server.events.on('request:match', async (request) => { The `response:*` events now always contain the response reference, the related request, and its id in the listener arguments. ```js -worker.events.on('response:mocked', (response, request, requestId) => { +worker.events.on('response:mocked', ({ response, request, requestId }) => { console.log('response to %s %s is:', request.method, request.url, response) }) ``` diff --git a/src/browser/setupWorker/start/createFallbackRequestListener.ts b/src/browser/setupWorker/start/createFallbackRequestListener.ts index 31026fdda..93564371b 100644 --- a/src/browser/setupWorker/start/createFallbackRequestListener.ts +++ b/src/browser/setupWorker/start/createFallbackRequestListener.ts @@ -30,7 +30,7 @@ export function createFallbackRequestListener( { onMockedResponse(_, { handler, parsedRequest }) { if (!options.quiet) { - context.emitter.once('response:mocked', (response) => { + context.emitter.once('response:mocked', ({ response }) => { handler.log(requestCloneForLogs, response, parsedRequest) }) } @@ -48,9 +48,11 @@ export function createFallbackRequestListener( ({ response, isMockedResponse, request, requestId }) => { context.emitter.emit( isMockedResponse ? 'response:mocked' : 'response:bypass', - response, - request, - requestId, + { + response, + request, + requestId, + }, ) }, ) diff --git a/src/browser/setupWorker/start/createRequestListener.ts b/src/browser/setupWorker/start/createRequestListener.ts index 2f32d15d9..f82d3fe75 100644 --- a/src/browser/setupWorker/start/createRequestListener.ts +++ b/src/browser/setupWorker/start/createRequestListener.ts @@ -62,7 +62,7 @@ export const createRequestListener = ( ) if (!options.quiet) { - context.emitter.once('response:mocked', (response) => { + context.emitter.once('response:mocked', ({ response }) => { handler.log(requestCloneForLogs, response, parsedRequest) }) } diff --git a/src/browser/setupWorker/start/createResponseListener.ts b/src/browser/setupWorker/start/createResponseListener.ts index ae2784384..7719dfe19 100644 --- a/src/browser/setupWorker/start/createResponseListener.ts +++ b/src/browser/setupWorker/start/createResponseListener.ts @@ -30,24 +30,17 @@ export function createResponseListener(context: SetupWorkerInternalContext) { ? Response.error() : new Response(responseJson.body, responseJson) - if (responseJson.isMockedResponse) { - context.emitter.emit( - 'response:mocked', + context.emitter.emit( + responseJson.isMockedResponse ? 'response:mocked' : 'response:bypass', + { response, /** * @todo @fixme In this context, we don't know anything about * the request. */ - null as any, - responseJson.requestId, - ) - } else { - context.emitter.emit( - 'response:bypass', - response, - null as any, - responseJson.requestId, - ) - } + request: null as any, + requestId: responseJson.requestId, + }, + ) } } diff --git a/src/core/sharedOptions.ts b/src/core/sharedOptions.ts index b5f7af744..ad7f151a2 100644 --- a/src/core/sharedOptions.ts +++ b/src/core/sharedOptions.ts @@ -14,13 +14,51 @@ export interface SharedOptions { } export type LifeCycleEventsMap = { - 'request:start': [request: Request, requestId: string] - 'request:match': [request: Request, requestId: string] - 'request:unhandled': [request: Request, requestId: string] - 'request:end': [request: Request, requestId: string] - 'response:mocked': [response: Response, request: Request, requestId: string] - 'response:bypass': [response: Response, request: Request, requestId: string] - unhandledException: [error: Error, request: Request, requestId: string] + 'request:start': [ + args: { + request: Request + requestId: string + }, + ] + 'request:match': [ + args: { + request: Request + requestId: string + }, + ] + 'request:unhandled': [ + args: { + request: Request + requestId: string + }, + ] + 'request:end': [ + args: { + request: Request + requestId: string + }, + ] + 'response:mocked': [ + args: { + response: Response + request: Request + requestId: string + }, + ] + 'response:bypass': [ + args: { + response: Response + request: Request + requestId: string + }, + ] + unhandledException: [ + args: { + error: Error + request: Request + requestId: string + }, + ] } export type LifeCycleEventEmitter< diff --git a/src/core/utils/handleRequest.test.ts b/src/core/utils/handleRequest.test.ts index 95fa35362..b1dda47bc 100644 --- a/src/core/utils/handleRequest.test.ts +++ b/src/core/utils/handleRequest.test.ts @@ -71,8 +71,8 @@ test('returns undefined for a request with the "x-msw-intention" header equal to expect(result).toBeUndefined() expect(events).toEqual([ - ['request:start', request, requestId], - ['request:end', request, requestId], + ['request:start', { request, requestId }], + ['request:end', { request, requestId }], ]) expect(options.onUnhandledRequest).not.toHaveBeenCalled() expect(callbacks.onPassthroughResponse).toHaveBeenNthCalledWith(1, request) @@ -125,9 +125,9 @@ test('reports request as unhandled when it has no matching request handlers', as expect(result).toBeUndefined() expect(events).toEqual([ - ['request:start', request, requestId], - ['request:unhandled', request, requestId], - ['request:end', request, requestId], + ['request:start', { request, requestId }], + ['request:unhandled', { request, requestId }], + ['request:end', { request, requestId }], ]) expect(options.onUnhandledRequest).toHaveBeenNthCalledWith(1, request, { warning: expect.any(Function), @@ -160,8 +160,8 @@ test('returns undefined on a request handler that returns no response', async () expect(result).toBeUndefined() expect(events).toEqual([ - ['request:start', request, requestId], - ['request:end', request, requestId], + ['request:start', { request, requestId }], + ['request:end', { request, requestId }], ]) expect(options.onUnhandledRequest).not.toHaveBeenCalled() expect(callbacks.onPassthroughResponse).toHaveBeenNthCalledWith(1, request) @@ -205,9 +205,9 @@ test('returns the mocked response for a request with a matching request handler' expect(result).toEqual(mockedResponse) expect(events).toEqual([ - ['request:start', request, requestId], - ['request:match', request, requestId], - ['request:end', request, requestId], + ['request:start', { request, requestId }], + ['request:match', { request, requestId }], + ['request:end', { request, requestId }], ]) expect(callbacks.onPassthroughResponse).not.toHaveBeenCalled() @@ -278,9 +278,9 @@ test('returns a transformed response if the "transformResponse" option is provid ) expect(events).toEqual([ - ['request:start', request, requestId], - ['request:match', request, requestId], - ['request:end', request, requestId], + ['request:start', { request, requestId }], + ['request:match', { request, requestId }], + ['request:end', { request, requestId }], ]) expect(callbacks.onPassthroughResponse).not.toHaveBeenCalled() @@ -336,8 +336,8 @@ it('returns undefined without warning on a passthrough request', async () => { expect(result).toBeUndefined() expect(events).toEqual([ - ['request:start', request, requestId], - ['request:end', request, requestId], + ['request:start', { request, requestId }], + ['request:end', { request, requestId }], ]) expect(options.onUnhandledRequest).not.toHaveBeenCalled() expect(callbacks.onPassthroughResponse).toHaveBeenNthCalledWith(1, request) diff --git a/src/core/utils/handleRequest.ts b/src/core/utils/handleRequest.ts index dae7c7327..f70002179 100644 --- a/src/core/utils/handleRequest.ts +++ b/src/core/utils/handleRequest.ts @@ -43,11 +43,11 @@ export async function handleRequest( emitter: Emitter, handleRequestOptions?: HandleRequestOptions, ): Promise { - emitter.emit('request:start', request, requestId) + emitter.emit('request:start', { request, requestId }) // Perform bypassed requests (i.e. issued via "ctx.fetch") as-is. if (request.headers.get('x-msw-intention') === 'bypass') { - emitter.emit('request:end', request, requestId) + emitter.emit('request:end', { request, requestId }) handleRequestOptions?.onPassthroughResponse?.(request) return } @@ -63,7 +63,11 @@ export async function handleRequest( if (lookupResult.error) { // Allow developers to react to unhandled exceptions in request handlers. - emitter.emit('unhandledException', lookupResult.error, request, requestId) + emitter.emit('unhandledException', { + error: lookupResult.error, + request, + requestId, + }) throw lookupResult.error } @@ -71,8 +75,8 @@ export async function handleRequest( // matching this request. Report the request as unhandled. if (!lookupResult.data) { await onUnhandledRequest(request, handlers, options.onUnhandledRequest) - emitter.emit('request:unhandled', request, requestId) - emitter.emit('request:end', request, requestId) + emitter.emit('request:unhandled', { request, requestId }) + emitter.emit('request:end', { request, requestId }) handleRequestOptions?.onPassthroughResponse?.(request) return } @@ -82,7 +86,7 @@ export async function handleRequest( // When the handled request returned no mocked response, warn the developer, // as it may be an oversight on their part. Perform the request as-is. if (!response) { - emitter.emit('request:end', request, requestId) + emitter.emit('request:end', { request, requestId }) handleRequestOptions?.onPassthroughResponse?.(request) return } @@ -93,7 +97,7 @@ export async function handleRequest( response.status === 302 && response.headers.get('x-msw-intention') === 'passthrough' ) { - emitter.emit('request:end', request, requestId) + emitter.emit('request:end', { request, requestId }) handleRequestOptions?.onPassthroughResponse?.(request) return } @@ -101,7 +105,7 @@ export async function handleRequest( // Store all the received response cookies in the virtual cookie store. readResponseCookies(request, response) - emitter.emit('request:match', request, requestId) + emitter.emit('request:match', { request, requestId }) const requiredLookupResult = lookupResult.data as RequiredDeep @@ -115,7 +119,7 @@ export async function handleRequest( requiredLookupResult, ) - emitter.emit('request:end', request, requestId) + emitter.emit('request:end', { request, requestId }) return transformedResponse } diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 46d22f368..a3fee9ade 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -70,9 +70,11 @@ export class SetupServerApi ({ response, isMockedResponse, request, requestId }) => { this.emitter.emit( isMockedResponse ? 'response:mocked' : 'response:bypass', - response, - request, - requestId, + { + response, + request, + requestId, + }, ) }, ) diff --git a/test/browser/msw-api/regression/handle-stream.mocks.ts b/test/browser/msw-api/regression/handle-stream.mocks.ts index b0516a2ef..b3800bfb4 100644 --- a/test/browser/msw-api/regression/handle-stream.mocks.ts +++ b/test/browser/msw-api/regression/handle-stream.mocks.ts @@ -2,8 +2,8 @@ import { setupWorker } from 'msw/browser' const worker = setupWorker() -worker.events.on('response:bypass', async (res) => { - const responseText = await res.text() +worker.events.on('response:bypass', async ({ response }) => { + const responseText = await response.clone().text() console.warn(`[response:bypass] ${responseText}`) }) diff --git a/test/browser/msw-api/setup-worker/life-cycle-events/on.mocks.ts b/test/browser/msw-api/setup-worker/life-cycle-events/on.mocks.ts index 95e949189..94c00f446 100644 --- a/test/browser/msw-api/setup-worker/life-cycle-events/on.mocks.ts +++ b/test/browser/msw-api/setup-worker/life-cycle-events/on.mocks.ts @@ -13,15 +13,15 @@ const worker = setupWorker( }), ) -worker.events.on('request:start', (request, requestId) => { +worker.events.on('request:start', ({ request, requestId }) => { console.warn(`[request:start] ${request.method} ${request.url} ${requestId}`) }) -worker.events.on('request:match', (request, requestId) => { +worker.events.on('request:match', ({ request, requestId }) => { console.warn(`[request:match] ${request.method} ${request.url} ${requestId}`) }) -worker.events.on('request:unhandled', (request, requestId) => { +worker.events.on('request:unhandled', ({ request, requestId }) => { console.warn( `[request:unhandled] ${request.method} ${request.url} ${requestId}`, ) @@ -29,23 +29,23 @@ worker.events.on('request:unhandled', (request, requestId) => { const requestEndListner: ( ...args: LifeCycleEventsMap['request:end'] -) => void = (request, requestId) => { +) => void = ({ request, requestId }) => { console.warn(`[request:end] ${request.method} ${request.url} ${requestId}`) } worker.events.on('request:end', requestEndListner) -worker.events.on('response:mocked', async (response, request, requestId) => { +worker.events.on('response:mocked', async ({ response, requestId }) => { const body = await response.clone().text() console.warn(`[response:mocked] ${body} ${requestId}`) }) -worker.events.on('response:bypass', async (response, request, requestId) => { +worker.events.on('response:bypass', async ({ response, requestId }) => { const body = await response.clone().text() console.warn(`[response:bypass] ${body} ${requestId}`) }) -worker.events.on('unhandledException', (error, request, requestId) => { +worker.events.on('unhandledException', ({ error, request, requestId }) => { console.warn( `[unhandledException] ${request.method} ${request.url} ${requestId} ${error.message}`, ) diff --git a/test/node/msw-api/setup-server/life-cycle-events/on.node.test.ts b/test/node/msw-api/setup-server/life-cycle-events/on.node.test.ts index 9e4bb73b1..316d22ef7 100644 --- a/test/node/msw-api/setup-server/life-cycle-events/on.node.test.ts +++ b/test/node/msw-api/setup-server/life-cycle-events/on.node.test.ts @@ -42,33 +42,33 @@ beforeAll(async () => { ) server.listen() - server.events.on('request:start', (request, requestId) => { + server.events.on('request:start', ({ request, requestId }) => { listener(`[request:start] ${request.method} ${request.url} ${requestId}`) }) - server.events.on('request:match', (request, requestId) => { + server.events.on('request:match', ({ request, requestId }) => { listener(`[request:match] ${request.method} ${request.url} ${requestId}`) }) - server.events.on('request:unhandled', (request, requestId) => { + server.events.on('request:unhandled', ({ request, requestId }) => { listener( `[request:unhandled] ${request.method} ${request.url} ${requestId}`, ) }) - server.events.on('request:end', (request, requestId) => { + server.events.on('request:end', ({ request, requestId }) => { listener(`[request:end] ${request.method} ${request.url} ${requestId}`) }) - server.events.on('response:mocked', async (response, _, requestId) => { + server.events.on('response:mocked', async ({ response, requestId }) => { listener(`[response:mocked] ${await response.text()} ${requestId}`) }) - server.events.on('response:bypass', async (response, _, requestId) => { + server.events.on('response:bypass', async ({ response, requestId }) => { listener(`[response:bypass] ${await response.text()} ${requestId}`) }) - server.events.on('unhandledException', (error, request, requestId) => { + server.events.on('unhandledException', ({ error, request, requestId }) => { listener( `[unhandledException] ${request.method} ${request.url} ${requestId} ${error.message}`, ) From 61f6f3bd1ca2a2602a155ffc81e23dce7569f931 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 20 Jul 2023 16:00:39 +0200 Subject: [PATCH 158/210] feat: remove the ".printHandlers()" method --- MIGRATING.md | 12 +++ src/browser/setupWorker/glossary.ts | 6 -- src/browser/setupWorker/setupWorker.ts | 20 ---- src/core/SetupApi.ts | 2 - src/core/utils/internal/getCallFrame.test.ts | 32 +++---- src/node/SetupServerApi.ts | 17 ---- src/node/glossary.ts | 6 -- .../setup-worker/listHandlers.mocks.ts | 2 + .../msw-api/setup-worker/listHandlers.test.ts | 2 +- .../setup-worker/printHandlers.mocks.ts | 24 ----- .../setup-worker/printHandlers.test.ts | 72 -------------- .../setup-server/printHandlers.node.test.ts | 95 ------------------- 12 files changed, 31 insertions(+), 259 deletions(-) delete mode 100644 test/browser/msw-api/setup-worker/printHandlers.mocks.ts delete mode 100644 test/browser/msw-api/setup-worker/printHandlers.test.ts delete mode 100644 test/node/msw-api/setup-server/printHandlers.node.test.ts diff --git a/MIGRATING.md b/MIGRATING.md index 3c781dacd..98a822e2f 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -32,6 +32,7 @@ To help you navigate, we've structured this guide on the feature basis. You can - [ctx.delay](#ctxdelay) - [ctx.fetch](#ctx-fetch) - [Life-cycle events](#life-cycle-events) +- [`.printHandlers()`](#print-handlers) - [Advanced](#advanced) - [**What's new in this release?**](#whats-new) - [Common issues](#common-issues) @@ -514,6 +515,17 @@ worker.events.on('response:mocked', ({ response, request, requestId }) => { --- +## `.printHandlers() + +The `worker.prinHandlers()` and `server.printHandlers()` methods were removed. Use the `.listHandlers()` method instead: + +```diff +-worker.printHandlers() ++console.log(worker.listHandlers()) +``` + +--- + ## Advanced It is still possible to create custom handlers and resolvers, just make sure to account for the new [resolver call signature](#response-resolver). diff --git a/src/browser/setupWorker/glossary.ts b/src/browser/setupWorker/glossary.ts index aa1e9ed4c..cf301f274 100644 --- a/src/browser/setupWorker/glossary.ts +++ b/src/browser/setupWorker/glossary.ts @@ -240,11 +240,5 @@ export interface SetupWorker { */ listHandlers(): ReadonlyArray> - /** - * Lists all active request handlers. - * @see {@link https://mswjs.io/docs/api/setup-worker/print-handlers `worker.printHandlers()`} - */ - printHandlers: () => void - events: LifeCycleEventEmitter } diff --git a/src/browser/setupWorker/setupWorker.ts b/src/browser/setupWorker/setupWorker.ts index e772556f3..d85169d64 100644 --- a/src/browser/setupWorker/setupWorker.ts +++ b/src/browser/setupWorker/setupWorker.ts @@ -176,26 +176,6 @@ export class SetupWorkerApi return await this.startHandler(this.context.startOptions, options) } - public printHandlers(): void { - const handlers = this.listHandlers() - - handlers.forEach((handler) => { - const { header, callFrame } = handler.info - const pragma = handler.info.hasOwnProperty('operationType') - ? '[graphql]' - : '[rest]' - - console.groupCollapsed(`${pragma} ${header}`) - - if (callFrame) { - console.log(`Declaration: ${callFrame}`) - } - - console.log('Handler:', handler) - console.groupEnd() - }) - } - public stop(): void { super.dispose() this.context.events.removeAllListeners() diff --git a/src/core/SetupApi.ts b/src/core/SetupApi.ts index ea37b85d9..d7cae2f48 100644 --- a/src/core/SetupApi.ts +++ b/src/core/SetupApi.ts @@ -88,6 +88,4 @@ export abstract class SetupApi extends Disposable { }, } } - - abstract printHandlers(): void } diff --git a/src/core/utils/internal/getCallFrame.test.ts b/src/core/utils/internal/getCallFrame.test.ts index 96c34f92b..a61e30f7c 100644 --- a/src/core/utils/internal/getCallFrame.test.ts +++ b/src/core/utils/internal/getCallFrame.test.ts @@ -15,7 +15,7 @@ test('supports Node.js (Linux, MacOS) error stack', () => { 'Error: ', ' at getCallFrame (/Users/mock/github/msw/lib/node/index.js:3735:22)', ' at Object.get (/Users/mock/github/msw/lib/node/index.js:3776:29)', - ' at Object. (/Users/mock/github/msw/test/msw-api/setup-server/printHandlers.test.ts:13:8)', // <-- this one + ' at Object. (/Users/mock/github/msw/test/msw-api/setup-server/listHandlers.test.ts:13:8)', // <-- this one ' at Runtime._execModule (/Users/mock/github/msw/node_modules/jest-runtime/build/index.js:1299:24)', ' at Runtime._loadModule (/Users/mock/github/msw/node_modules/jest-runtime/build/index.js:898:12)', ' at Runtime.requireModule (/Users/mock/github/msw/node_modules/jest-runtime/build/index.js:746:10)', @@ -24,7 +24,7 @@ test('supports Node.js (Linux, MacOS) error stack', () => { ' at runTest (/Users/mock/github/msw/node_modules/jest-runner/build/runTest.js:472:34)', ]) expect(getCallFrame(linuxError)).toEqual( - '/Users/mock/github/msw/test/msw-api/setup-server/printHandlers.test.ts:13:8', + '/Users/mock/github/msw/test/msw-api/setup-server/listHandlers.test.ts:13:8', ) const macOsError = new ErrorWithStack([ @@ -32,7 +32,7 @@ test('supports Node.js (Linux, MacOS) error stack', () => { ' at getCallFrame (/Users/mock/git/msw/lib/node/index.js:3735:22)', ' at graphQLRequestHandler (/Users/mock/git/msw/lib/node/index.js:7071:25)', ' at Object.query (/Users/mock/git/msw/lib/node/index.js:7182:18)', - ' at Object. (/Users/mock/git/msw/test/msw-api/setup-server/printHandlers.test.ts:14:11)', // <-- this one + ' at Object. (/Users/mock/git/msw/test/msw-api/setup-server/listHandlers.test.ts:14:11)', // <-- this one ' at Runtime._execModule (/Users/mock/git/msw/node_modules/jest-runtime/build/index.js:1299:24)', ' at Runtime._loadModule (/Users/mock/git/msw/node_modules/jest-runtime/build/index.js:898:12)', ' at Runtime.requireModule (/Users/mock/git/msw/node_modules/jest-runtime/build/index.js:746:10)', @@ -42,7 +42,7 @@ test('supports Node.js (Linux, MacOS) error stack', () => { ]) expect(getCallFrame(macOsError)).toEqual( - '/Users/mock/git/msw/test/msw-api/setup-server/printHandlers.test.ts:14:11', + '/Users/mock/git/msw/test/msw-api/setup-server/listHandlers.test.ts:14:11', ) }) @@ -52,7 +52,7 @@ test('supports Node.js (Windows) error stack', () => { ' at getCallFrame (C:\\Users\\mock\\git\\msw\\lib\\node\\index.js:3735:22)', ' at graphQLRequestHandler (C:\\Users\\mock\\git\\msw\\lib\\node\\index.js:7071:25)', ' at Object.query (C:\\Users\\mock\\git\\msw\\lib\\node\\index.js:7182:18)', - ' at Object. (C:\\Users\\mock\\git\\msw\\test\\msw-api\\setup-server\\printHandlers.test.ts:75:13)', // <-- this one + ' at Object. (C:\\Users\\mock\\git\\msw\\test\\msw-api\\setup-server\\listHandlers.test.ts:75:13)', // <-- this one ' at Object.asyncJestTest (C:\\Users\\mock\\git\\msw\\node_modules\\jest-jasmine2\\build\\jasmineAsyncInstall.js:106:37)', ' at C:\\Users\\mock\\git\\msw\\node_modules\\jest-jasmine2\\build\\queueRunner.js:45:12', ' at new Promise ()', @@ -61,7 +61,7 @@ test('supports Node.js (Windows) error stack', () => { ]) expect(getCallFrame(error)).toBe( - 'C:\\Users\\mock\\git\\msw\\test\\msw-api\\setup-server\\printHandlers.test.ts:75:13', + 'C:\\Users\\mock\\git\\msw\\test\\msw-api\\setup-server\\listHandlers.test.ts:75:13', ) }) @@ -70,8 +70,8 @@ test('supports Chrome and Edge error stack', () => { 'Error', ' at getCallFrame (webpack:///./lib/browser/getCallFrame-deps.js?:272:20)', ' at Object.eval [as get] (webpack:///./lib/browser/rest-deps.js?:1402:90)', - ' at eval (webpack:///./test/msw-api/setup-worker/printHandlers.mocks.ts?:6:113)', // <-- this one - ' at Module../test/msw-api/setup-worker/printHandlers.mocks.ts (http://localhost:59464/main.js:1376:1)', + ' at eval (webpack:///./test/msw-api/setup-worker/listHandlers.mocks.ts?:6:113)', // <-- this one + ' at Module../test/msw-api/setup-worker/listHandlers.mocks.ts (http://localhost:59464/main.js:1376:1)', ' at __webpack_require__ (http://localhost:59464/main.js:790:30)', ' at fn (http://localhost:59464/main.js:101:20)', ' at eval (webpack:///multi_(webpack)-dev-server/client?:4:18)', @@ -81,7 +81,7 @@ test('supports Chrome and Edge error stack', () => { ]) expect(getCallFrame(error)).toBe( - 'webpack:///./test/msw-api/setup-worker/printHandlers.mocks.ts?:6:113', + 'webpack:///./test/msw-api/setup-worker/listHandlers.mocks.ts?:6:113', ) }) @@ -89,8 +89,8 @@ test('supports Firefox (MacOS, Windows) error stack', () => { const error = new ErrorWithStack([ 'getCallFrame@webpack:///./lib/browser/getCallFrame-deps.js?:272:20', 'createRestHandler/<@webpack:///./lib/browser/rest-deps.js?:1402:90', - '@webpack:///./test/msw-api/setup-worker/printHandlers.mocks.ts?:6:113', // <-- this one - './test/msw-api/setup-worker/printHandlers.mocks.ts@http://localhost:59464/main.js:1376:1', + '@webpack:///./test/msw-api/setup-worker/listHandlers.mocks.ts?:6:113', // <-- this one + './test/msw-api/setup-worker/listHandlers.mocks.ts@http://localhost:59464/main.js:1376:1', '__webpack_require__@http://localhost:59464/main.js:790:30', 'fn@http://localhost:59464/main.js:101:20', '@webpack:///multi_(webpack)-dev-server/client?:4:18', @@ -100,7 +100,7 @@ test('supports Firefox (MacOS, Windows) error stack', () => { ]) expect(getCallFrame(error)).toBe( - 'webpack:///./test/msw-api/setup-worker/printHandlers.mocks.ts?:6:113', + 'webpack:///./test/msw-api/setup-worker/listHandlers.mocks.ts?:6:113', ) }) @@ -110,7 +110,7 @@ test('supports Safari (MacOS) error stack', () => { '', 'eval code', 'eval@[native code]', - './test/msw-api/setup-worker/printHandlers.mocks.ts@http://localhost:59464/main.js:1376:5', // <-- this one + './test/msw-api/setup-worker/listHandlers.mocks.ts@http://localhost:59464/main.js:1376:5', // <-- this one '__webpack_require__@http://localhost:59464/main.js:790:34', 'fn@http://localhost:59464/main.js:101:39', 'eval code', @@ -122,7 +122,7 @@ test('supports Safari (MacOS) error stack', () => { ]) expect(getCallFrame(errorOne)).toBe( - './test/msw-api/setup-worker/printHandlers.mocks.ts@http://localhost:59464/main.js:1376:5', + './test/msw-api/setup-worker/listHandlers.mocks.ts@http://localhost:59464/main.js:1376:5', ) const errorTwo = new ErrorWithStack([ @@ -130,7 +130,7 @@ test('supports Safari (MacOS) error stack', () => { 'graphQLRequestHandler', 'eval code', 'eval@[native code]', - './test/msw-api/setup-worker/printHandlers.mocks.ts@http://localhost:56460/main.js:1376:5', // <-- this one + './test/msw-api/setup-worker/listHandlers.mocks.ts@http://localhost:56460/main.js:1376:5', // <-- this one '__webpack_require__@http://localhost:56460/main.js:790:34', 'fn@http://localhost:56460/main.js:101:39', 'eval code', @@ -142,7 +142,7 @@ test('supports Safari (MacOS) error stack', () => { ]) expect(getCallFrame(errorTwo)).toBe( - './test/msw-api/setup-worker/printHandlers.mocks.ts@http://localhost:56460/main.js:1376:5', + './test/msw-api/setup-worker/listHandlers.mocks.ts@http://localhost:56460/main.js:1376:5', ) }) diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index a3fee9ade..ebf2d7650 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -107,23 +107,6 @@ export class SetupServerApi ) } - public printHandlers(): void { - const handlers = this.listHandlers() - - handlers.forEach((handler) => { - const { header, callFrame } = handler.info - - const pragma = handler.info.hasOwnProperty('operationType') - ? '[graphql]' - : '[rest]' - - console.log(`\ -${`${pragma} ${header}`} - Declaration: ${callFrame} -`) - }) - } - public close(): void { this.dispose() } diff --git a/src/node/glossary.ts b/src/node/glossary.ts index 42951a8ff..32a55ebcf 100644 --- a/src/node/glossary.ts +++ b/src/node/glossary.ts @@ -46,11 +46,5 @@ export interface SetupServer { */ listHandlers(): ReadonlyArray> - /** - * Lists all active request handlers. - * @see {@link https://mswjs.io/docs/api/setup-server/print-handlers `server.print-handlers()`} - */ - printHandlers(): void - events: LifeCycleEventEmitter } diff --git a/test/browser/msw-api/setup-worker/listHandlers.mocks.ts b/test/browser/msw-api/setup-worker/listHandlers.mocks.ts index 65df4666e..97f13c3aa 100644 --- a/test/browser/msw-api/setup-worker/listHandlers.mocks.ts +++ b/test/browser/msw-api/setup-worker/listHandlers.mocks.ts @@ -14,6 +14,8 @@ const worker = setupWorker( github.operation(resolver), ) +worker.start() + // @ts-ignore window.msw = { worker, diff --git a/test/browser/msw-api/setup-worker/listHandlers.test.ts b/test/browser/msw-api/setup-worker/listHandlers.test.ts index 69fbdc113..7ae561dad 100644 --- a/test/browser/msw-api/setup-worker/listHandlers.test.ts +++ b/test/browser/msw-api/setup-worker/listHandlers.test.ts @@ -10,7 +10,7 @@ declare namespace window { } } -const LIST_HANDLER_EXAMPLE = require.resolve('./printHandlers.mocks.ts') +const LIST_HANDLER_EXAMPLE = require.resolve('./listHandlers.mocks.ts') test('lists all current request handlers', async ({ loadExample, page }) => { await loadExample(LIST_HANDLER_EXAMPLE) diff --git a/test/browser/msw-api/setup-worker/printHandlers.mocks.ts b/test/browser/msw-api/setup-worker/printHandlers.mocks.ts deleted file mode 100644 index 97f13c3aa..000000000 --- a/test/browser/msw-api/setup-worker/printHandlers.mocks.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { rest, graphql } from 'msw' -import { setupWorker } from 'msw/browser' - -const resolver = () => void 0 - -const github = graphql.link('https://api.github.com') - -const worker = setupWorker( - rest.get('https://test.mswjs.io/book/:bookId', resolver), - graphql.query('GetUser', resolver), - graphql.mutation('UpdatePost', resolver), - graphql.operation(resolver), - github.query('GetRepo', resolver), - github.operation(resolver), -) - -worker.start() - -// @ts-ignore -window.msw = { - worker, - rest, - graphql, -} diff --git a/test/browser/msw-api/setup-worker/printHandlers.test.ts b/test/browser/msw-api/setup-worker/printHandlers.test.ts deleted file mode 100644 index ffbfae671..000000000 --- a/test/browser/msw-api/setup-worker/printHandlers.test.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { rest, graphql } from 'msw' -import { SetupWorkerApi } from 'msw/browser' -import { test, expect } from '../../playwright.extend' - -declare namespace window { - export const msw: { - worker: SetupWorkerApi - rest: typeof rest - graphql: typeof graphql - } -} - -const PRINT_HANDLERS_EXAMPLE = require.resolve('./printHandlers.mocks.ts') - -test('lists rest request handlers', async ({ - loadExample, - spyOnConsole, - page, -}) => { - await loadExample(PRINT_HANDLERS_EXAMPLE) - const consoleSpy = spyOnConsole() - - await page.evaluate(() => { - window.msw.worker.printHandlers() - }) - - const startGroupCollapsed = consoleSpy.get('startGroupCollapsed') - - expect(startGroupCollapsed).toHaveLength(6) - expect(startGroupCollapsed).toContain( - '[rest] GET https://test.mswjs.io/book/:bookId', - ) - expect(startGroupCollapsed).toContain('[graphql] query GetUser (origin: *)') - expect(startGroupCollapsed).toContain( - '[graphql] mutation UpdatePost (origin: *)', - ) - expect(startGroupCollapsed).toContain('[graphql] all (origin: *)') - expect(startGroupCollapsed).toContain( - '[graphql] query GetRepo (origin: https://api.github.com)', - ) - expect(startGroupCollapsed).toContain( - '[graphql] all (origin: https://api.github.com)', - ) -}) - -test('includes runtime request handlers', async ({ - loadExample, - spyOnConsole, - page, -}) => { - await loadExample(PRINT_HANDLERS_EXAMPLE) - const consoleSpy = spyOnConsole() - - await page.evaluate(() => { - const { worker, rest, graphql } = window.msw - worker.use( - rest.post('/profile', () => void 0), - graphql.query('SubmitTransaction', () => void 0), - ) - - worker.printHandlers() - }) - - const startGroupCollapsed = consoleSpy.get('startGroupCollapsed') - - expect(startGroupCollapsed).toHaveLength(8) - - expect(startGroupCollapsed).toContain('[rest] POST /profile') - expect(startGroupCollapsed).toContain( - '[graphql] query SubmitTransaction (origin: *)', - ) -}) diff --git a/test/node/msw-api/setup-server/printHandlers.node.test.ts b/test/node/msw-api/setup-server/printHandlers.node.test.ts deleted file mode 100644 index 76dd62d28..000000000 --- a/test/node/msw-api/setup-server/printHandlers.node.test.ts +++ /dev/null @@ -1,95 +0,0 @@ -/** - * @jest-environment node - */ -import { rest, graphql } from 'msw' -import { setupServer } from 'msw/node' - -const resolver = () => void 0 - -const github = graphql.link('https://api.github.com') - -const server = setupServer( - rest.get('https://test.mswjs.io/book/:bookId', resolver), - graphql.query('GetUser', resolver), - graphql.mutation('UpdatePost', resolver), - graphql.operation(resolver), - github.query('GetRepo', resolver), - github.operation(resolver), -) - -beforeAll(() => { - server.listen() -}) - -beforeEach(() => { - jest.spyOn(global.console, 'log').mockImplementation() -}) - -afterEach(() => { - jest.restoreAllMocks() - server.resetHandlers() -}) - -afterAll(() => { - server.close() -}) - -test('lists all current request handlers', () => { - server.printHandlers() - - // Test failed here, commenting so it shows up in the PR - expect(console.log).toBeCalledTimes(6) - - expect(console.log).toBeCalledWith(`\ -${'[rest] GET https://test.mswjs.io/book/:bookId'} - Declaration: ${__filename}:12:8 -`) - - expect(console.log).toBeCalledWith(`\ -${'[graphql] query GetUser (origin: *)'} - Declaration: ${__filename}:13:11 -`) - - expect(console.log).toBeCalledWith(`\ -${'[graphql] mutation UpdatePost (origin: *)'} - Declaration: ${__filename}:14:11 -`) - - expect(console.log).toBeCalledWith(`\ -${'[graphql] all (origin: *)'} - Declaration: ${__filename}:15:11 -`) - - expect(console.log).toBeCalledWith(`\ -${'[graphql] query GetRepo (origin: https://api.github.com)'} - Declaration: ${__filename}:16:10 -`) - - expect(console.log).toBeCalledWith(`\ -${'[graphql] all (origin: https://api.github.com)'} - Declaration: ${__filename}:17:10 -`) -}) - -test('respects runtime request handlers when listing handlers', () => { - server.use( - rest.get('https://test.mswjs.io/book/:bookId', resolver), - graphql.query('GetRandomNumber', resolver), - ) - - server.printHandlers() - - // Runtime handlers are prepended to the list of handlers - // and they DON'T remove the handlers they may override. - expect(console.log).toBeCalledTimes(8) - - expect(console.log).toBeCalledWith(`\ -${'[rest] GET https://test.mswjs.io/book/:bookId'} - Declaration: ${__filename}:76:10 -`) - - expect(console.log).toBeCalledWith(`\ -${'[graphql] query GetRandomNumber (origin: *)'} - Declaration: ${__filename}:77:13 -`) -}) From c371f03bce72c6e58de2e202dcd14abb5105ebff Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 31 Jul 2023 20:35:10 +0200 Subject: [PATCH 159/210] feat: deprecate "rest" in favor of "http" (#1673) --- CONTRIBUTING.md | 9 +- MIGRATING.md | 101 +- README.md | 8 +- pnpm-lock.yaml | 3891 ++++++++--------- src/core/NetworkError.ts | 4 +- ...estHandler.test.ts => HttpHandler.test.ts} | 30 +- .../{RestHandler.ts => HttpHandler.ts} | 30 +- src/core/{rest.spec.ts => http.spec.ts} | 6 +- src/core/http.ts | 42 + src/core/index.ts | 8 +- src/core/passthrough.ts | 2 +- src/core/rest.ts | 42 - src/core/utils/handleRequest.test.ts | 12 +- .../utils/request/onUnhandledRequest.test.ts | 26 +- src/core/utils/request/onUnhandledRequest.ts | 20 +- test/browser/msw-api/context/delay.mocks.ts | 4 +- .../msw-api/distribution/iife.mocks.js | 4 +- .../msw-api/exception-handling.mocks.ts | 4 +- test/browser/msw-api/hard-reload.mocks.ts | 4 +- .../msw-api/integrity-check-invalid.mocks.ts | 4 +- .../msw-api/integrity-check-valid.mocks.ts | 4 +- .../msw-api/regression/null-body.mocks.ts | 4 +- test/browser/msw-api/req/passthrough.mocks.ts | 6 +- test/browser/msw-api/req/passthrough.test.ts | 18 +- .../msw-api/res/network-error.mocks.ts | 4 +- .../fallback-mode/fallback-mode.mocks.ts | 4 +- .../setup-worker/input-validation.mocks.ts | 4 +- .../life-cycle-events/on.mocks.ts | 8 +- .../setup-worker/listHandlers.mocks.ts | 6 +- .../msw-api/setup-worker/listHandlers.test.ts | 8 +- .../setup-worker/resetHandlers.test.ts | 10 +- .../setup-worker/response-logging.test.ts | 2 +- .../setup-worker/restoreHandlers.test.ts | 8 +- .../scenarios/custom-transformers.mocks.ts | 4 +- .../scenarios/errors/internal-error.mocks.ts | 4 +- .../scenarios/errors/network-error.mocks.ts | 4 +- .../scenarios/fall-through.mocks.ts | 14 +- .../scenarios/iframe/iframe.mocks.ts | 4 +- .../scenarios/text-event-stream.mocks.ts | 10 +- .../msw-api/setup-worker/start/error.mocks.ts | 4 +- .../start/find-worker.error.mocks.ts | 4 +- .../setup-worker/start/find-worker.mocks.ts | 4 +- .../on-unhandled-request/bypass.mocks.ts | 4 +- .../callback-print.mocks.ts | 4 +- .../callback-throws.mocks.ts | 4 +- .../on-unhandled-request/callback.mocks.ts | 4 +- .../on-unhandled-request/default.mocks.ts | 4 +- .../start/on-unhandled-request/error.mocks.ts | 4 +- .../on-unhandled-request/suggestions.mocks.ts | 4 +- .../suggestions.rest.test.ts | 26 +- .../start/on-unhandled-request/warn.mocks.ts | 8 +- .../start/options-sw-scope.mocks.ts | 4 +- .../msw-api/setup-worker/start/quiet.mocks.ts | 4 +- .../msw-api/setup-worker/start/start.mocks.ts | 4 +- .../start/wait-until-ready.error.mocks.ts | 6 +- .../start/wait-until-ready.false.mocks.ts | 6 +- .../start/wait-until-ready.mocks.ts | 6 +- .../msw-api/setup-worker/stop.mocks.ts | 4 +- .../stop/removes-all-listeners.mocks.ts | 4 +- .../browser/msw-api/setup-worker/use.mocks.ts | 8 +- test/browser/msw-api/setup-worker/use.test.ts | 20 +- test/browser/msw-api/unregister.mocks.ts | 4 +- test/browser/rest-api/basic.mocks.ts | 4 +- test/browser/rest-api/body.mocks.ts | 8 +- test/browser/rest-api/context.mocks.ts | 4 +- .../rest-api/cookies-inheritance.mocks.ts | 6 +- .../browser/rest-api/cookies-request.mocks.ts | 4 +- test/browser/rest-api/cookies.mocks.ts | 6 +- test/browser/rest-api/generator.mocks.ts | 8 +- .../rest-api/headers-multiple.mocks.ts | 6 +- test/browser/rest-api/params.mocks.ts | 4 +- test/browser/rest-api/plain-response.mocks.ts | 4 +- .../rest-api/query-params-warning.mocks.ts | 6 +- test/browser/rest-api/query.mocks.ts | 6 +- test/browser/rest-api/redirect.mocks.ts | 6 +- .../rest-api/request/body/body.mocks.ts | 10 +- .../rest-api/request/matching/all.mocks.ts | 6 +- .../rest-api/request/matching/all.test.ts | 2 +- .../rest-api/request/matching/method.mocks.ts | 4 +- .../matching/path-params-decode.mocks.ts | 4 +- .../rest-api/request/matching/uri.mocks.ts | 12 +- .../rest-api/response-patching.mocks.ts | 14 +- .../response/body/body-binary.mocks.ts | 4 +- .../rest-api/response/body/body-blob.mocks.ts | 4 +- .../response/body/body-formdata.mocks.ts | 4 +- .../rest-api/response/body/body-json.mocks.ts | 6 +- .../rest-api/response/body/body-text.mocks.ts | 4 +- .../rest-api/response/body/body-xml.mocks.ts | 4 +- .../rest-api/response/response-error.mocks.ts | 4 +- test/browser/rest-api/status.mocks.ts | 6 +- test/browser/rest-api/xhr.mocks.ts | 4 +- test/modules/browser/esm-browser.test.ts | 6 +- test/modules/node/esm-node.test.ts | 8 +- test/node/msw-api/context/delay.node.test.ts | 8 +- .../node/msw-api/req/passthrough.node.test.ts | 10 +- .../msw-api/res/network-error.node.test.ts | 4 +- .../input-validation.node.test.ts | 4 +- .../life-cycle-events/on.node.test.ts | 8 +- .../removeAllListeners.node.test.ts | 4 +- .../removeListener.node.test.ts | 4 +- .../setup-server/listHandlers.node.test.ts | 6 +- .../setup-server/resetHandlers.node.test.ts | 10 +- .../setup-server/restoreHandlers.node.test.ts | 6 +- .../scenarios/cookies-request.node.test.ts | 4 +- .../custom-transformers.node.test.ts | 4 +- .../scenarios/fake-timers.node.test.ts | 4 +- .../scenarios/fall-through.node.test.ts | 14 +- .../setup-server/scenarios/fetch.node.test.ts | 6 +- .../scenarios/generator.node.test.ts | 8 +- .../setup-server/scenarios/http.node.test.ts | 10 +- .../setup-server/scenarios/https.node.test.ts | 4 +- .../on-unhandled-request/bypass.node.test.ts | 4 +- .../callback-throws.node.test.ts | 4 +- .../callback.node.test.ts | 6 +- .../on-unhandled-request/default.node.test.ts | 4 +- .../on-unhandled-request/error.node.test.ts | 8 +- .../on-unhandled-request/warn.node.test.ts | 4 +- .../scenarios/relative-url.node.test.ts | 6 +- .../scenarios/response-patching..node.test.ts | 8 +- .../setup-server/scenarios/xhr.node.test.ts | 4 +- .../msw-api/setup-server/use.node.test.ts | 12 +- .../rest-api/cookies-inheritance.node.test.ts | 6 +- test/node/rest-api/https.node.test.ts | 4 +- .../body/body-arraybuffer.node.test.ts | 4 +- .../request/body/body-form-data.node.test.ts | 4 +- .../request/body/body-json.node.test.ts | 4 +- .../request/body/body-text.node.test.ts | 6 +- .../request/matching/all.node.test.ts | 12 +- .../matching/path-params-decode.node.test.ts | 4 +- .../response/body-binary.node.test.ts | 4 +- .../rest-api/response/body-json.node.test.ts | 6 +- .../response/body-stream.node.test.ts | 6 +- .../rest-api/response/body-text.node.test.ts | 4 +- .../rest-api/response/body-xml.node.test.ts | 4 +- .../rest-api/response/response-error.test.ts | 4 +- test/typings/rest.test-d.ts | 32 +- 136 files changed, 2458 insertions(+), 2523 deletions(-) rename src/core/handlers/{RestHandler.test.ts => HttpHandler.test.ts} (84%) rename src/core/handlers/{RestHandler.ts => HttpHandler.ts} (86%) rename src/core/{rest.spec.ts => http.spec.ts} (61%) create mode 100644 src/core/http.ts delete mode 100644 src/core/rest.ts diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 72baf0f3a..24feecd2c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -147,10 +147,11 @@ Let's write an example integration test that asserts the interception of a GET r ```js // test/browser/example.mocks.ts -import { rest, setupWorker, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/books', () => { + http.get('/books', () => { return HttpResponse.json([ { id: 'ea42ffcb-e729-4dd5-bfac-7a5b645cb1da', @@ -214,11 +215,11 @@ Let's replicate the same `GET /books` integration test in Node.js. ```ts // test/node/example.test.ts import fetch from 'node-fetch' -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupServer } from 'msw/node' const server = setupServer( - rest.get('/books', () => { + http.get('/books', () => { return HttpResponse.json([ { id: 'ea42ffcb-e729-4dd5-bfac-7a5b645cb1da', diff --git a/MIGRATING.md b/MIGRATING.md index 98a822e2f..96f87e383 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -41,6 +41,29 @@ To help you navigate, we've structured this guide on the feature basis. You can ## Imports +### `rest` becomes `http` + +The `rest` request handler namespace has been renamed to `http`. + +```diff +-import { rest } from 'msw' ++import { http } from 'msw' +``` + +This affects the request handlers declaration as well: + +```js +import { http } from 'msw' + +export const handlers = [ + http.get('/resource', resolver), + http.post('/resource', resolver), + http.all('*', resolver), +] +``` + +### Browser imports + The `setupWorker` API, alongside any related type definitions, are no longer exported from the root of `msw`. Instead, import them from `msw/browser`: ```diff @@ -75,7 +98,7 @@ A response resolver now exposes a single object argument instead of `(req, res, To mock responses, you should now return a Fetch API `Response` instance from the response resolver. You no longer need to compose a response via `res()`, and all the context utilities have also [been removed](#context-utilities). ```js -rest.get('/greet/:name', ({ request, params }) => { +http.get('/greet/:name', ({ request, params }) => { console.log('Captured %s %s', request.method, request.url) return new Response(`hello, ${params.name}!`) }) @@ -84,10 +107,10 @@ rest.get('/greet/:name', ({ request, params }) => { Now, a more complex example for both REST and GraphQL requests. ```js -import { rest, graphql } from 'msw' +import { http, graphql } from 'msw' export const handlers = [ - rest.put('/user/:id', async ({ request, params, cookies }) => { + http.put('/user/:id', async ({ request, params, cookies }) => { // Read request body as you'd normally do with Fetch. const payload = await request.json() // Access path parameters like before. @@ -127,7 +150,7 @@ Since the returned `request` is now an instance of Fetch API `Request`, there ar The `request.url` property is a string (previously, a `URL` instance). If you wish to operate with it like a `URL`, you need to construct it manually: ```js -rest.get('/product', ({ request }) => { +http.get('/product', ({ request }) => { // For example, this is how you would access // request search parameters now. const url = new URL(request.url) @@ -140,7 +163,7 @@ rest.get('/product', ({ request }) => { Path parameters are now exposed directly on the [Resolver info](#resolver-info) object (previously, `req.params`). ```js -rest.get('/resource', ({ params }) => { +http.get('/resource', ({ params }) => { console.log('Request path parameters:', params) }) ``` @@ -150,7 +173,7 @@ rest.get('/resource', ({ params }) => { Request cookies are now exposed directly on the [Resolver info](#resolver-info) object (previously, `req.cookies`). ```js -rest.get('/resource', ({ cookies }) => { +http.get('/resource', ({ cookies }) => { console.log('Request cookies:', cookies) }) ``` @@ -164,7 +187,7 @@ The library now does no assumptions when reading the intercepted request's body For example, this is how you would read request body: ```js -rest.post('/resource', async ({ request }) => { +http.post('/resource', async ({ request }) => { const data = await request.json() // request.formData() / request.arrayBuffer() / etc. }) @@ -175,10 +198,10 @@ rest.post('/resource', async ({ request }) => { Using the Fetch API `Response` instance may get quite verbose. To give you more convenient means of declaring mocked responses while remaining specification compliant and compatible, the library now exports an `HttpResponse` object. You can use that object to construct response instances faster. ```js -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' export const handlers = [ - rest.get('/user', () => { + http.get('/user', () => { // This is synonymous to "ctx.json()": // HttpResponse.json() stringifies the given body // and sets the correct "Content-Type" response header @@ -197,10 +220,10 @@ Although MSW now respects the Fetch API specification, the older versions of Nod To account for this, the library exports a `Response` class that you should use when declaring request handlers. Behind the hood, that response class is resolved to a compatible polyfill in Node.js; in the browser, it only aliases `global.Response` without introducing additional behaviors. ```js -import { rest, Response } from 'msw' +import { http,Response } from 'msw' setupServer( - rest.get('/ping', () => { + http.get('/ping', () => { return new Response('hello world) }) ) @@ -216,7 +239,7 @@ To create a one-time request handler, pass it an object as the third argument wi import { HttpResponse, rest } from 'msw' export const handlers = [ - rest.get( + http.get( '/user', () => { return HttpResponse.text('hello') @@ -229,10 +252,10 @@ export const handlers = [ ## `req.passthrough` ```js -import { rest, passthrough } from 'msw' +import { http, passthrough } from 'msw' export const handlers = [ - rest.get('/user', () => { + http.get('/user', () => { // Previously, "req.passthrough()". return passthrough() }), @@ -249,7 +272,7 @@ Most of the context utilities you'd normally use via `ctx.*` were removed. Inste import { HttpResponse, rest } from 'msw' export const handlers = [ - rest.post('/user', () => { + http.post('/user', () => { // ctx.json() return HttpResponse.json( { firstName: 'John' }, @@ -269,10 +292,10 @@ Let's go through each previously existing context utility and see how to declare ### `ctx.status` ```js -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' export const handlers = [ - rest.get('/resource', () => { + http.get('/resource', () => { return HttpResponse.text('hello', { status: 201 }) }), ] @@ -281,10 +304,10 @@ export const handlers = [ ### `ctx.set` ```js -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' export const handlers = [ - rest.get('/resource', () => { + http.get('/resource', () => { return HttpResponse.text('hello', { headers: { 'Content-Type': 'text/plain; charset=windows-1252', @@ -300,7 +323,7 @@ export const handlers = [ import { HttpResponse } from 'msw' export const handlers = [ - rest.get('/resource', () => { + http.get('/resource', () => { return HttpResponse.text('hello', { headers: { 'Set-Cookie': 'token=abc-123', @@ -316,7 +339,7 @@ When you provide an object as the `ResponseInit.headers` value, you cannot speci import { Headers, HttpResponse, rest } from 'msw' export const handlers = [ - rest.get('/resource', () => { + http.get('/resource', () => { return new HttpResponse(null, { headers: new Headers([ // Mock a multi-value response cookie header. @@ -333,10 +356,10 @@ export const handlers = [ ### `ctx.body` ```js -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' export const handlers = [ - rest.get('/resource', () => { + http.get('/resource', () => { return new HttpResponse('any-body') }), ] @@ -347,10 +370,10 @@ export const handlers = [ ### `ctx.text` ```js -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' export const handlers = [ - rest.get('/resource', () => { + http.get('/resource', () => { return HttpResponse.text('hello') }), ] @@ -359,10 +382,10 @@ export const handlers = [ ### `ctx.json` ```js -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' export const handlers = [ - rest.get('/resource', () => { + http.get('/resource', () => { return HttpResponse.json({ firstName: 'John' }) }), ] @@ -371,10 +394,10 @@ export const handlers = [ ### `ctx.xml` ```js -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' export const handlers = [ - rest.get('/resource', () => { + http.get('/resource', () => { return HttpResponse.xml('') }), ] @@ -388,7 +411,7 @@ The `ctx.data` utility has been removed in favor of constructing a mocked JSON r import { HttpResponse } from 'msw' export const handlers = [ - rest.get('/resource', () => { + http.get('/resource', () => { return HttpResponse.json({ data: { user: { @@ -408,7 +431,7 @@ The `ctx.errors` utility has been removed in favor of constructing a mocked JSON import { HttpResponse } from 'msw' export const handlers = [ - rest.get('/resource', () => { + http.get('/resource', () => { return HttpResponse.json({ errors: [ { @@ -423,10 +446,10 @@ export const handlers = [ ### `ctx.delay` ```js -import { rest, HttpResponse, delay } from 'msw' +import { http, HttpResponse, delay } from 'msw' export const handlers = [ - rest.get('/resource', async () => { + http.get('/resource', async () => { await delay() return HttpResponse.text('hello') }), @@ -445,10 +468,10 @@ await delay('infinite') The `ctx.fetch()` function has been removed in favor of the `bypass()` function. You should now always perform a regular `fetch()` call and wrap the request in the `bypass()` function if you wish for it to ignore any otherwise matching request handlers. ```js -import { rest, HttpResponse, bypass } from 'msw' +import { http, HttpResponse, bypass } from 'msw' export const handlers = [ - rest.get('/resource', async ({ request }) => { + http.get('/resource', async ({ request }) => { const fetchArgs = await bypass(request) // Use the regular "fetch" from your environment. @@ -553,7 +576,7 @@ import { rest } from 'msw' import { augmentResponse } from './utils' export const handlers = [ - rest.get('/user', () => { + http.get('/user', () => { return augmentResponse({ id: 1 }) }), ] @@ -579,7 +602,7 @@ For example, this is how you would read the request as `Blob`: import { rest } from 'msw' export const handlers = [ - rest.get('/resource', async ({ request }) => { + http.get('/resource', async ({ request }) => { const blob = await request.blob() }), ] @@ -590,9 +613,9 @@ export const handlers = [ You can now send a `ReadableStream` as the mocked response body. This is great for mocking any kind of streaming in HTTP responses. ```js -import { rest, HttpResponse, ReadableStream, delay } from 'msw' +import { http, HttpResponse, ReadableStream, delay } from 'msw' -rest.get('/greeting', () => { +http.get('/greeting', () => { const encoder = new TextEncoder() const stream = new ReadableStream({ async start(controller) { diff --git a/README.md b/README.md index b87fb6d81..5cf942742 100644 --- a/README.md +++ b/README.md @@ -71,12 +71,12 @@ In-browser usage is what sets Mock Service Worker apart from other tools. Utiliz ```js // src/mocks.js // 1. Import the library. -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' // 2. Describe network behavior with request handlers. const worker = setupWorker( - rest.get('https://github.com/octocat', ({ request, params, cookies }) => { + http.get('https://github.com/octocat', ({ request, params, cookies }) => { return HttpResponse.json( { message: 'Mocked response', @@ -121,7 +121,7 @@ Take a look at the example of an integration test in Jest that uses [React Testi // test/Dashboard.test.js import React from 'react' -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupServer } from 'msw/node' import { render, screen, waitFor } from '@testing-library/react' import Dashboard from '../src/components/Dashboard' @@ -130,7 +130,7 @@ const server = setupServer( // Describe network behavior with request handlers. // Tip: move the handlers into their own module and // import it across your browser and Node.js setups! - rest.get('/posts', ({ request, params, cookies }) => { + http.get('/posts', ({ request, params, cookies }) => { return HttpResponse.json([ { id: 'f8dd058f-9006-4174-8d49-e3086bc39c21', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 90c14a170..78426fcca 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,167 +1,244 @@ -lockfileVersion: 5.4 +lockfileVersion: '6.0' -overrides: - chokidar: 3.4.1 +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false -specifiers: - '@babel/core': ^7.17.2 - '@babel/preset-env': ^7.16.11 - '@bundled-es-modules/cookie': ^2.0.0 - '@bundled-es-modules/js-levenshtein': ^2.0.1 - '@bundled-es-modules/statuses': ^1.0.1 - '@commitlint/cli': ^16.1.0 - '@commitlint/config-conventional': ^16.0.0 - '@mswjs/cookies': ^1.0.0 - '@mswjs/interceptors': ^0.23.0 - '@open-draft/test-server': ^0.4.2 - '@open-draft/until': ^2.1.0 - '@ossjs/release': ^0.5.1 - '@playwright/test': ^1.30.0 - '@swc/core': ^1.3.35 - '@swc/jest': ^0.2.24 - '@types/cookie': ^0.4.1 - '@types/express': ^4.17.17 - '@types/fs-extra': ^9.0.13 - '@types/glob': ^8.1.0 - '@types/jest': ^29.4.0 - '@types/js-levenshtein': ^1.1.1 - '@types/json-bigint': ^1.0.1 - '@types/node': 18.x - '@types/node-fetch': ^2.5.11 - '@types/puppeteer': ^5.4.4 - '@types/statuses': ^2.0.1 - '@typescript-eslint/eslint-plugin': ^5.11.0 - '@typescript-eslint/parser': ^5.11.0 - '@web/dev-server': ^0.1.38 - babel-loader: ^8.2.3 - babel-minify: ^0.5.1 - chalk: ^4.1.2 +overrides: chokidar: 3.4.1 - commitizen: ^4.2.4 - cross-env: ^7.0.3 - cross-fetch: ^3.1.5 - cz-conventional-changelog: 3.3.0 - esbuild: ^0.17.15 - esbuild-loader: ^2.21.0 - eslint: ^7.30.0 - eslint-config-prettier: ^8.3.0 - eslint-plugin-prettier: ^3.4.0 - express: ^4.18.2 - formdata-node: 4.4.1 - fs-extra: ^10.0.0 - fs-teardown: ^0.3.0 - glob: ^9.3.4 - graphql: ^15.0.0 || ^16.7.0 - headers-polyfill: ^3.1.2 - inquirer: ^8.2.0 - is-node-process: ^1.2.0 - jest: ^29.4.3 - jest-environment-jsdom: ^29.4.3 - js-levenshtein: ^1.1.6 - json-bigint: ^1.0.0 - lint-staged: ^13.0.3 - node-fetch: ^2.6.7 - outvariant: ^1.4.0 - page-with: ^0.6.1 - path-to-regexp: ^6.2.0 - prettier: ^2.7.1 - regenerator-runtime: ^0.13.9 - rimraf: ^3.0.2 - simple-git-hooks: ^2.8.0 - strict-event-emitter: ^0.5.0 - ts-node: ^10.9.1 - tsup: ^6.7.0 - type-fest: ^2.19.0 - typescript: ^5.0.2 - undici: ^5.20.0 - url-loader: ^4.1.1 - webpack: ^5.68.0 - webpack-dev-server: ^3.11.2 - webpack-http-server: ^0.5.0 - yargs: ^17.3.1 dependencies: - '@bundled-es-modules/cookie': 2.0.0 - '@bundled-es-modules/js-levenshtein': 2.0.1 - '@bundled-es-modules/statuses': 1.0.1 - '@mswjs/cookies': 1.0.0 - '@mswjs/interceptors': 0.23.0 - '@open-draft/until': 2.1.0 - '@types/cookie': 0.4.1 - '@types/js-levenshtein': 1.1.1 - '@types/statuses': 2.0.1 - chalk: 4.1.2 - chokidar: 3.4.1 - formdata-node: 4.4.1 - graphql: 16.7.1 - headers-polyfill: 3.1.2 - inquirer: 8.2.5 - is-node-process: 1.2.0 - js-levenshtein: 1.1.6 - node-fetch: 2.6.9 - outvariant: 1.4.0 - path-to-regexp: 6.2.1 - strict-event-emitter: 0.5.0 - type-fest: 2.19.0 - yargs: 17.7.0 + '@bundled-es-modules/cookie': + specifier: ^2.0.0 + version: 2.0.0 + '@bundled-es-modules/js-levenshtein': + specifier: ^2.0.1 + version: 2.0.1 + '@bundled-es-modules/statuses': + specifier: ^1.0.1 + version: 1.0.1 + '@mswjs/cookies': + specifier: ^1.0.0 + version: 1.0.0 + '@mswjs/interceptors': + specifier: ^0.23.0 + version: 0.23.0 + '@open-draft/until': + specifier: ^2.1.0 + version: 2.1.0 + '@types/cookie': + specifier: ^0.4.1 + version: 0.4.1 + '@types/js-levenshtein': + specifier: ^1.1.1 + version: 1.1.1 + '@types/statuses': + specifier: ^2.0.1 + version: 2.0.1 + chalk: + specifier: ^4.1.2 + version: 4.1.2 + chokidar: + specifier: 3.4.1 + version: 3.4.1 + formdata-node: + specifier: 4.4.1 + version: 4.4.1 + graphql: + specifier: ^15.0.0 || ^16.7.0 + version: 16.7.1 + headers-polyfill: + specifier: ^3.1.2 + version: 3.1.2 + inquirer: + specifier: ^8.2.0 + version: 8.2.5 + is-node-process: + specifier: ^1.2.0 + version: 1.2.0 + js-levenshtein: + specifier: ^1.1.6 + version: 1.1.6 + node-fetch: + specifier: ^2.6.7 + version: 2.6.9 + outvariant: + specifier: ^1.4.0 + version: 1.4.0 + path-to-regexp: + specifier: ^6.2.0 + version: 6.2.1 + strict-event-emitter: + specifier: ^0.5.0 + version: 0.5.0 + type-fest: + specifier: ^2.19.0 + version: 2.19.0 + yargs: + specifier: ^17.3.1 + version: 17.7.0 devDependencies: - '@babel/core': 7.20.12 - '@babel/preset-env': 7.20.2_@babel+core@7.20.12 - '@commitlint/cli': 16.3.0_@swc+core@1.3.35 - '@commitlint/config-conventional': 16.2.4 - '@open-draft/test-server': 0.4.2 - '@ossjs/release': 0.5.1 - '@playwright/test': 1.30.0 - '@swc/core': 1.3.35 - '@swc/jest': 0.2.24_@swc+core@1.3.35 - '@types/express': 4.17.17 - '@types/fs-extra': 9.0.13 - '@types/glob': 8.1.0 - '@types/jest': 29.4.0 - '@types/json-bigint': 1.0.1 - '@types/node': 18.16.16 - '@types/node-fetch': 2.6.2 - '@types/puppeteer': 5.4.7 - '@typescript-eslint/eslint-plugin': 5.52.0_aaw67h7nkydj3qj4plp2jqjmxe - '@typescript-eslint/parser': 5.52.0_jeuwjvsopuo23ctsjsevxmvjsi - '@web/dev-server': 0.1.38 - babel-loader: 8.3.0_la66t7xldg4uecmyawueag5wkm - babel-minify: 0.5.2 - commitizen: 4.3.0_@swc+core@1.3.35 - cross-env: 7.0.3 - cross-fetch: 3.1.5 - cz-conventional-changelog: 3.3.0_@swc+core@1.3.35 - esbuild: 0.17.19 - esbuild-loader: 2.21.0_webpack@5.75.0 - eslint: 7.32.0 - eslint-config-prettier: 8.6.0_eslint@7.32.0 - eslint-plugin-prettier: 3.4.1_2fbugv7hbzbahj5qm3ztcno6by - express: 4.18.2 - fs-extra: 10.1.0 - fs-teardown: 0.3.2 - glob: 9.3.5 - jest: 29.4.3_u3tjahz4lx2ow4rgesw7wigoy4 - jest-environment-jsdom: 29.4.3 - json-bigint: 1.0.0 - lint-staged: 13.1.2 - page-with: 0.6.1_mtsvlg4x4u5udzh2pohivgt4x4 - prettier: 2.8.4 - regenerator-runtime: 0.13.11 - rimraf: 3.0.2 - simple-git-hooks: 2.8.1 - ts-node: 10.9.1_ucqeymrky72u6ak3savtol5egu - tsup: 6.7.0_4s7jzcjqpdttwnwh3e3glkuq6y - typescript: 5.0.2 - undici: 5.22.1 - url-loader: 4.1.1_webpack@5.75.0 - webpack: 5.75.0_mtsvlg4x4u5udzh2pohivgt4x4 - webpack-dev-server: 3.11.3_webpack@5.75.0 - webpack-http-server: 0.5.0_mtsvlg4x4u5udzh2pohivgt4x4 + '@babel/core': + specifier: ^7.17.2 + version: 7.20.12 + '@babel/preset-env': + specifier: ^7.16.11 + version: 7.20.2(@babel/core@7.20.12) + '@commitlint/cli': + specifier: ^16.1.0 + version: 16.3.0(@swc/core@1.3.35) + '@commitlint/config-conventional': + specifier: ^16.0.0 + version: 16.2.4 + '@open-draft/test-server': + specifier: ^0.4.2 + version: 0.4.2 + '@ossjs/release': + specifier: ^0.5.1 + version: 0.5.1 + '@playwright/test': + specifier: ^1.30.0 + version: 1.30.0 + '@swc/core': + specifier: ^1.3.35 + version: 1.3.35 + '@swc/jest': + specifier: ^0.2.24 + version: 0.2.24(@swc/core@1.3.35) + '@types/express': + specifier: ^4.17.17 + version: 4.17.17 + '@types/fs-extra': + specifier: ^9.0.13 + version: 9.0.13 + '@types/glob': + specifier: ^8.1.0 + version: 8.1.0 + '@types/jest': + specifier: ^29.4.0 + version: 29.4.0 + '@types/json-bigint': + specifier: ^1.0.1 + version: 1.0.1 + '@types/node': + specifier: 18.x + version: 18.16.16 + '@types/node-fetch': + specifier: ^2.5.11 + version: 2.6.2 + '@types/puppeteer': + specifier: ^5.4.4 + version: 5.4.7 + '@typescript-eslint/eslint-plugin': + specifier: ^5.11.0 + version: 5.52.0(@typescript-eslint/parser@5.52.0)(eslint@7.32.0)(typescript@5.0.2) + '@typescript-eslint/parser': + specifier: ^5.11.0 + version: 5.52.0(eslint@7.32.0)(typescript@5.0.2) + '@web/dev-server': + specifier: ^0.1.38 + version: 0.1.38 + babel-loader: + specifier: ^8.2.3 + version: 8.3.0(@babel/core@7.20.12)(webpack@5.75.0) + babel-minify: + specifier: ^0.5.1 + version: 0.5.2 + commitizen: + specifier: ^4.2.4 + version: 4.3.0(@swc/core@1.3.35) + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + cross-fetch: + specifier: ^3.1.5 + version: 3.1.5 + cz-conventional-changelog: + specifier: 3.3.0 + version: 3.3.0(@swc/core@1.3.35) + esbuild: + specifier: ^0.17.15 + version: 0.17.19 + esbuild-loader: + specifier: ^2.21.0 + version: 2.21.0(webpack@5.75.0) + eslint: + specifier: ^7.30.0 + version: 7.32.0 + eslint-config-prettier: + specifier: ^8.3.0 + version: 8.6.0(eslint@7.32.0) + eslint-plugin-prettier: + specifier: ^3.4.0 + version: 3.4.1(eslint-config-prettier@8.6.0)(eslint@7.32.0)(prettier@2.8.4) + express: + specifier: ^4.18.2 + version: 4.18.2(supports-color@6.1.0) + fs-extra: + specifier: ^10.0.0 + version: 10.1.0 + fs-teardown: + specifier: ^0.3.0 + version: 0.3.2 + glob: + specifier: ^9.3.4 + version: 9.3.5 + jest: + specifier: ^29.4.3 + version: 29.4.3(@types/node@18.16.16)(ts-node@10.9.1) + jest-environment-jsdom: + specifier: ^29.4.3 + version: 29.4.3 + json-bigint: + specifier: ^1.0.0 + version: 1.0.0 + lint-staged: + specifier: ^13.0.3 + version: 13.1.2 + page-with: + specifier: ^0.6.1 + version: 0.6.1(@swc/core@1.3.35)(esbuild@0.17.19) + prettier: + specifier: ^2.7.1 + version: 2.8.4 + regenerator-runtime: + specifier: ^0.13.9 + version: 0.13.11 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + simple-git-hooks: + specifier: ^2.8.0 + version: 2.8.1 + ts-node: + specifier: ^10.9.1 + version: 10.9.1(@swc/core@1.3.35)(@types/node@18.16.16)(typescript@5.0.2) + tsup: + specifier: ^6.7.0 + version: 6.7.0(@swc/core@1.3.35)(ts-node@10.9.1)(typescript@5.0.2) + typescript: + specifier: ^5.0.2 + version: 5.0.2 + undici: + specifier: ^5.20.0 + version: 5.22.1 + url-loader: + specifier: ^4.1.1 + version: 4.1.1(webpack@5.75.0) + webpack: + specifier: ^5.68.0 + version: 5.75.0(@swc/core@1.3.35)(esbuild@0.17.19) + webpack-dev-server: + specifier: ^3.11.2 + version: 3.11.3(webpack@5.75.0) + webpack-http-server: + specifier: ^0.5.0 + version: 0.5.0(@swc/core@1.3.35)(esbuild@0.17.19) packages: - /@75lb/deep-merge/1.1.1: + /@75lb/deep-merge@1.1.1: resolution: {integrity: sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw==} engines: {node: '>=12.17'} dependencies: @@ -169,7 +246,7 @@ packages: typical: 7.1.1 dev: true - /@ampproject/remapping/2.2.0: + /@ampproject/remapping@2.2.0: resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} engines: {node: '>=6.0.0'} dependencies: @@ -177,32 +254,32 @@ packages: '@jridgewell/trace-mapping': 0.3.17 dev: true - /@babel/code-frame/7.12.11: + /@babel/code-frame@7.12.11: resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} dependencies: '@babel/highlight': 7.18.6 dev: true - /@babel/code-frame/7.18.6: + /@babel/code-frame@7.18.6: resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 dev: true - /@babel/compat-data/7.20.14: + /@babel/compat-data@7.20.14: resolution: {integrity: sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==} engines: {node: '>=6.9.0'} dev: true - /@babel/core/7.20.12: + /@babel/core@7.20.12: resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.18.6 '@babel/generator': 7.20.14 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.20.12) '@babel/helper-module-transforms': 7.20.11 '@babel/helpers': 7.20.13 '@babel/parser': 7.20.15 @@ -210,7 +287,7 @@ packages: '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 convert-source-map: 1.9.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.0 @@ -218,7 +295,7 @@ packages: - supports-color dev: true - /@babel/generator/7.20.14: + /@babel/generator@7.20.14: resolution: {integrity: sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==} engines: {node: '>=6.9.0'} dependencies: @@ -227,14 +304,14 @@ packages: jsesc: 2.5.2 dev: true - /@babel/helper-annotate-as-pure/7.18.6: + /@babel/helper-annotate-as-pure@7.18.6: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.7 dev: true - /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9: + /@babel/helper-builder-binary-assignment-operator-visitor@7.18.9: resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==} engines: {node: '>=6.9.0'} dependencies: @@ -242,7 +319,7 @@ packages: '@babel/types': 7.20.7 dev: true - /@babel/helper-compilation-targets/7.20.7_@babel+core@7.20.12: + /@babel/helper-compilation-targets@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -256,7 +333,7 @@ packages: semver: 6.3.0 dev: true - /@babel/helper-create-class-features-plugin/7.20.12_@babel+core@7.20.12: + /@babel/helper-create-class-features-plugin@7.20.12(@babel/core@7.20.12): resolution: {integrity: sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -275,7 +352,7 @@ packages: - supports-color dev: true - /@babel/helper-create-regexp-features-plugin/7.20.5_@babel+core@7.20.12: + /@babel/helper-create-regexp-features-plugin@7.20.5(@babel/core@7.20.12): resolution: {integrity: sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==} engines: {node: '>=6.9.0'} peerDependencies: @@ -286,15 +363,15 @@ packages: regexpu-core: 5.3.1 dev: true - /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.20.12: + /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.20.12): resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.20.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) lodash.debounce: 4.0.8 resolve: 1.22.1 semver: 6.3.0 @@ -302,19 +379,19 @@ packages: - supports-color dev: true - /@babel/helper-environment-visitor/7.18.9: + /@babel/helper-environment-visitor@7.18.9: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-explode-assignable-expression/7.18.6: + /@babel/helper-explode-assignable-expression@7.18.6: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.7 dev: true - /@babel/helper-function-name/7.19.0: + /@babel/helper-function-name@7.19.0: resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} engines: {node: '>=6.9.0'} dependencies: @@ -322,28 +399,28 @@ packages: '@babel/types': 7.20.7 dev: true - /@babel/helper-hoist-variables/7.18.6: + /@babel/helper-hoist-variables@7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.7 dev: true - /@babel/helper-member-expression-to-functions/7.20.7: + /@babel/helper-member-expression-to-functions@7.20.7: resolution: {integrity: sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.7 dev: true - /@babel/helper-module-imports/7.18.6: + /@babel/helper-module-imports@7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.7 dev: true - /@babel/helper-module-transforms/7.20.11: + /@babel/helper-module-transforms@7.20.11: resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} engines: {node: '>=6.9.0'} dependencies: @@ -359,19 +436,19 @@ packages: - supports-color dev: true - /@babel/helper-optimise-call-expression/7.18.6: + /@babel/helper-optimise-call-expression@7.18.6: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.7 dev: true - /@babel/helper-plugin-utils/7.20.2: + /@babel/helper-plugin-utils@7.20.2: resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.20.12: + /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -386,7 +463,7 @@ packages: - supports-color dev: true - /@babel/helper-replace-supers/7.20.7: + /@babel/helper-replace-supers@7.20.7: resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==} engines: {node: '>=6.9.0'} dependencies: @@ -400,43 +477,43 @@ packages: - supports-color dev: true - /@babel/helper-simple-access/7.20.2: + /@babel/helper-simple-access@7.20.2: resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.7 dev: true - /@babel/helper-skip-transparent-expression-wrappers/7.20.0: + /@babel/helper-skip-transparent-expression-wrappers@7.20.0: resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.7 dev: true - /@babel/helper-split-export-declaration/7.18.6: + /@babel/helper-split-export-declaration@7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.7 dev: true - /@babel/helper-string-parser/7.19.4: + /@babel/helper-string-parser@7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-identifier/7.19.1: + /@babel/helper-validator-identifier@7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option/7.18.6: + /@babel/helper-validator-option@7.18.6: resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-wrap-function/7.20.5: + /@babel/helper-wrap-function@7.20.5: resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} engines: {node: '>=6.9.0'} dependencies: @@ -448,7 +525,7 @@ packages: - supports-color dev: true - /@babel/helpers/7.20.13: + /@babel/helpers@7.20.13: resolution: {integrity: sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==} engines: {node: '>=6.9.0'} dependencies: @@ -459,7 +536,7 @@ packages: - supports-color dev: true - /@babel/highlight/7.18.6: + /@babel/highlight@7.18.6: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} dependencies: @@ -468,7 +545,7 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser/7.20.15: + /@babel/parser@7.20.15: resolution: {integrity: sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==} engines: {node: '>=6.0.0'} hasBin: true @@ -476,7 +553,7 @@ packages: '@babel/types': 7.20.7 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.20.12: + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -486,7 +563,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.20.12: + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -495,10 +572,10 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-proposal-optional-chaining': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-proposal-optional-chaining': 7.20.7(@babel/core@7.20.12) dev: true - /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.20.12: + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -507,40 +584,40 @@ packages: '@babel/core': 7.20.12 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12 + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.20.12) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.20.12) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/helper-create-class-features-plugin': 7.20.12(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-static-block/7.20.7_@babel+core@7.20.12: + /@babel/plugin-proposal-class-static-block@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/helper-create-class-features-plugin': 7.20.12(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.12 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.20.12) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -548,10 +625,10 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.20.12) dev: true - /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.20.12: + /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -559,10 +636,10 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.20.12) dev: true - /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -570,10 +647,10 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.20.12) dev: true - /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.20.12: + /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} engines: {node: '>=6.9.0'} peerDependencies: @@ -581,10 +658,10 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.20.12) dev: true - /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -592,10 +669,10 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.20.12) dev: true - /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -603,10 +680,10 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.20.12) dev: true - /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.20.12: + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -614,13 +691,13 @@ packages: dependencies: '@babel/compat-data': 7.20.14 '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-transform-parameters': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-transform-parameters': 7.20.7(@babel/core@7.20.12) dev: true - /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -628,10 +705,10 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.20.12) dev: true - /@babel/plugin-proposal-optional-chaining/7.20.7_@babel+core@7.20.12: + /@babel/plugin-proposal-optional-chaining@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -640,23 +717,23 @@ packages: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.20.12) dev: true - /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/helper-create-class-features-plugin': 7.20.12(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object/7.20.5_@babel+core@7.20.12: + /@babel/plugin-proposal-private-property-in-object@7.20.5(@babel/core@7.20.12): resolution: {integrity: sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -664,25 +741,25 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/helper-create-class-features-plugin': 7.20.12(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.12 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.20.12) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.12 + '@babel/helper-create-regexp-features-plugin': 7.20.5(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.20.12: + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.20.12): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -691,7 +768,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.20.12): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -700,7 +777,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.20.12: + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.20.12): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -709,7 +786,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.20.12: + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.20.12): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -719,7 +796,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.20.12): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -728,7 +805,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.20.12): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -737,7 +814,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.20.12: + /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.20.12): resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -747,7 +824,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.20.12: + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.20.12): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -756,7 +833,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.20.12): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -765,7 +842,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.12: + /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -775,7 +852,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.20.12: + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.20.12): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -784,7 +861,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.20.12): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -793,7 +870,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.20.12: + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.20.12): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -802,7 +879,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.20.12): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -811,7 +888,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.20.12): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -820,7 +897,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.20.12): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -829,7 +906,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.20.12: + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.20.12): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -839,7 +916,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.20.12: + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.20.12): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -849,7 +926,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.12: + /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.20.12): resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -859,7 +936,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -869,7 +946,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -878,12 +955,12 @@ packages: '@babel/core': 7.20.12 '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.12 + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.20.12) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -893,7 +970,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-block-scoping/7.20.15_@babel+core@7.20.12: + /@babel/plugin-transform-block-scoping@7.20.15(@babel/core@7.20.12): resolution: {integrity: sha512-Vv4DMZ6MiNOhu/LdaZsT/bsLRxgL94d269Mv4R/9sp6+Mp++X/JqypZYypJXLlM4mlL352/Egzbzr98iABH1CA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -903,7 +980,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-classes/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-classes@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -911,7 +988,7 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.20.12) '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 '@babel/helper-optimise-call-expression': 7.18.6 @@ -923,7 +1000,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -934,7 +1011,7 @@ packages: '@babel/template': 7.20.7 dev: true - /@babel/plugin-transform-destructuring/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-destructuring@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -944,18 +1021,18 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.12 + '@babel/helper-create-regexp-features-plugin': 7.20.5(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.20.12: + /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -965,7 +1042,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -976,7 +1053,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.20.12: + /@babel/plugin-transform-for-of@7.18.8(@babel/core@7.20.12): resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -986,19 +1063,19 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.20.12: + /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.20.12) '@babel/helper-function-name': 7.19.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-literals/7.18.9_@babel+core@7.20.12: + /@babel/plugin-transform-literals@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1008,7 +1085,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1018,7 +1095,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.20.12: + /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.20.12): resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1031,7 +1108,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-commonjs/7.20.11_@babel+core@7.20.12: + /@babel/plugin-transform-modules-commonjs@7.20.11(@babel/core@7.20.12): resolution: {integrity: sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1045,7 +1122,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.20.12: + /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.20.12): resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1060,7 +1137,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1073,18 +1150,18 @@ packages: - supports-color dev: true - /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.20.12: + /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.20.12): resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.12 + '@babel/helper-create-regexp-features-plugin': 7.20.5(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1094,7 +1171,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1107,7 +1184,7 @@ packages: - supports-color dev: true - /@babel/plugin-transform-parameters/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-parameters@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1117,7 +1194,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1127,7 +1204,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.20.12: + /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.20.12): resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1138,7 +1215,7 @@ packages: regenerator-transform: 0.15.1 dev: true - /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1148,7 +1225,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1158,7 +1235,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-spread/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-spread@7.20.7(@babel/core@7.20.12): resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1169,7 +1246,7 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 dev: true - /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1179,7 +1256,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.20.12: + /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1189,7 +1266,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.20.12: + /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.20.12): resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1199,7 +1276,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.20.12: + /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.20.12): resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1209,18 +1286,18 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.12 + '@babel/helper-create-regexp-features-plugin': 7.20.5(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/preset-env/7.20.2_@babel+core@7.20.12: + /@babel/preset-env@7.20.2(@babel/core@7.20.12): resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1228,109 +1305,109 @@ packages: dependencies: '@babel/compat-data': 7.20.14 '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-option': 7.18.6 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-class-static-block': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-optional-chaining': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-private-property-in-object': 7.20.5_@babel+core@7.20.12 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.12 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.12 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.20.12 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.12 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.12 - '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-block-scoping': 7.20.15_@babel+core@7.20.12 - '@babel/plugin-transform-classes': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-computed-properties': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-destructuring': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.20.12 - '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.20.12 - '@babel/plugin-transform-modules-commonjs': 7.20.11_@babel+core@7.20.12 - '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.20.12 - '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.20.12 - '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-parameters': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-regenerator': 7.20.5_@babel+core@7.20.12 - '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.20.12 - '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.20.12 - '@babel/preset-modules': 0.1.5_@babel+core@7.20.12 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.20.12) + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.20.12) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-proposal-class-static-block': 7.20.7(@babel/core@7.20.12) + '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.20.12) + '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.20.12) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.20.12) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-proposal-optional-chaining': 7.20.7(@babel/core@7.20.12) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-proposal-private-property-in-object': 7.20.5(@babel/core@7.20.12) + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.20.12) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.20.12) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.20.12) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.20.12) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.20.12) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.20.12) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.20.12) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.20.12) + '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.20.12) + '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.20.12) + '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-transform-block-scoping': 7.20.15(@babel/core@7.20.12) + '@babel/plugin-transform-classes': 7.20.7(@babel/core@7.20.12) + '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.20.12) + '@babel/plugin-transform-destructuring': 7.20.7(@babel/core@7.20.12) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.20.12) + '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-transform-for-of': 7.18.8(@babel/core@7.20.12) + '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.20.12) + '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.20.12) + '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.20.12) + '@babel/plugin-transform-modules-commonjs': 7.20.11(@babel/core@7.20.12) + '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.20.12) + '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.20.12) + '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-transform-parameters': 7.20.7(@babel/core@7.20.12) + '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.20.12) + '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.20.12) + '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.20.12) + '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.20.12) + '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.20.12) + '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.20.12) + '@babel/preset-modules': 0.1.5(@babel/core@7.20.12) '@babel/types': 7.20.7 - babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.12 - babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.12 - babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.12 + babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.20.12) + babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.20.12) + babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.20.12) core-js-compat: 3.28.0 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules/0.1.5_@babel+core@7.20.12: + /@babel/preset-modules@0.1.5(@babel/core@7.20.12): resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.20.12) '@babel/types': 7.20.7 esutils: 2.0.3 dev: true - /@babel/regjsgen/0.8.0: + /@babel/regjsgen@0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: true - /@babel/runtime/7.20.13: + /@babel/runtime@7.20.13: resolution: {integrity: sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 dev: true - /@babel/template/7.20.7: + /@babel/template@7.20.7: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} dependencies: @@ -1339,7 +1416,7 @@ packages: '@babel/types': 7.20.7 dev: true - /@babel/traverse/7.20.13: + /@babel/traverse@7.20.13: resolution: {integrity: sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==} engines: {node: '>=6.9.0'} dependencies: @@ -1351,13 +1428,13 @@ packages: '@babel/helper-split-export-declaration': 7.18.6 '@babel/parser': 7.20.15 '@babel/types': 7.20.7 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types/7.20.7: + /@babel/types@7.20.7: resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} engines: {node: '>=6.9.0'} dependencies: @@ -1366,36 +1443,36 @@ packages: to-fast-properties: 2.0.0 dev: true - /@bcoe/v8-coverage/0.2.3: + /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /@bundled-es-modules/cookie/2.0.0: + /@bundled-es-modules/cookie@2.0.0: resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==} dependencies: cookie: 0.5.0 dev: false - /@bundled-es-modules/js-levenshtein/2.0.1: + /@bundled-es-modules/js-levenshtein@2.0.1: resolution: {integrity: sha512-DERMS3yfbAljKsQc0U2wcqGKUWpdFjwqWuoMugEJlqBnKO180/n+4SR/J8MRDt1AN48X1ovgoD9KrdVXcaa3Rg==} dependencies: js-levenshtein: 1.1.6 dev: false - /@bundled-es-modules/statuses/1.0.1: + /@bundled-es-modules/statuses@1.0.1: resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} dependencies: statuses: 2.0.1 dev: false - /@commitlint/cli/16.3.0_@swc+core@1.3.35: + /@commitlint/cli@16.3.0(@swc/core@1.3.35): resolution: {integrity: sha512-P+kvONlfsuTMnxSwWE1H+ZcPMY3STFaHb2kAacsqoIkNx66O0T7sTpBxpxkMrFPyhkJiLJnJWMhk4bbvYD3BMA==} engines: {node: '>=v12'} hasBin: true dependencies: '@commitlint/format': 16.2.1 '@commitlint/lint': 16.2.4 - '@commitlint/load': 16.3.0_@swc+core@1.3.35 + '@commitlint/load': 16.3.0(@swc/core@1.3.35) '@commitlint/read': 16.2.1 '@commitlint/types': 16.2.1 lodash: 4.17.21 @@ -1407,14 +1484,14 @@ packages: - '@swc/wasm' dev: true - /@commitlint/config-conventional/16.2.4: + /@commitlint/config-conventional@16.2.4: resolution: {integrity: sha512-av2UQJa3CuE5P0dzxj/o/B9XVALqYzEViHrMXtDrW9iuflrqCStWBAioijppj9URyz6ONpohJKAtSdgAOE0gkA==} engines: {node: '>=v12'} dependencies: conventional-changelog-conventionalcommits: 4.6.3 dev: true - /@commitlint/config-validator/16.2.1: + /@commitlint/config-validator@16.2.1: resolution: {integrity: sha512-hogSe0WGg7CKmp4IfNbdNES3Rq3UEI4XRPB8JL4EPgo/ORq5nrGTVzxJh78omibNuB8Ho4501Czb1Er1MoDWpw==} engines: {node: '>=v12'} dependencies: @@ -1422,16 +1499,17 @@ packages: ajv: 6.12.6 dev: true - /@commitlint/config-validator/17.4.4: + /@commitlint/config-validator@17.4.4: resolution: {integrity: sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==} engines: {node: '>=v14'} + requiresBuild: true dependencies: '@commitlint/types': 17.4.4 ajv: 8.12.0 dev: true optional: true - /@commitlint/ensure/16.2.1: + /@commitlint/ensure@16.2.1: resolution: {integrity: sha512-/h+lBTgf1r5fhbDNHOViLuej38i3rZqTQnBTk+xEg+ehOwQDXUuissQ5GsYXXqI5uGy+261ew++sT4EA3uBJ+A==} engines: {node: '>=v12'} dependencies: @@ -1439,18 +1517,19 @@ packages: lodash: 4.17.21 dev: true - /@commitlint/execute-rule/16.2.1: + /@commitlint/execute-rule@16.2.1: resolution: {integrity: sha512-oSls82fmUTLM6cl5V3epdVo4gHhbmBFvCvQGHBRdQ50H/690Uq1Dyd7hXMuKITCIdcnr9umyDkr8r5C6HZDF3g==} engines: {node: '>=v12'} dev: true - /@commitlint/execute-rule/17.4.0: + /@commitlint/execute-rule@17.4.0: resolution: {integrity: sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==} engines: {node: '>=v14'} + requiresBuild: true dev: true optional: true - /@commitlint/format/16.2.1: + /@commitlint/format@16.2.1: resolution: {integrity: sha512-Yyio9bdHWmNDRlEJrxHKglamIk3d6hC0NkEUW6Ti6ipEh2g0BAhy8Od6t4vLhdZRa1I2n+gY13foy+tUgk0i1Q==} engines: {node: '>=v12'} dependencies: @@ -1458,7 +1537,7 @@ packages: chalk: 4.1.2 dev: true - /@commitlint/is-ignored/16.2.4: + /@commitlint/is-ignored@16.2.4: resolution: {integrity: sha512-Lxdq9aOAYCOOOjKi58ulbwK/oBiiKz+7Sq0+/SpFIEFwhHkIVugvDvWjh2VRBXmRC/x5lNcjDcYEwS/uYUvlYQ==} engines: {node: '>=v12'} dependencies: @@ -1466,7 +1545,7 @@ packages: semver: 7.3.7 dev: true - /@commitlint/lint/16.2.4: + /@commitlint/lint@16.2.4: resolution: {integrity: sha512-AUDuwOxb2eGqsXbTMON3imUGkc1jRdtXrbbohiLSCSk3jFVXgJLTMaEcr39pR00N8nE9uZ+V2sYaiILByZVmxQ==} engines: {node: '>=v12'} dependencies: @@ -1476,7 +1555,7 @@ packages: '@commitlint/types': 16.2.1 dev: true - /@commitlint/load/16.3.0_@swc+core@1.3.35: + /@commitlint/load@16.3.0(@swc/core@1.3.35): resolution: {integrity: sha512-3tykjV/iwbkv2FU9DG+NZ/JqmP0Nm3b7aDwgCNQhhKV5P74JAuByULkafnhn+zsFGypG1qMtI5u+BZoa9APm0A==} engines: {node: '>=v12'} dependencies: @@ -1487,7 +1566,7 @@ packages: '@types/node': 18.16.16 chalk: 4.1.2 cosmiconfig: 7.1.0 - cosmiconfig-typescript-loader: 2.0.2_e3mldq4edkmsxtnlaee6ja5nty + cosmiconfig-typescript-loader: 2.0.2(@swc/core@1.3.35)(@types/node@18.16.16)(cosmiconfig@7.1.0)(typescript@4.9.5) lodash: 4.17.21 resolve-from: 5.0.0 typescript: 4.9.5 @@ -1496,7 +1575,7 @@ packages: - '@swc/wasm' dev: true - /@commitlint/load/17.4.4_@swc+core@1.3.35: + /@commitlint/load@17.4.4(@swc/core@1.3.35): resolution: {integrity: sha512-z6uFIQ7wfKX5FGBe1AkOF4l/ShOQsaa1ml/nLMkbW7R/xF8galGS7Zh0yHvzVp/srtfS0brC+0bUfQfmpMPFVQ==} engines: {node: '>=v14'} requiresBuild: true @@ -1508,12 +1587,12 @@ packages: '@types/node': 18.16.16 chalk: 4.1.2 cosmiconfig: 8.0.0 - cosmiconfig-typescript-loader: 4.3.0_eosbvqlsep633ytzoa7bmtacpi + cosmiconfig-typescript-loader: 4.3.0(@types/node@18.16.16)(cosmiconfig@8.0.0)(ts-node@10.9.1)(typescript@4.9.5) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.1_e3mldq4edkmsxtnlaee6ja5nty + ts-node: 10.9.1(@swc/core@1.3.35)(@types/node@18.16.16)(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - '@swc/core' @@ -1521,12 +1600,12 @@ packages: dev: true optional: true - /@commitlint/message/16.2.1: + /@commitlint/message@16.2.1: resolution: {integrity: sha512-2eWX/47rftViYg7a3axYDdrgwKv32mxbycBJT6OQY/MJM7SUfYNYYvbMFOQFaA4xIVZt7t2Alyqslbl6blVwWw==} engines: {node: '>=v12'} dev: true - /@commitlint/parse/16.2.1: + /@commitlint/parse@16.2.1: resolution: {integrity: sha512-2NP2dDQNL378VZYioLrgGVZhWdnJO4nAxQl5LXwYb08nEcN+cgxHN1dJV8OLJ5uxlGJtDeR8UZZ1mnQ1gSAD/g==} engines: {node: '>=v12'} dependencies: @@ -1535,7 +1614,7 @@ packages: conventional-commits-parser: 3.2.4 dev: true - /@commitlint/read/16.2.1: + /@commitlint/read@16.2.1: resolution: {integrity: sha512-tViXGuaxLTrw2r7PiYMQOFA2fueZxnnt0lkOWqKyxT+n2XdEMGYcI9ID5ndJKXnfPGPppD0w/IItKsIXlZ+alw==} engines: {node: '>=v12'} dependencies: @@ -1545,7 +1624,7 @@ packages: git-raw-commits: 2.0.11 dev: true - /@commitlint/resolve-extends/16.2.1: + /@commitlint/resolve-extends@16.2.1: resolution: {integrity: sha512-NbbCMPKTFf2J805kwfP9EO+vV+XvnaHRcBy6ud5dF35dxMsvdJqke54W3XazXF1ZAxC4a3LBy4i/GNVBAthsEg==} engines: {node: '>=v12'} dependencies: @@ -1557,9 +1636,10 @@ packages: resolve-global: 1.0.0 dev: true - /@commitlint/resolve-extends/17.4.4: + /@commitlint/resolve-extends@17.4.4: resolution: {integrity: sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==} engines: {node: '>=v14'} + requiresBuild: true dependencies: '@commitlint/config-validator': 17.4.4 '@commitlint/types': 17.4.4 @@ -1570,7 +1650,7 @@ packages: dev: true optional: true - /@commitlint/rules/16.2.4: + /@commitlint/rules@16.2.4: resolution: {integrity: sha512-rK5rNBIN2ZQNQK+I6trRPK3dWa0MtaTN4xnwOma1qxa4d5wQMQJtScwTZjTJeallFxhOgbNOgr48AMHkdounVg==} engines: {node: '>=v12'} dependencies: @@ -1581,77 +1661,78 @@ packages: execa: 5.1.1 dev: true - /@commitlint/to-lines/16.2.1: + /@commitlint/to-lines@16.2.1: resolution: {integrity: sha512-9/VjpYj5j1QeY3eiog1zQWY6axsdWAc0AonUUfyZ7B0MVcRI0R56YsHAfzF6uK/g/WwPZaoe4Lb1QCyDVnpVaQ==} engines: {node: '>=v12'} dev: true - /@commitlint/top-level/16.2.1: + /@commitlint/top-level@16.2.1: resolution: {integrity: sha512-lS6GSieHW9y6ePL73ied71Z9bOKyK+Ib9hTkRsB8oZFAyQZcyRwq2w6nIa6Fngir1QW51oKzzaXfJL94qwImyw==} engines: {node: '>=v12'} dependencies: find-up: 5.0.0 dev: true - /@commitlint/types/16.2.1: + /@commitlint/types@16.2.1: resolution: {integrity: sha512-7/z7pA7BM0i8XvMSBynO7xsB3mVQPUZbVn6zMIlp/a091XJ3qAXRXc+HwLYhiIdzzS5fuxxNIHZMGHVD4HJxdA==} engines: {node: '>=v12'} dependencies: chalk: 4.1.2 dev: true - /@commitlint/types/17.4.4: + /@commitlint/types@17.4.4: resolution: {integrity: sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==} engines: {node: '>=v14'} + requiresBuild: true dependencies: chalk: 4.1.2 dev: true optional: true - /@cspotcode/source-map-support/0.8.1: + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@esbuild/android-arm/0.16.17: - resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} + /@esbuild/android-arm64@0.16.17: + resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-arm/0.17.19: - resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} + /@esbuild/android-arm64@0.17.19: + resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-arm64/0.16.17: - resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} + /@esbuild/android-arm@0.16.17: + resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-arm64/0.17.19: - resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} + /@esbuild/android-arm@0.17.19: + resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@esbuild/android-x64/0.16.17: + /@esbuild/android-x64@0.16.17: resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} engines: {node: '>=12'} cpu: [x64] @@ -1660,7 +1741,7 @@ packages: dev: true optional: true - /@esbuild/android-x64/0.17.19: + /@esbuild/android-x64@0.17.19: resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} engines: {node: '>=12'} cpu: [x64] @@ -1669,7 +1750,7 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64/0.16.17: + /@esbuild/darwin-arm64@0.16.17: resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} engines: {node: '>=12'} cpu: [arm64] @@ -1678,7 +1759,7 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64/0.17.19: + /@esbuild/darwin-arm64@0.17.19: resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} engines: {node: '>=12'} cpu: [arm64] @@ -1687,7 +1768,7 @@ packages: dev: true optional: true - /@esbuild/darwin-x64/0.16.17: + /@esbuild/darwin-x64@0.16.17: resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} engines: {node: '>=12'} cpu: [x64] @@ -1696,7 +1777,7 @@ packages: dev: true optional: true - /@esbuild/darwin-x64/0.17.19: + /@esbuild/darwin-x64@0.17.19: resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} engines: {node: '>=12'} cpu: [x64] @@ -1705,7 +1786,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64/0.16.17: + /@esbuild/freebsd-arm64@0.16.17: resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} engines: {node: '>=12'} cpu: [arm64] @@ -1714,7 +1795,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64/0.17.19: + /@esbuild/freebsd-arm64@0.17.19: resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} engines: {node: '>=12'} cpu: [arm64] @@ -1723,7 +1804,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64/0.16.17: + /@esbuild/freebsd-x64@0.16.17: resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} engines: {node: '>=12'} cpu: [x64] @@ -1732,7 +1813,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64/0.17.19: + /@esbuild/freebsd-x64@0.17.19: resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} engines: {node: '>=12'} cpu: [x64] @@ -1741,43 +1822,43 @@ packages: dev: true optional: true - /@esbuild/linux-arm/0.16.17: - resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} + /@esbuild/linux-arm64@0.16.17: + resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-arm/0.17.19: - resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} + /@esbuild/linux-arm64@0.17.19: + resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-arm64/0.16.17: - resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} + /@esbuild/linux-arm@0.16.17: + resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-arm64/0.17.19: - resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} + /@esbuild/linux-arm@0.17.19: + resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@esbuild/linux-ia32/0.16.17: + /@esbuild/linux-ia32@0.16.17: resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} engines: {node: '>=12'} cpu: [ia32] @@ -1786,7 +1867,7 @@ packages: dev: true optional: true - /@esbuild/linux-ia32/0.17.19: + /@esbuild/linux-ia32@0.17.19: resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} engines: {node: '>=12'} cpu: [ia32] @@ -1795,7 +1876,7 @@ packages: dev: true optional: true - /@esbuild/linux-loong64/0.16.17: + /@esbuild/linux-loong64@0.16.17: resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==} engines: {node: '>=12'} cpu: [loong64] @@ -1804,7 +1885,7 @@ packages: dev: true optional: true - /@esbuild/linux-loong64/0.17.19: + /@esbuild/linux-loong64@0.17.19: resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} engines: {node: '>=12'} cpu: [loong64] @@ -1813,7 +1894,7 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el/0.16.17: + /@esbuild/linux-mips64el@0.16.17: resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} engines: {node: '>=12'} cpu: [mips64el] @@ -1822,7 +1903,7 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el/0.17.19: + /@esbuild/linux-mips64el@0.17.19: resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} engines: {node: '>=12'} cpu: [mips64el] @@ -1831,7 +1912,7 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64/0.16.17: + /@esbuild/linux-ppc64@0.16.17: resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} engines: {node: '>=12'} cpu: [ppc64] @@ -1840,7 +1921,7 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64/0.17.19: + /@esbuild/linux-ppc64@0.17.19: resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} engines: {node: '>=12'} cpu: [ppc64] @@ -1849,7 +1930,7 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64/0.16.17: + /@esbuild/linux-riscv64@0.16.17: resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} engines: {node: '>=12'} cpu: [riscv64] @@ -1858,7 +1939,7 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64/0.17.19: + /@esbuild/linux-riscv64@0.17.19: resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} engines: {node: '>=12'} cpu: [riscv64] @@ -1867,7 +1948,7 @@ packages: dev: true optional: true - /@esbuild/linux-s390x/0.16.17: + /@esbuild/linux-s390x@0.16.17: resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} engines: {node: '>=12'} cpu: [s390x] @@ -1876,7 +1957,7 @@ packages: dev: true optional: true - /@esbuild/linux-s390x/0.17.19: + /@esbuild/linux-s390x@0.17.19: resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} engines: {node: '>=12'} cpu: [s390x] @@ -1885,7 +1966,7 @@ packages: dev: true optional: true - /@esbuild/linux-x64/0.16.17: + /@esbuild/linux-x64@0.16.17: resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} engines: {node: '>=12'} cpu: [x64] @@ -1894,7 +1975,7 @@ packages: dev: true optional: true - /@esbuild/linux-x64/0.17.19: + /@esbuild/linux-x64@0.17.19: resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} engines: {node: '>=12'} cpu: [x64] @@ -1903,7 +1984,7 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64/0.16.17: + /@esbuild/netbsd-x64@0.16.17: resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} engines: {node: '>=12'} cpu: [x64] @@ -1912,7 +1993,7 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64/0.17.19: + /@esbuild/netbsd-x64@0.17.19: resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} engines: {node: '>=12'} cpu: [x64] @@ -1921,7 +2002,7 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64/0.16.17: + /@esbuild/openbsd-x64@0.16.17: resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} engines: {node: '>=12'} cpu: [x64] @@ -1930,7 +2011,7 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64/0.17.19: + /@esbuild/openbsd-x64@0.17.19: resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} engines: {node: '>=12'} cpu: [x64] @@ -1939,7 +2020,7 @@ packages: dev: true optional: true - /@esbuild/sunos-x64/0.16.17: + /@esbuild/sunos-x64@0.16.17: resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} engines: {node: '>=12'} cpu: [x64] @@ -1948,7 +2029,7 @@ packages: dev: true optional: true - /@esbuild/sunos-x64/0.17.19: + /@esbuild/sunos-x64@0.17.19: resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} engines: {node: '>=12'} cpu: [x64] @@ -1957,7 +2038,7 @@ packages: dev: true optional: true - /@esbuild/win32-arm64/0.16.17: + /@esbuild/win32-arm64@0.16.17: resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} engines: {node: '>=12'} cpu: [arm64] @@ -1966,7 +2047,7 @@ packages: dev: true optional: true - /@esbuild/win32-arm64/0.17.19: + /@esbuild/win32-arm64@0.17.19: resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} engines: {node: '>=12'} cpu: [arm64] @@ -1975,7 +2056,7 @@ packages: dev: true optional: true - /@esbuild/win32-ia32/0.16.17: + /@esbuild/win32-ia32@0.16.17: resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} engines: {node: '>=12'} cpu: [ia32] @@ -1984,7 +2065,7 @@ packages: dev: true optional: true - /@esbuild/win32-ia32/0.17.19: + /@esbuild/win32-ia32@0.17.19: resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} engines: {node: '>=12'} cpu: [ia32] @@ -1993,7 +2074,7 @@ packages: dev: true optional: true - /@esbuild/win32-x64/0.16.17: + /@esbuild/win32-x64@0.16.17: resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} engines: {node: '>=12'} cpu: [x64] @@ -2002,7 +2083,7 @@ packages: dev: true optional: true - /@esbuild/win32-x64/0.17.19: + /@esbuild/win32-x64@0.17.19: resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} engines: {node: '>=12'} cpu: [x64] @@ -2011,12 +2092,12 @@ packages: dev: true optional: true - /@eslint/eslintrc/0.4.3: + /@eslint/eslintrc@0.4.3: resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) espree: 7.3.1 globals: 13.20.0 ignore: 4.0.6 @@ -2028,22 +2109,22 @@ packages: - supports-color dev: true - /@humanwhocodes/config-array/0.5.0: + /@humanwhocodes/config-array@0.5.0: resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color dev: true - /@humanwhocodes/object-schema/1.2.1: + /@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@istanbuljs/load-nyc-config/1.1.0: + /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} dependencies: @@ -2054,12 +2135,12 @@ packages: resolve-from: 5.0.0 dev: true - /@istanbuljs/schema/0.1.3: + /@istanbuljs/schema@0.1.3: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} dev: true - /@jest/console/29.4.3: + /@jest/console@29.4.3: resolution: {integrity: sha512-W/o/34+wQuXlgqlPYTansOSiBnuxrTv61dEVkA6HNmpcgHLUjfaUbdqt6oVvOzaawwo9IdW9QOtMgQ1ScSZC4A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2071,7 +2152,7 @@ packages: slash: 3.0.0 dev: true - /@jest/core/29.4.3_ts-node@10.9.1: + /@jest/core@29.4.3(ts-node@10.9.1): resolution: {integrity: sha512-56QvBq60fS4SPZCuM7T+7scNrkGIe7Mr6PVIXUpu48ouvRaWOFqRPV91eifvFM0ay2HmfswXiGf97NGUN5KofQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2092,7 +2173,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.10 jest-changed-files: 29.4.3 - jest-config: 29.4.3_u3tjahz4lx2ow4rgesw7wigoy4 + jest-config: 29.4.3(@types/node@18.16.16)(ts-node@10.9.1) jest-haste-map: 29.4.3 jest-message-util: 29.4.3 jest-regex-util: 29.4.3 @@ -2113,14 +2194,14 @@ packages: - ts-node dev: true - /@jest/create-cache-key-function/27.5.1: + /@jest/create-cache-key-function@27.5.1: resolution: {integrity: sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 dev: true - /@jest/environment/29.4.3: + /@jest/environment@29.4.3: resolution: {integrity: sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2130,14 +2211,14 @@ packages: jest-mock: 29.4.3 dev: true - /@jest/expect-utils/29.4.3: + /@jest/expect-utils@29.4.3: resolution: {integrity: sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.3 dev: true - /@jest/expect/29.4.3: + /@jest/expect@29.4.3: resolution: {integrity: sha512-iktRU/YsxEtumI9zsPctYUk7ptpC+AVLLk1Ax3AsA4g1C+8OOnKDkIQBDHtD5hA/+VtgMd5AWI5gNlcAlt2vxQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2147,7 +2228,7 @@ packages: - supports-color dev: true - /@jest/fake-timers/29.4.3: + /@jest/fake-timers@29.4.3: resolution: {integrity: sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2159,7 +2240,7 @@ packages: jest-util: 29.4.3 dev: true - /@jest/globals/29.4.3: + /@jest/globals@29.4.3: resolution: {integrity: sha512-8BQ/5EzfOLG7AaMcDh7yFCbfRLtsc+09E1RQmRBI4D6QQk4m6NSK/MXo+3bJrBN0yU8A2/VIcqhvsOLFmziioA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2171,7 +2252,7 @@ packages: - supports-color dev: true - /@jest/reporters/29.4.3: + /@jest/reporters@29.4.3: resolution: {integrity: sha512-sr2I7BmOjJhyqj9ANC6CTLsL4emMoka7HkQpcoMRlhCbQJjz2zsRzw0BDPiPyEFDXAbxKgGFYuQZiSJ1Y6YoTg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2208,14 +2289,14 @@ packages: - supports-color dev: true - /@jest/schemas/29.4.3: + /@jest/schemas@29.4.3: resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@sinclair/typebox': 0.25.23 dev: true - /@jest/source-map/29.4.3: + /@jest/source-map@29.4.3: resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2224,7 +2305,7 @@ packages: graceful-fs: 4.2.10 dev: true - /@jest/test-result/29.4.3: + /@jest/test-result@29.4.3: resolution: {integrity: sha512-Oi4u9NfBolMq9MASPwuWTlC5WvmNRwI4S8YrQg5R5Gi47DYlBe3sh7ILTqi/LGrK1XUE4XY9KZcQJTH1WJCLLA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2234,7 +2315,7 @@ packages: collect-v8-coverage: 1.0.1 dev: true - /@jest/test-sequencer/29.4.3: + /@jest/test-sequencer@29.4.3: resolution: {integrity: sha512-yi/t2nES4GB4G0mjLc0RInCq/cNr9dNwJxcGg8sslajua5Kb4kmozAc+qPLzplhBgfw1vLItbjyHzUN92UXicw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2244,7 +2325,7 @@ packages: slash: 3.0.0 dev: true - /@jest/transform/29.4.3: + /@jest/transform@29.4.3: resolution: {integrity: sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2267,7 +2348,7 @@ packages: - supports-color dev: true - /@jest/types/27.5.1: + /@jest/types@27.5.1: resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: @@ -2278,7 +2359,7 @@ packages: chalk: 4.1.2 dev: true - /@jest/types/29.4.3: + /@jest/types@29.4.3: resolution: {integrity: sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2290,7 +2371,7 @@ packages: chalk: 4.1.2 dev: true - /@jridgewell/gen-mapping/0.1.1: + /@jridgewell/gen-mapping@0.1.1: resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} engines: {node: '>=6.0.0'} dependencies: @@ -2298,7 +2379,7 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@jridgewell/gen-mapping/0.3.2: + /@jridgewell/gen-mapping@0.3.2: resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} engines: {node: '>=6.0.0'} dependencies: @@ -2307,47 +2388,47 @@ packages: '@jridgewell/trace-mapping': 0.3.17 dev: true - /@jridgewell/resolve-uri/3.1.0: + /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/set-array/1.1.2: + /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/source-map/0.3.2: + /@jridgewell/source-map@0.3.2: resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} dependencies: '@jridgewell/gen-mapping': 0.3.2 '@jridgewell/trace-mapping': 0.3.17 dev: true - /@jridgewell/sourcemap-codec/1.4.14: + /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true - /@jridgewell/trace-mapping/0.3.17: + /@jridgewell/trace-mapping@0.3.17: resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@jridgewell/trace-mapping/0.3.9: + /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@mswjs/cookies/1.0.0: + /@mswjs/cookies@1.0.0: resolution: {integrity: sha512-TdXoBdI+h/EDTsVLCX/34s4+9U0sWi92qFnIGUEikpMCSKLhBeujovyYVSoORNbYgsBH5ga7/tfxyWcEZAxiYA==} engines: {node: '>=14'} dev: false - /@mswjs/interceptors/0.23.0: + /@mswjs/interceptors@0.23.0: resolution: {integrity: sha512-JytvDa7pBbxXvCTXBYQs+0eE6MqxpqH/H4peRNY6zVAlvJ6d/hAWLHAef1D9lWN4zuIigN0VkakGOAUrX7FWLg==} engines: {node: '>=18'} dependencies: @@ -2359,7 +2440,7 @@ packages: strict-event-emitter: 0.5.0 dev: false - /@nodelib/fs.scandir/2.1.5: + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} dependencies: @@ -2367,12 +2448,12 @@ packages: run-parallel: 1.2.0 dev: true - /@nodelib/fs.stat/2.0.5: + /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} dev: true - /@nodelib/fs.walk/1.2.8: + /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} dependencies: @@ -2380,24 +2461,24 @@ packages: fastq: 1.15.0 dev: true - /@open-draft/deferred-promise/2.1.0: + /@open-draft/deferred-promise@2.1.0: resolution: {integrity: sha512-Rzd5JrXZX8zErHzgcGyngh4fmEbSHqTETdGj9rXtejlqMIgXFlyKBA7Jn1Xp0Ls0M0Y22+xHcWiEzbmdWl0BOA==} - /@open-draft/logger/0.3.0: + /@open-draft/logger@0.3.0: resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} dependencies: is-node-process: 1.2.0 outvariant: 1.4.0 dev: false - /@open-draft/test-server/0.4.2: + /@open-draft/test-server@0.4.2: resolution: {integrity: sha512-J9wbdQkPx5WKcDNtgfnXsx5ew4UJd6BZyGr89YlHeaUkOShkO2iO5QIyCCsG4qpjIvr2ZTkEYJA9ujOXXyO6Pg==} dependencies: '@types/body-parser': 1.19.2 '@types/cors': 2.8.13 '@types/express': 4.17.17 cors: 2.8.5 - express: 4.18.2 + express: 4.18.2(supports-color@6.1.0) outvariant: 1.4.0 socket.io: 4.6.0 transitivePeerDependencies: @@ -2406,10 +2487,10 @@ packages: - utf-8-validate dev: true - /@open-draft/until/2.1.0: + /@open-draft/until@2.1.0: resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - /@ossjs/release/0.5.1: + /@ossjs/release@0.5.1: resolution: {integrity: sha512-pp1VL1sOK7+E8rVRhnNvCcof0l8cN256dYLypLN0yOFqk9KxALZ9Rb5/Xft+PkHbsZyeca7SOEnuaWxAqJUt9g==} hasBin: true dependencies: @@ -2439,7 +2520,7 @@ packages: - encoding dev: true - /@playwright/test/1.30.0: + /@playwright/test@1.30.0: resolution: {integrity: sha512-SVxkQw1xvn/Wk/EvBnqWIq6NLo1AppwbYOjNLmyU0R1RoQ3rLEBtmjTnElcnz8VEtn11fptj1ECxK0tgURhajw==} engines: {node: '>=14'} hasBin: true @@ -2448,13 +2529,13 @@ packages: playwright-core: 1.30.0 dev: true - /@rollup/plugin-node-resolve/13.3.0_rollup@2.79.1: + /@rollup/plugin-node-resolve@13.3.0(rollup@2.79.1): resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==} engines: {node: '>= 10.0.0'} peerDependencies: rollup: ^2.42.0 dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.79.1 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) '@types/resolve': 1.17.1 deepmerge: 4.3.0 is-builtin-module: 3.2.1 @@ -2463,7 +2544,7 @@ packages: rollup: 2.79.1 dev: true - /@rollup/pluginutils/3.1.0_rollup@2.79.1: + /@rollup/pluginutils@3.1.0(rollup@2.79.1): resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} engines: {node: '>= 8.0.0'} peerDependencies: @@ -2475,27 +2556,27 @@ packages: rollup: 2.79.1 dev: true - /@sinclair/typebox/0.25.23: + /@sinclair/typebox@0.25.23: resolution: {integrity: sha512-VEB8ygeP42CFLWyAJhN5OklpxUliqdNEUcXb4xZ/CINqtYGTjL5ukluKdKzQ0iWdUxyQ7B0539PAUhHKrCNWSQ==} dev: true - /@sinonjs/commons/2.0.0: + /@sinonjs/commons@2.0.0: resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} dependencies: type-detect: 4.0.8 dev: true - /@sinonjs/fake-timers/10.0.2: + /@sinonjs/fake-timers@10.0.2: resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} dependencies: '@sinonjs/commons': 2.0.0 dev: true - /@socket.io/component-emitter/3.1.0: + /@socket.io/component-emitter@3.1.0: resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} dev: true - /@swc/core-darwin-arm64/1.3.35: + /@swc/core-darwin-arm64@1.3.35: resolution: {integrity: sha512-zQUFkHx4gZpu0uo2IspvPnKsz8bsdXd5bC33xwjtoAI1cpLerDyqo4v2zIahEp+FdKZjyVsLHtfJiQiA1Qka3A==} engines: {node: '>=10'} cpu: [arm64] @@ -2504,7 +2585,7 @@ packages: dev: true optional: true - /@swc/core-darwin-x64/1.3.35: + /@swc/core-darwin-x64@1.3.35: resolution: {integrity: sha512-oOSkSGWtALovaw22lNevKD434OQTPf8X+dVPvPMrJXJpJ34dWDlFWpLntoc+arvKLNZ7LQmTuk8rR1hkrAY7cw==} engines: {node: '>=10'} cpu: [x64] @@ -2513,7 +2594,7 @@ packages: dev: true optional: true - /@swc/core-linux-arm-gnueabihf/1.3.35: + /@swc/core-linux-arm-gnueabihf@1.3.35: resolution: {integrity: sha512-Yie8k00O6O8BCATS/xeKStquV4OYSskUGRDXBQVDw1FrE23PHaSeHCgg4q6iNZjJzXCOJbaTCKnYoIDn9DMf7A==} engines: {node: '>=10'} cpu: [arm] @@ -2522,7 +2603,7 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-gnu/1.3.35: + /@swc/core-linux-arm64-gnu@1.3.35: resolution: {integrity: sha512-Zlv3WHa/4x2p51HSvjUWXHfSe1Gl2prqImUZJc8NZOlj75BFzVuR0auhQ+LbwvIQ3gaA1LODX9lyS9wXL3yjxA==} engines: {node: '>=10'} cpu: [arm64] @@ -2531,7 +2612,7 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-musl/1.3.35: + /@swc/core-linux-arm64-musl@1.3.35: resolution: {integrity: sha512-u6tCYsrSyZ8U+4jLMA/O82veBfLy2aUpn51WxQaeH7wqZGy9TGSJXoO8vWxARQ6b72vjsnKDJHP4MD8hFwcctg==} engines: {node: '>=10'} cpu: [arm64] @@ -2540,7 +2621,7 @@ packages: dev: true optional: true - /@swc/core-linux-x64-gnu/1.3.35: + /@swc/core-linux-x64-gnu@1.3.35: resolution: {integrity: sha512-Dtxf2IbeH7XlNhP1Qt2/MvUPkpEbn7hhGfpSRs4ot8D3Vf5QEX4S/QtC1OsFWuciiYgHAT1Ybjt4xZic9DSkmA==} engines: {node: '>=10'} cpu: [x64] @@ -2549,7 +2630,7 @@ packages: dev: true optional: true - /@swc/core-linux-x64-musl/1.3.35: + /@swc/core-linux-x64-musl@1.3.35: resolution: {integrity: sha512-4XavNJ60GprjpTiESCu5daJUnmErixPAqDitJSMu4TV32LNIE8G00S9pDLXinDTW1rgcGtQdq1NLkNRmwwovtg==} engines: {node: '>=10'} cpu: [x64] @@ -2558,7 +2639,7 @@ packages: dev: true optional: true - /@swc/core-win32-arm64-msvc/1.3.35: + /@swc/core-win32-arm64-msvc@1.3.35: resolution: {integrity: sha512-dNGfKCUSX2M4qVyaS80Lyos0FkXyHRCvrdQ2Y4Hrg3FVokiuw3yY6fLohpUfQ5ws3n2A39dh7jGDeh34+l0sGA==} engines: {node: '>=10'} cpu: [arm64] @@ -2567,7 +2648,7 @@ packages: dev: true optional: true - /@swc/core-win32-ia32-msvc/1.3.35: + /@swc/core-win32-ia32-msvc@1.3.35: resolution: {integrity: sha512-ChuPSrDR+JBf7S7dEKPicnG8A3bM0uWPsW2vG+V2wH4iNfNxKVemESHosmYVeEZXqMpomNMvLyeHep1rjRsc0Q==} engines: {node: '>=10'} cpu: [ia32] @@ -2576,7 +2657,7 @@ packages: dev: true optional: true - /@swc/core-win32-x64-msvc/1.3.35: + /@swc/core-win32-x64-msvc@1.3.35: resolution: {integrity: sha512-/RvphT4WfuGfIK84Ha0dovdPrKB1bW/mc+dtdmhv2E3EGkNc5FoueNwYmXWRimxnU7X0X7IkcRhyKB4G5DeAmg==} engines: {node: '>=10'} cpu: [x64] @@ -2585,7 +2666,7 @@ packages: dev: true optional: true - /@swc/core/1.3.35: + /@swc/core@1.3.35: resolution: {integrity: sha512-KmiBin0XSVzJhzX19zTiCqmLslZ40Cl7zqskJcTDeIrRhfgKdiAsxzYUanJgMJIRjYtl9Kcg1V/Ip2o2wL8v3w==} engines: {node: '>=10'} requiresBuild: true @@ -2602,7 +2683,7 @@ packages: '@swc/core-win32-x64-msvc': 1.3.35 dev: true - /@swc/jest/0.2.24_@swc+core@1.3.35: + /@swc/jest@0.2.24(@swc/core@1.3.35): resolution: {integrity: sha512-fwgxQbM1wXzyKzl1+IW0aGrRvAA8k0Y3NxFhKigbPjOJ4mCKnWEcNX9HQS3gshflcxq8YKhadabGUVfdwjCr6Q==} engines: {npm: '>= 7.0.0'} peerDependencies: @@ -2613,34 +2694,34 @@ packages: jsonc-parser: 3.2.0 dev: true - /@tootallnate/once/2.0.0: + /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} dev: true - /@tsconfig/node10/1.0.9: + /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true - /@tsconfig/node12/1.0.11: + /@tsconfig/node12@1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} dev: true - /@tsconfig/node14/1.0.3: + /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} dev: true - /@tsconfig/node16/1.0.3: + /@tsconfig/node16@1.0.3: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true - /@types/accepts/1.3.5: + /@types/accepts@1.3.5: resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==} dependencies: '@types/node': 18.16.16 dev: true - /@types/babel__core/7.20.0: + /@types/babel__core@7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: '@babel/parser': 7.20.15 @@ -2650,56 +2731,56 @@ packages: '@types/babel__traverse': 7.18.3 dev: true - /@types/babel__generator/7.6.4: + /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: '@babel/types': 7.20.7 dev: true - /@types/babel__template/7.4.1: + /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: '@babel/parser': 7.20.15 '@babel/types': 7.20.7 dev: true - /@types/babel__traverse/7.18.3: + /@types/babel__traverse@7.18.3: resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: '@babel/types': 7.20.7 dev: true - /@types/body-parser/1.19.2: + /@types/body-parser@1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 '@types/node': 18.16.16 dev: true - /@types/command-line-args/5.2.0: + /@types/command-line-args@5.2.0: resolution: {integrity: sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==} dev: true - /@types/connect/3.4.35: + /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: '@types/node': 18.16.16 dev: true - /@types/content-disposition/0.5.5: + /@types/content-disposition@0.5.5: resolution: {integrity: sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==} dev: true - /@types/conventional-commits-parser/3.0.3: + /@types/conventional-commits-parser@3.0.3: resolution: {integrity: sha512-aoUKfRQYvGMH+spFpOTX9jO4nZoz9/BKp4hlHPxL3Cj2r2Xj+jEcwlXtFIyZr5uL8bh1nbWynDEYaAota+XqPg==} dependencies: '@types/node': 18.16.16 dev: true - /@types/cookie/0.4.1: + /@types/cookie@0.4.1: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} - /@types/cookies/0.7.7: + /@types/cookies@0.7.7: resolution: {integrity: sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==} dependencies: '@types/connect': 3.4.35 @@ -2708,41 +2789,41 @@ packages: '@types/node': 18.16.16 dev: true - /@types/cors/2.8.13: + /@types/cors@2.8.13: resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==} dependencies: '@types/node': 18.16.16 dev: true - /@types/debug/4.1.7: + /@types/debug@4.1.7: resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} dependencies: '@types/ms': 0.7.31 dev: true - /@types/eslint-scope/3.7.4: + /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: '@types/eslint': 8.21.1 '@types/estree': 0.0.51 dev: true - /@types/eslint/8.21.1: + /@types/eslint@8.21.1: resolution: {integrity: sha512-rc9K8ZpVjNcLs8Fp0dkozd5Pt2Apk1glO4Vgz8ix1u6yFByxfqo5Yavpy65o+93TAe24jr7v+eSBtFLvOQtCRQ==} dependencies: '@types/estree': 0.0.51 '@types/json-schema': 7.0.11 dev: true - /@types/estree/0.0.39: + /@types/estree@0.0.39: resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} dev: true - /@types/estree/0.0.51: + /@types/estree@0.0.51: resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} dev: true - /@types/express-serve-static-core/4.17.33: + /@types/express-serve-static-core@4.17.33: resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} dependencies: '@types/node': 18.16.16 @@ -2750,7 +2831,7 @@ packages: '@types/range-parser': 1.2.4 dev: true - /@types/express/4.17.17: + /@types/express@4.17.17: resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} dependencies: '@types/body-parser': 1.19.2 @@ -2759,72 +2840,72 @@ packages: '@types/serve-static': 1.15.0 dev: true - /@types/fs-extra/9.0.13: + /@types/fs-extra@9.0.13: resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} dependencies: '@types/node': 18.16.16 dev: true - /@types/glob/7.2.0: + /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 '@types/node': 18.16.16 dev: true - /@types/glob/8.1.0: + /@types/glob@8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} dependencies: '@types/minimatch': 5.1.2 '@types/node': 18.16.16 dev: true - /@types/graceful-fs/4.1.6: + /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: '@types/node': 18.16.16 dev: true - /@types/http-assert/1.5.3: + /@types/http-assert@1.5.3: resolution: {integrity: sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==} dev: true - /@types/http-errors/2.0.1: + /@types/http-errors@2.0.1: resolution: {integrity: sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==} dev: true - /@types/issue-parser/3.0.1: + /@types/issue-parser@3.0.1: resolution: {integrity: sha512-cdggbeJIxWoIB8CB57BvenONrQZcBuEf2uddxMRNIy2jgdcnSxnY71tQcNrxdqTG4VmQP5fdLLE9E+jCnMK0Fg==} dev: true - /@types/istanbul-lib-coverage/2.0.4: + /@types/istanbul-lib-coverage@2.0.4: resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} dev: true - /@types/istanbul-lib-report/3.0.0: + /@types/istanbul-lib-report@3.0.0: resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} dependencies: '@types/istanbul-lib-coverage': 2.0.4 dev: true - /@types/istanbul-reports/3.0.1: + /@types/istanbul-reports@3.0.1: resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} dependencies: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest/29.4.0: + /@types/jest@29.4.0: resolution: {integrity: sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==} dependencies: expect: 29.4.3 pretty-format: 29.4.3 dev: true - /@types/js-levenshtein/1.1.1: + /@types/js-levenshtein@1.1.1: resolution: {integrity: sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==} dev: false - /@types/jsdom/20.0.1: + /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: '@types/node': 18.16.16 @@ -2832,25 +2913,25 @@ packages: parse5: 7.1.2 dev: true - /@types/json-bigint/1.0.1: + /@types/json-bigint@1.0.1: resolution: {integrity: sha512-zpchZLNsNuzJHi6v64UBoFWAvQlPhch7XAi36FkH6tL1bbbmimIF+cS7vwkzY4u5RaSWMoflQfu+TshMPPw8uw==} dev: true - /@types/json-schema/7.0.11: + /@types/json-schema@7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true - /@types/keygrip/1.0.2: + /@types/keygrip@1.0.2: resolution: {integrity: sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==} dev: true - /@types/koa-compose/3.2.5: + /@types/koa-compose@3.2.5: resolution: {integrity: sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==} dependencies: '@types/koa': 2.13.6 dev: true - /@types/koa/2.13.6: + /@types/koa@2.13.6: resolution: {integrity: sha512-diYUfp/GqfWBAiwxHtYJ/FQYIXhlEhlyaU7lB/bWQrx4Il9lCET5UwpFy3StOAohfsxxvEQ11qIJgT1j2tfBvw==} dependencies: '@types/accepts': 1.3.5 @@ -2863,137 +2944,137 @@ packages: '@types/node': 18.16.16 dev: true - /@types/mime/3.0.1: + /@types/mime@3.0.1: resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} dev: true - /@types/minimatch/5.1.2: + /@types/minimatch@5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true - /@types/minimist/1.2.2: + /@types/minimist@1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true - /@types/ms/0.7.31: + /@types/ms@0.7.31: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} dev: true - /@types/mustache/4.2.2: + /@types/mustache@4.2.2: resolution: {integrity: sha512-MUSpfpW0yZbTgjekDbH0shMYBUD+X/uJJJMm9LXN1d5yjl5lCY1vN/eWKD6D1tOtjA6206K0zcIPnUaFMurdNA==} dev: true - /@types/node-fetch/2.6.2: + /@types/node-fetch@2.6.2: resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==} dependencies: '@types/node': 18.16.16 form-data: 3.0.1 dev: true - /@types/node/16.18.12: + /@types/node@16.18.12: resolution: {integrity: sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==} dev: true - /@types/node/18.16.16: + /@types/node@18.16.16: resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==} dev: true - /@types/normalize-package-data/2.4.1: + /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true - /@types/parse-json/4.0.0: + /@types/parse-json@4.0.0: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} dev: true - /@types/parse5/6.0.3: + /@types/parse5@6.0.3: resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} dev: true - /@types/prettier/2.7.2: + /@types/prettier@2.7.2: resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} dev: true - /@types/puppeteer/5.4.7: + /@types/puppeteer@5.4.7: resolution: {integrity: sha512-JdGWZZYL0vKapXF4oQTC5hLVNfOgdPrqeZ1BiQnGk5cB7HeE91EWUiTdVSdQPobRN8rIcdffjiOgCYJ/S8QrnQ==} dependencies: '@types/node': 18.16.16 dev: true - /@types/qs/6.9.7: + /@types/qs@6.9.7: resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} dev: true - /@types/range-parser/1.2.4: + /@types/range-parser@1.2.4: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} dev: true - /@types/rc/1.2.1: + /@types/rc@1.2.1: resolution: {integrity: sha512-+TRLFmHLnpoV0uw4O/PzqMbPT6bhQM0q2KO0l+R7M3sHYRndPpNL6kv8p7Ee9ZxgQ6noYB18/t+heQi7eijOHA==} dependencies: '@types/minimist': 1.2.2 dev: true - /@types/registry-auth-token/4.2.1: + /@types/registry-auth-token@4.2.1: resolution: {integrity: sha512-VtTUcUaJGiJtlBKYwwFIOSvrcnuKmpPGO+x56XijNZnaDpnzKh2VwoTw5hewrOMW2BgjoU+uFbVAvSCW2FpWmA==} dev: true - /@types/resolve/1.17.1: + /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: '@types/node': 18.16.16 dev: true - /@types/semver/7.3.13: + /@types/semver@7.3.13: resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} dev: true - /@types/serve-static/1.15.0: + /@types/serve-static@1.15.0: resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} dependencies: '@types/mime': 3.0.1 '@types/node': 18.16.16 dev: true - /@types/stack-utils/2.0.1: + /@types/stack-utils@2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} dev: true - /@types/statuses/2.0.1: + /@types/statuses@2.0.1: resolution: {integrity: sha512-vVRgv7WXbhIZzILgr58b4Ki2uqpN/dlVCUBWCMkPbMDlV1CrQrgCl5hnIoUlMrgymGcTmdfVqbs1yWj/IRIRtQ==} dev: false - /@types/tough-cookie/4.0.2: + /@types/tough-cookie@4.0.2: resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} dev: true - /@types/uuid/8.3.4: + /@types/uuid@8.3.4: resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} dev: true - /@types/ws/7.4.7: + /@types/ws@7.4.7: resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} dependencies: '@types/node': 18.16.16 dev: true - /@types/yargs-parser/21.0.0: + /@types/yargs-parser@21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true - /@types/yargs/16.0.5: + /@types/yargs@16.0.5: resolution: {integrity: sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==} dependencies: '@types/yargs-parser': 21.0.0 dev: true - /@types/yargs/17.0.22: + /@types/yargs@17.0.22: resolution: {integrity: sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==} dependencies: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin/5.52.0_aaw67h7nkydj3qj4plp2jqjmxe: + /@typescript-eslint/eslint-plugin@5.52.0(@typescript-eslint/parser@5.52.0)(eslint@7.32.0)(typescript@5.0.2): resolution: {integrity: sha512-lHazYdvYVsBokwCdKOppvYJKaJ4S41CgKBcPvyd0xjZNbvQdhn/pnJlGtQksQ/NhInzdaeaSarlBjDXHuclEbg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3004,24 +3085,24 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.52.0_jeuwjvsopuo23ctsjsevxmvjsi + '@typescript-eslint/parser': 5.52.0(eslint@7.32.0)(typescript@5.0.2) '@typescript-eslint/scope-manager': 5.52.0 - '@typescript-eslint/type-utils': 5.52.0_jeuwjvsopuo23ctsjsevxmvjsi - '@typescript-eslint/utils': 5.52.0_jeuwjvsopuo23ctsjsevxmvjsi - debug: 4.3.4 + '@typescript-eslint/type-utils': 5.52.0(eslint@7.32.0)(typescript@5.0.2) + '@typescript-eslint/utils': 5.52.0(eslint@7.32.0)(typescript@5.0.2) + debug: 4.3.4(supports-color@6.1.0) eslint: 7.32.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 regexpp: 3.2.0 semver: 7.3.8 - tsutils: 3.21.0_typescript@5.0.2 + tsutils: 3.21.0(typescript@5.0.2) typescript: 5.0.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser/5.52.0_jeuwjvsopuo23ctsjsevxmvjsi: + /@typescript-eslint/parser@5.52.0(eslint@7.32.0)(typescript@5.0.2): resolution: {integrity: sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3033,15 +3114,15 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.52.0 '@typescript-eslint/types': 5.52.0 - '@typescript-eslint/typescript-estree': 5.52.0_typescript@5.0.2 - debug: 4.3.4 + '@typescript-eslint/typescript-estree': 5.52.0(typescript@5.0.2) + debug: 4.3.4(supports-color@6.1.0) eslint: 7.32.0 typescript: 5.0.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager/5.52.0: + /@typescript-eslint/scope-manager@5.52.0: resolution: {integrity: sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -3049,7 +3130,7 @@ packages: '@typescript-eslint/visitor-keys': 5.52.0 dev: true - /@typescript-eslint/type-utils/5.52.0_jeuwjvsopuo23ctsjsevxmvjsi: + /@typescript-eslint/type-utils@5.52.0(eslint@7.32.0)(typescript@5.0.2): resolution: {integrity: sha512-tEKuUHfDOv852QGlpPtB3lHOoig5pyFQN/cUiZtpw99D93nEBjexRLre5sQZlkMoHry/lZr8qDAt2oAHLKA6Jw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3059,22 +3140,22 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.52.0_typescript@5.0.2 - '@typescript-eslint/utils': 5.52.0_jeuwjvsopuo23ctsjsevxmvjsi - debug: 4.3.4 + '@typescript-eslint/typescript-estree': 5.52.0(typescript@5.0.2) + '@typescript-eslint/utils': 5.52.0(eslint@7.32.0)(typescript@5.0.2) + debug: 4.3.4(supports-color@6.1.0) eslint: 7.32.0 - tsutils: 3.21.0_typescript@5.0.2 + tsutils: 3.21.0(typescript@5.0.2) typescript: 5.0.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types/5.52.0: + /@typescript-eslint/types@5.52.0: resolution: {integrity: sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.52.0_typescript@5.0.2: + /@typescript-eslint/typescript-estree@5.52.0(typescript@5.0.2): resolution: {integrity: sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3085,17 +3166,17 @@ packages: dependencies: '@typescript-eslint/types': 5.52.0 '@typescript-eslint/visitor-keys': 5.52.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) globby: 11.1.0 is-glob: 4.0.3 semver: 7.3.8 - tsutils: 3.21.0_typescript@5.0.2 + tsutils: 3.21.0(typescript@5.0.2) typescript: 5.0.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils/5.52.0_jeuwjvsopuo23ctsjsevxmvjsi: + /@typescript-eslint/utils@5.52.0(eslint@7.32.0)(typescript@5.0.2): resolution: {integrity: sha512-As3lChhrbwWQLNk2HC8Ree96hldKIqk98EYvypd3It8Q1f8d5zWyIoaZEp2va5667M4ZyE7X8UUR+azXrFl+NA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3105,17 +3186,17 @@ packages: '@types/semver': 7.3.13 '@typescript-eslint/scope-manager': 5.52.0 '@typescript-eslint/types': 5.52.0 - '@typescript-eslint/typescript-estree': 5.52.0_typescript@5.0.2 + '@typescript-eslint/typescript-estree': 5.52.0(typescript@5.0.2) eslint: 7.32.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@7.32.0 + eslint-utils: 3.0.0(eslint@7.32.0) semver: 7.3.8 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys/5.52.0: + /@typescript-eslint/visitor-keys@5.52.0: resolution: {integrity: sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -3123,14 +3204,14 @@ packages: eslint-visitor-keys: 3.3.0 dev: true - /@web/config-loader/0.1.3: + /@web/config-loader@0.1.3: resolution: {integrity: sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==} engines: {node: '>=10.0.0'} dependencies: semver: 7.3.8 dev: true - /@web/dev-server-core/0.4.1: + /@web/dev-server-core@0.4.1: resolution: {integrity: sha512-KdYwejXZwIZvb6tYMCqU7yBiEOPfKLQ3V9ezqqEz8DA9V9R3oQWaowckvCpFB9IxxPfS/P8/59OkdzGKQjcIUw==} engines: {node: '>=10.0.0'} dependencies: @@ -3158,11 +3239,11 @@ packages: - utf-8-validate dev: true - /@web/dev-server-rollup/0.4.1: + /@web/dev-server-rollup@0.4.1: resolution: {integrity: sha512-Ebsv7Ovd9MufeH3exvikBJ7GmrZA5OmHnOgaiHcwMJ2eQBJA5/I+/CbRjsLX97ICj/ZwZG//p2ITRz8W3UfSqg==} engines: {node: '>=10.0.0'} dependencies: - '@rollup/plugin-node-resolve': 13.3.0_rollup@2.79.1 + '@rollup/plugin-node-resolve': 13.3.0(rollup@2.79.1) '@web/dev-server-core': 0.4.1 nanocolors: 0.2.13 parse5: 6.0.1 @@ -3174,7 +3255,7 @@ packages: - utf-8-validate dev: true - /@web/dev-server/0.1.38: + /@web/dev-server@0.1.38: resolution: {integrity: sha512-WUq7Zi8KeJ5/UZmmpZ+kzUpUlFlMP/rcreJKYg9Lxiz998KYl4G5Rv24akX0piTuqXG7r6h+zszg8V/hdzjCoA==} engines: {node: '>=10.0.0'} hasBin: true @@ -3192,14 +3273,14 @@ packages: ip: 1.1.8 nanocolors: 0.2.13 open: 8.4.2 - portfinder: 1.0.32 + portfinder: 1.0.32(supports-color@6.1.0) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate dev: true - /@web/parse5-utils/1.3.1: + /@web/parse5-utils@1.3.1: resolution: {integrity: sha512-haCgDchZrAOB9EhBJ5XqiIjBMsS/exsM5Ru7sCSyNkXVEJWskyyKuKMFk66BonnIGMPpDtqDrTUfYEis5Zi3XA==} engines: {node: '>=10.0.0'} dependencies: @@ -3207,26 +3288,26 @@ packages: parse5: 6.0.1 dev: true - /@webassemblyjs/ast/1.11.1: + /@webassemblyjs/ast@1.11.1: resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} dependencies: '@webassemblyjs/helper-numbers': 1.11.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.1 dev: true - /@webassemblyjs/floating-point-hex-parser/1.11.1: + /@webassemblyjs/floating-point-hex-parser@1.11.1: resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==} dev: true - /@webassemblyjs/helper-api-error/1.11.1: + /@webassemblyjs/helper-api-error@1.11.1: resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==} dev: true - /@webassemblyjs/helper-buffer/1.11.1: + /@webassemblyjs/helper-buffer@1.11.1: resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==} dev: true - /@webassemblyjs/helper-numbers/1.11.1: + /@webassemblyjs/helper-numbers@1.11.1: resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==} dependencies: '@webassemblyjs/floating-point-hex-parser': 1.11.1 @@ -3234,11 +3315,11 @@ packages: '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/helper-wasm-bytecode/1.11.1: + /@webassemblyjs/helper-wasm-bytecode@1.11.1: resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==} dev: true - /@webassemblyjs/helper-wasm-section/1.11.1: + /@webassemblyjs/helper-wasm-section@1.11.1: resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3247,23 +3328,23 @@ packages: '@webassemblyjs/wasm-gen': 1.11.1 dev: true - /@webassemblyjs/ieee754/1.11.1: + /@webassemblyjs/ieee754@1.11.1: resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==} dependencies: '@xtuc/ieee754': 1.2.0 dev: true - /@webassemblyjs/leb128/1.11.1: + /@webassemblyjs/leb128@1.11.1: resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==} dependencies: '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/utf8/1.11.1: + /@webassemblyjs/utf8@1.11.1: resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==} dev: true - /@webassemblyjs/wasm-edit/1.11.1: + /@webassemblyjs/wasm-edit@1.11.1: resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3276,7 +3357,7 @@ packages: '@webassemblyjs/wast-printer': 1.11.1 dev: true - /@webassemblyjs/wasm-gen/1.11.1: + /@webassemblyjs/wasm-gen@1.11.1: resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3286,7 +3367,7 @@ packages: '@webassemblyjs/utf8': 1.11.1 dev: true - /@webassemblyjs/wasm-opt/1.11.1: + /@webassemblyjs/wasm-opt@1.11.1: resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3295,7 +3376,7 @@ packages: '@webassemblyjs/wasm-parser': 1.11.1 dev: true - /@webassemblyjs/wasm-parser/1.11.1: + /@webassemblyjs/wasm-parser@1.11.1: resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==} dependencies: '@webassemblyjs/ast': 1.11.1 @@ -3306,22 +3387,22 @@ packages: '@webassemblyjs/utf8': 1.11.1 dev: true - /@webassemblyjs/wast-printer/1.11.1: + /@webassemblyjs/wast-printer@1.11.1: resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==} dependencies: '@webassemblyjs/ast': 1.11.1 '@xtuc/long': 4.2.2 dev: true - /@xtuc/ieee754/1.2.0: + /@xtuc/ieee754@1.2.0: resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} dev: true - /@xtuc/long/4.2.2: + /@xtuc/long@4.2.2: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true - /JSONStream/1.3.5: + /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true dependencies: @@ -3329,11 +3410,11 @@ packages: through: 2.3.8 dev: true - /abab/2.0.6: + /abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} dev: true - /accepts/1.3.8: + /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} dependencies: @@ -3341,14 +3422,14 @@ packages: negotiator: 0.6.3 dev: true - /acorn-globals/7.0.1: + /acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: acorn: 8.8.2 acorn-walk: 8.2.0 dev: true - /acorn-import-assertions/1.8.0_acorn@8.8.2: + /acorn-import-assertions@1.8.0(acorn@8.8.2): resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} peerDependencies: acorn: ^8 @@ -3356,7 +3437,7 @@ packages: acorn: 8.8.2 dev: true - /acorn-jsx/5.3.2_acorn@7.4.1: + /acorn-jsx@5.3.2(acorn@7.4.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -3364,33 +3445,33 @@ packages: acorn: 7.4.1 dev: true - /acorn-walk/8.2.0: + /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} dev: true - /acorn/7.4.1: + /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /acorn/8.8.2: + /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /agent-base/6.0.2: + /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) transitivePeerDependencies: - supports-color dev: true - /aggregate-error/3.1.0: + /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} dependencies: @@ -3398,7 +3479,7 @@ packages: indent-string: 4.0.0 dev: true - /ajv-errors/1.0.1_ajv@6.12.6: + /ajv-errors@1.0.1(ajv@6.12.6): resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==} peerDependencies: ajv: '>=5.0.0' @@ -3406,7 +3487,7 @@ packages: ajv: 6.12.6 dev: true - /ajv-keywords/3.5.2_ajv@6.12.6: + /ajv-keywords@3.5.2(ajv@6.12.6): resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: ajv: ^6.9.1 @@ -3414,7 +3495,7 @@ packages: ajv: 6.12.6 dev: true - /ajv/6.12.6: + /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 @@ -3423,7 +3504,7 @@ packages: uri-js: 4.4.1 dev: true - /ajv/8.12.0: + /ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} dependencies: fast-deep-equal: 3.1.3 @@ -3432,97 +3513,98 @@ packages: uri-js: 4.4.1 dev: true - /ansi-colors/3.2.4: + /ansi-colors@3.2.4: resolution: {integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==} engines: {node: '>=6'} dev: true - /ansi-colors/4.1.3: + /ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} dev: true - /ansi-escapes/4.3.2: + /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} dependencies: type-fest: 0.21.3 - /ansi-html-community/0.0.8: + /ansi-html-community@0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} engines: {'0': node >= 0.8.0} hasBin: true dev: true - /ansi-regex/2.1.1: + /ansi-regex@2.1.1: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} engines: {node: '>=0.10.0'} dev: true - /ansi-regex/4.1.1: + /ansi-regex@4.1.1: resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} engines: {node: '>=6'} dev: true - /ansi-regex/5.0.1: + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - /ansi-regex/6.0.1: + /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} dev: true - /ansi-styles/3.2.1: + /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} dependencies: color-convert: 1.9.3 dev: true - /ansi-styles/4.3.0: + /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - /ansi-styles/5.2.0: + /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} dev: true - /ansi-styles/6.2.1: + /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} dev: true - /any-promise/1.3.0: + /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} dev: true - /anymatch/3.1.3: + /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - /arg/4.1.3: + /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true - /argparse/1.0.10: + /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 dev: true - /argparse/2.0.1: + /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + requiresBuild: true dev: true optional: true - /args/5.0.3: + /args@5.0.3: resolution: {integrity: sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==} engines: {node: '>= 6.0.0'} dependencies: @@ -3532,70 +3614,70 @@ packages: mri: 1.1.4 dev: true - /argv-formatter/1.0.0: + /argv-formatter@1.0.0: resolution: {integrity: sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==} dev: true - /arr-diff/4.0.0: + /arr-diff@4.0.0: resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} engines: {node: '>=0.10.0'} dev: true - /arr-flatten/1.1.0: + /arr-flatten@1.1.0: resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} engines: {node: '>=0.10.0'} dev: true - /arr-union/3.1.0: + /arr-union@3.1.0: resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} engines: {node: '>=0.10.0'} dev: true - /array-back/3.1.0: + /array-back@3.1.0: resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} engines: {node: '>=6'} dev: true - /array-back/6.2.2: + /array-back@6.2.2: resolution: {integrity: sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==} engines: {node: '>=12.17'} dev: true - /array-flatten/1.1.1: + /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: true - /array-flatten/2.1.2: + /array-flatten@2.1.2: resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} dev: true - /array-ify/1.0.0: + /array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} dev: true - /array-union/1.0.2: + /array-union@1.0.2: resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} engines: {node: '>=0.10.0'} dependencies: array-uniq: 1.0.3 dev: true - /array-union/2.1.0: + /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} dev: true - /array-uniq/1.0.3: + /array-uniq@1.0.3: resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} engines: {node: '>=0.10.0'} dev: true - /array-unique/0.3.2: + /array-unique@0.3.2: resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} engines: {node: '>=0.10.0'} dev: true - /array.prototype.reduce/1.0.5: + /array.prototype.reduce@1.0.5: resolution: {integrity: sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==} engines: {node: '>= 0.4'} dependencies: @@ -3606,85 +3688,85 @@ packages: is-string: 1.0.7 dev: true - /arrify/1.0.1: + /arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} dev: true - /assign-symbols/1.0.0: + /assign-symbols@1.0.0: resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} engines: {node: '>=0.10.0'} dev: true - /astral-regex/2.0.0: + /astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} dev: true - /async-limiter/1.0.1: + /async-limiter@1.0.1: resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} dev: true - /async/2.6.4: + /async@2.6.4: resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} dependencies: lodash: 4.17.21 dev: true - /asynckit/0.4.0: + /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true - /at-least-node/1.0.0: + /at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} dev: true - /atob/2.1.2: + /atob@2.1.2: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} engines: {node: '>= 4.5.0'} hasBin: true dev: true - /atomic-sleep/1.0.0: + /atomic-sleep@1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} dev: true - /available-typed-arrays/1.0.5: + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} dev: true - /babel-helper-evaluate-path/0.5.0: + /babel-helper-evaluate-path@0.5.0: resolution: {integrity: sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==} dev: true - /babel-helper-flip-expressions/0.4.3: + /babel-helper-flip-expressions@0.4.3: resolution: {integrity: sha512-rSrkRW4YQ2ETCWww9gbsWk4N0x1BOtln349Tk0dlCS90oT68WMLyGR7WvaMp3eAnsVrCqdUtC19lo1avyGPejA==} dev: true - /babel-helper-is-nodes-equiv/0.0.1: + /babel-helper-is-nodes-equiv@0.0.1: resolution: {integrity: sha512-ri/nsMFVRqXn7IyT5qW4/hIAGQxuYUFHa3qsxmPtbk6spZQcYlyDogfVpNm2XYOslH/ULS4VEJGUqQX5u7ACQw==} dev: true - /babel-helper-is-void-0/0.4.3: + /babel-helper-is-void-0@0.4.3: resolution: {integrity: sha512-07rBV0xPRM3TM5NVJEOQEkECX3qnHDjaIbFvWYPv+T1ajpUiVLiqTfC+MmiZxY5KOL/Ec08vJdJD9kZiP9UkUg==} dev: true - /babel-helper-mark-eval-scopes/0.4.3: + /babel-helper-mark-eval-scopes@0.4.3: resolution: {integrity: sha512-+d/mXPP33bhgHkdVOiPkmYoeXJ+rXRWi7OdhwpyseIqOS8CmzHQXHUp/+/Qr8baXsT0kjGpMHHofHs6C3cskdA==} dev: true - /babel-helper-remove-or-void/0.4.3: + /babel-helper-remove-or-void@0.4.3: resolution: {integrity: sha512-eYNceYtcGKpifHDir62gHJadVXdg9fAhuZEXiRQnJJ4Yi4oUTpqpNY//1pM4nVyjjDMPYaC2xSf0I+9IqVzwdA==} dev: true - /babel-helper-to-multiple-sequence-expressions/0.5.0: + /babel-helper-to-multiple-sequence-expressions@0.5.0: resolution: {integrity: sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==} dev: true - /babel-jest/29.4.3_@babel+core@7.20.12: + /babel-jest@29.4.3(@babel/core@7.20.12): resolution: {integrity: sha512-o45Wyn32svZE+LnMVWv/Z4x0SwtLbh4FyGcYtR20kIWd+rdrDZ9Fzq8Ml3MYLD+mZvEdzCjZsCnYZ2jpJyQ+Nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -3694,7 +3776,7 @@ packages: '@jest/transform': 29.4.3 '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.4.3_@babel+core@7.20.12 + babel-preset-jest: 29.4.3(@babel/core@7.20.12) chalk: 4.1.2 graceful-fs: 4.2.10 slash: 3.0.0 @@ -3702,7 +3784,7 @@ packages: - supports-color dev: true - /babel-loader/8.3.0_la66t7xldg4uecmyawueag5wkm: + /babel-loader@8.3.0(@babel/core@7.20.12)(webpack@5.75.0): resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} engines: {node: '>= 8.9'} peerDependencies: @@ -3714,10 +3796,10 @@ packages: loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.75.0_mtsvlg4x4u5udzh2pohivgt4x4 + webpack: 5.75.0(@swc/core@1.3.35)(esbuild@0.17.19) dev: true - /babel-minify/0.5.2: + /babel-minify@0.5.2: resolution: {integrity: sha512-H1ExfmvTxKWQZYcty1My6XRhoZm04/5MNb2DdZsC08r7y/rowipC0s9sszKA7jgW9mYYDdFnU68XohB+zP35qQ==} hasBin: true dependencies: @@ -3732,7 +3814,7 @@ packages: - supports-color dev: true - /babel-plugin-istanbul/6.1.1: + /babel-plugin-istanbul@6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: @@ -3745,7 +3827,7 @@ packages: - supports-color dev: true - /babel-plugin-jest-hoist/29.4.3: + /babel-plugin-jest-hoist@29.4.3: resolution: {integrity: sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3755,17 +3837,17 @@ packages: '@types/babel__traverse': 7.18.3 dev: true - /babel-plugin-minify-builtins/0.5.0: + /babel-plugin-minify-builtins@0.5.0: resolution: {integrity: sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==} dev: true - /babel-plugin-minify-constant-folding/0.5.0: + /babel-plugin-minify-constant-folding@0.5.0: resolution: {integrity: sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==} dependencies: babel-helper-evaluate-path: 0.5.0 dev: true - /babel-plugin-minify-dead-code-elimination/0.5.2: + /babel-plugin-minify-dead-code-elimination@0.5.2: resolution: {integrity: sha512-krq9Lwi0QIzyAlcNBXTL4usqUvevB4BzktdEsb8srcXC1AaYqRJiAQw6vdKdJSaXbz6snBvziGr6ch/aoRCfpA==} dependencies: babel-helper-evaluate-path: 0.5.0 @@ -3774,38 +3856,38 @@ packages: lodash: 4.17.21 dev: true - /babel-plugin-minify-flip-comparisons/0.4.3: + /babel-plugin-minify-flip-comparisons@0.4.3: resolution: {integrity: sha512-8hNwgLVeJzpeLVOVArag2DfTkbKodzOHU7+gAZ8mGBFGPQHK6uXVpg3jh5I/F6gfi5Q5usWU2OKcstn1YbAV7A==} dependencies: babel-helper-is-void-0: 0.4.3 dev: true - /babel-plugin-minify-guarded-expressions/0.4.4: + /babel-plugin-minify-guarded-expressions@0.4.4: resolution: {integrity: sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==} dependencies: babel-helper-evaluate-path: 0.5.0 babel-helper-flip-expressions: 0.4.3 dev: true - /babel-plugin-minify-infinity/0.4.3: + /babel-plugin-minify-infinity@0.4.3: resolution: {integrity: sha512-X0ictxCk8y+NvIf+bZ1HJPbVZKMlPku3lgYxPmIp62Dp8wdtbMLSekczty3MzvUOlrk5xzWYpBpQprXUjDRyMA==} dev: true - /babel-plugin-minify-mangle-names/0.5.1: + /babel-plugin-minify-mangle-names@0.5.1: resolution: {integrity: sha512-8KMichAOae2FHlipjNDTo2wz97MdEb2Q0jrn4NIRXzHH7SJ3c5TaNNBkeTHbk9WUsMnqpNUx949ugM9NFWewzw==} dependencies: babel-helper-mark-eval-scopes: 0.4.3 dev: true - /babel-plugin-minify-numeric-literals/0.4.3: + /babel-plugin-minify-numeric-literals@0.4.3: resolution: {integrity: sha512-5D54hvs9YVuCknfWywq0eaYDt7qYxlNwCqW9Ipm/kYeS9gYhJd0Rr/Pm2WhHKJ8DC6aIlDdqSBODSthabLSX3A==} dev: true - /babel-plugin-minify-replace/0.5.0: + /babel-plugin-minify-replace@0.5.0: resolution: {integrity: sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==} dev: true - /babel-plugin-minify-simplify/0.5.1: + /babel-plugin-minify-simplify@0.5.1: resolution: {integrity: sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==} dependencies: babel-helper-evaluate-path: 0.5.0 @@ -3814,117 +3896,117 @@ packages: babel-helper-to-multiple-sequence-expressions: 0.5.0 dev: true - /babel-plugin-minify-type-constructors/0.4.3: + /babel-plugin-minify-type-constructors@0.4.3: resolution: {integrity: sha512-4ADB0irJ/6BeXWHubjCJmrPbzhxDgjphBMjIjxCc25n4NGJ00NsYqwYt+F/OvE9RXx8KaSW7cJvp+iZX436tnQ==} dependencies: babel-helper-is-void-0: 0.4.3 dev: true - /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.20.12: + /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.20.12): resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.20.14 '@babel/core': 7.20.12 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.20.12) semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.20.12: + /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.20.12): resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.20.12) core-js-compat: 3.28.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.20.12: + /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.20.12): resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.20.12) transitivePeerDependencies: - supports-color dev: true - /babel-plugin-transform-inline-consecutive-adds/0.4.3: + /babel-plugin-transform-inline-consecutive-adds@0.4.3: resolution: {integrity: sha512-8D104wbzzI5RlxeVPYeQb9QsUyepiH1rAO5hpPpQ6NPRgQLpIVwkS/Nbx944pm4K8Z+rx7CgjPsFACz/VCBN0Q==} dev: true - /babel-plugin-transform-member-expression-literals/6.9.4: + /babel-plugin-transform-member-expression-literals@6.9.4: resolution: {integrity: sha512-Xq9/Rarpj+bjOZSl1nBbZYETsNEDDJSrb6Plb1sS3/36FukWFLLRysgecva5KZECjUJTrJoQqjJgtWToaflk5Q==} dev: true - /babel-plugin-transform-merge-sibling-variables/6.9.5: + /babel-plugin-transform-merge-sibling-variables@6.9.5: resolution: {integrity: sha512-xj/KrWi6/uP+DrD844h66Qh2cZN++iugEIgH8QcIxhmZZPNP6VpOE9b4gP2FFW39xDAY43kCmYMM6U0QNKN8fw==} dev: true - /babel-plugin-transform-minify-booleans/6.9.4: + /babel-plugin-transform-minify-booleans@6.9.4: resolution: {integrity: sha512-9pW9ePng6DZpzGPalcrULuhSCcauGAbn8AeU3bE34HcDkGm8Ldt0ysjGkyb64f0K3T5ilV4mriayOVv5fg0ASA==} dev: true - /babel-plugin-transform-property-literals/6.9.4: + /babel-plugin-transform-property-literals@6.9.4: resolution: {integrity: sha512-Pf8JHTjTPxecqVyL6KSwD/hxGpoTZjiEgV7nCx0KFQsJYM0nuuoCajbg09KRmZWeZbJ5NGTySABYv8b/hY1eEA==} dependencies: esutils: 2.0.3 dev: true - /babel-plugin-transform-regexp-constructors/0.4.3: + /babel-plugin-transform-regexp-constructors@0.4.3: resolution: {integrity: sha512-JjymDyEyRNhAoNFp09y/xGwYVYzT2nWTGrBrWaL6eCg2m+B24qH2jR0AA8V8GzKJTgC8NW6joJmc6nabvWBD/g==} dev: true - /babel-plugin-transform-remove-console/6.9.4: + /babel-plugin-transform-remove-console@6.9.4: resolution: {integrity: sha512-88blrUrMX3SPiGkT1GnvVY8E/7A+k6oj3MNvUtTIxJflFzXTw1bHkuJ/y039ouhFMp2prRn5cQGzokViYi1dsg==} dev: true - /babel-plugin-transform-remove-debugger/6.9.4: + /babel-plugin-transform-remove-debugger@6.9.4: resolution: {integrity: sha512-Kd+eTBYlXfwoFzisburVwrngsrz4xh9I0ppoJnU/qlLysxVBRgI4Pj+dk3X8F5tDiehp3hhP8oarRMT9v2Z3lw==} dev: true - /babel-plugin-transform-remove-undefined/0.5.0: + /babel-plugin-transform-remove-undefined@0.5.0: resolution: {integrity: sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==} dependencies: babel-helper-evaluate-path: 0.5.0 dev: true - /babel-plugin-transform-simplify-comparison-operators/6.9.4: + /babel-plugin-transform-simplify-comparison-operators@6.9.4: resolution: {integrity: sha512-GLInxhGAQWJ9YIdjwF6dAFlmh4U+kN8pL6Big7nkDzHoZcaDQOtBm28atEhQJq6m9GpAovbiGEShKqXv4BSp0A==} dev: true - /babel-plugin-transform-undefined-to-void/6.9.4: + /babel-plugin-transform-undefined-to-void@6.9.4: resolution: {integrity: sha512-D2UbwxawEY1xVc9svYAUZQM2xarwSNXue2qDIx6CeV2EuMGaes/0su78zlIDIAgE7BvnMw4UpmSo9fDy+znghg==} dev: true - /babel-preset-current-node-syntax/1.0.1_@babel+core@7.20.12: + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.20.12): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.20.12 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12 - '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.12 - '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.12 - dev: true - - /babel-preset-jest/29.4.3_@babel+core@7.20.12: + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.20.12) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.20.12) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.20.12) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.20.12) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.20.12) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.20.12) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.20.12) + dev: true + + /babel-preset-jest@29.4.3(@babel/core@7.20.12): resolution: {integrity: sha512-gWx6COtSuma6n9bw+8/F+2PCXrIgxV/D1TJFnp6OyBK2cxPWg0K9p/sriNYeifKjpUkMViWQ09DSWtzJQRETsw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -3932,10 +4014,10 @@ packages: dependencies: '@babel/core': 7.20.12 babel-plugin-jest-hoist: 29.4.3 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.20.12) dev: true - /babel-preset-minify/0.5.2: + /babel-preset-minify@0.5.2: resolution: {integrity: sha512-v4GL+kk0TfovbRIKZnC3HPbu2cAGmPAby7BsOmuPdMJfHV+4FVdsGXTH/OOGQRKYdjemBuL1+MsE6mobobhe9w==} dependencies: babel-plugin-minify-builtins: 0.5.0 @@ -3963,11 +4045,19 @@ packages: lodash: 4.17.21 dev: true - /balanced-match/1.0.2: + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /base/0.11.2: + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + /base64id@2.0.0: + resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} + engines: {node: ^4.5.0 || >= 5.9} + dev: true + + /base@0.11.2: resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} engines: {node: '>=0.10.0'} dependencies: @@ -3980,44 +4070,36 @@ packages: pascalcase: 0.1.1 dev: true - /base64-js/1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - /base64id/2.0.0: - resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} - engines: {node: ^4.5.0 || >= 5.9} - dev: true - - /batch/0.6.1: + /batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} dev: true - /big.js/5.2.2: + /big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: true - /bignumber.js/9.1.1: + /bignumber.js@9.1.1: resolution: {integrity: sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==} dev: true - /binary-extensions/2.2.0: + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - /bl/4.1.0: + /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.0 - /body-parser/1.20.1: + /body-parser@1.20.1(supports-color@6.1.0): resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 2.6.9 + debug: 2.6.9(supports-color@6.1.0) depd: 2.0.0 destroy: 1.2.0 http-errors: 2.0.0 @@ -4031,27 +4113,7 @@ packages: - supports-color dev: true - /body-parser/1.20.1_supports-color@6.1.0: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9_supports-color@6.1.0 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.1 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /bonjour/3.5.0: + /bonjour@3.5.0: resolution: {integrity: sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==} dependencies: array-flatten: 2.1.2 @@ -4062,20 +4124,20 @@ packages: multicast-dns-service-types: 1.1.0 dev: true - /brace-expansion/1.1.11: + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 dev: true - /brace-expansion/2.0.1: + /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 dev: true - /braces/2.3.2_supports-color@6.1.0: + /braces@2.3.2(supports-color@6.1.0): resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} engines: {node: '>=0.10.0'} dependencies: @@ -4085,7 +4147,7 @@ packages: fill-range: 4.0.0 isobject: 3.0.1 repeat-element: 1.1.4 - snapdragon: 0.8.2_supports-color@6.1.0 + snapdragon: 0.8.2(supports-color@6.1.0) snapdragon-node: 2.1.1 split-string: 3.1.0 to-regex: 3.0.2 @@ -4093,13 +4155,13 @@ packages: - supports-color dev: true - /braces/3.0.2: + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - /browserslist/4.21.5: + /browserslist@4.21.5: resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -4107,35 +4169,35 @@ packages: caniuse-lite: 1.0.30001456 electron-to-chromium: 1.4.301 node-releases: 2.0.10 - update-browserslist-db: 1.0.10_browserslist@4.21.5 + update-browserslist-db: 1.0.10(browserslist@4.21.5) dev: true - /bser/2.1.1: + /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 dev: true - /buffer-from/1.1.2: + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true - /buffer-indexof/1.1.1: + /buffer-indexof@1.1.1: resolution: {integrity: sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==} dev: true - /buffer/5.7.1: + /buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - /builtin-modules/3.3.0: + /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} dev: true - /bundle-require/4.0.1_esbuild@0.17.19: + /bundle-require@4.0.1(esbuild@0.17.19): resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: @@ -4145,29 +4207,29 @@ packages: load-tsconfig: 0.2.3 dev: true - /busboy/1.6.0: + /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} dependencies: streamsearch: 1.1.0 dev: true - /bytes/3.0.0: + /bytes@3.0.0: resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} engines: {node: '>= 0.8'} dev: true - /bytes/3.1.2: + /bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} dev: true - /cac/6.7.14: + /cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} dev: true - /cache-base/1.0.1: + /cache-base@1.0.1: resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} engines: {node: '>=0.10.0'} dependencies: @@ -4182,7 +4244,7 @@ packages: unset-value: 1.0.0 dev: true - /cache-content-type/1.0.1: + /cache-content-type@1.0.1: resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} engines: {node: '>= 6.0.0'} dependencies: @@ -4190,24 +4252,24 @@ packages: ylru: 1.3.2 dev: true - /cachedir/2.3.0: + /cachedir@2.3.0: resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==} engines: {node: '>=6'} dev: true - /call-bind/1.0.2: + /call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 get-intrinsic: 1.2.0 dev: true - /callsites/3.1.0: + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} dev: true - /camelcase-keys/6.2.2: + /camelcase-keys@6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} engines: {node: '>=8'} dependencies: @@ -4216,38 +4278,38 @@ packages: quick-lru: 4.0.1 dev: true - /camelcase/4.1.0: + /camelcase@4.1.0: resolution: {integrity: sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==} engines: {node: '>=4'} dev: true - /camelcase/5.0.0: + /camelcase@5.0.0: resolution: {integrity: sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==} engines: {node: '>=6'} dev: true - /camelcase/5.3.1: + /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} dev: true - /camelcase/6.3.0: + /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} dev: true - /caniuse-lite/1.0.30001456: + /caniuse-lite@1.0.30001456: resolution: {integrity: sha512-XFHJY5dUgmpMV25UqaD4kVq2LsiaU5rS8fb0f17pCoXQiQslzmFgnfOxfvo1bTpTqf7dwG/N/05CnLCnOEKmzA==} dev: true - /chalk-template/0.4.0: + /chalk-template@0.4.0: resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} engines: {node: '>=12'} dependencies: chalk: 4.1.2 dev: true - /chalk/2.4.2: + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} dependencies: @@ -4256,22 +4318,22 @@ packages: supports-color: 5.5.0 dev: true - /chalk/4.1.2: + /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - /char-regex/1.0.2: + /char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} dev: true - /chardet/0.7.0: + /chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - /chokidar/3.4.1: + /chokidar@3.4.1: resolution: {integrity: sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==} engines: {node: '>= 8.10.0'} dependencies: @@ -4285,21 +4347,21 @@ packages: optionalDependencies: fsevents: 2.1.3 - /chrome-trace-event/1.0.3: + /chrome-trace-event@1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} dev: true - /ci-info/3.8.0: + /ci-info@3.8.0: resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} dev: true - /cjs-module-lexer/1.2.2: + /cjs-module-lexer@1.2.2: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} dev: true - /class-utils/0.3.6: + /class-utils@0.3.6: resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} engines: {node: '>=0.10.0'} dependencies: @@ -4309,22 +4371,22 @@ packages: static-extend: 0.1.2 dev: true - /clean-stack/2.2.0: + /clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} dev: true - /cli-cursor/3.1.0: + /cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 - /cli-spinners/2.7.0: + /cli-spinners@2.7.0: resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==} engines: {node: '>=6'} - /cli-truncate/2.1.0: + /cli-truncate@2.1.0: resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} engines: {node: '>=8'} dependencies: @@ -4332,7 +4394,7 @@ packages: string-width: 4.2.3 dev: true - /cli-truncate/3.1.0: + /cli-truncate@3.1.0: resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: @@ -4340,11 +4402,11 @@ packages: string-width: 5.1.2 dev: true - /cli-width/3.0.0: + /cli-width@3.0.0: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} - /cliui/5.0.0: + /cliui@5.0.0: resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} dependencies: string-width: 3.1.0 @@ -4352,7 +4414,7 @@ packages: wrap-ansi: 5.1.0 dev: true - /cliui/8.0.1: + /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} dependencies: @@ -4360,7 +4422,7 @@ packages: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - /clone-deep/4.0.1: + /clone-deep@4.0.1: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} engines: {node: '>=6'} dependencies: @@ -4369,25 +4431,25 @@ packages: shallow-clone: 3.0.1 dev: true - /clone/1.0.4: + /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} - /clone/2.1.2: + /clone@2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} dev: true - /co/4.6.0: + /co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} dev: true - /collect-v8-coverage/1.0.1: + /collect-v8-coverage@1.0.1: resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} dev: true - /collection-visit/1.0.0: + /collection-visit@1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} dependencies: @@ -4395,37 +4457,37 @@ packages: object-visit: 1.0.1 dev: true - /color-convert/1.9.3: + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 dev: true - /color-convert/2.0.1: + /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - /color-name/1.1.3: + /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} dev: true - /color-name/1.1.4: + /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - /colorette/2.0.19: + /colorette@2.0.19: resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} dev: true - /combined-stream/1.0.8: + /combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 dev: true - /command-line-args/5.2.1: + /command-line-args@5.2.1: resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} engines: {node: '>=4.0.0'} dependencies: @@ -4435,7 +4497,7 @@ packages: typical: 4.0.0 dev: true - /command-line-usage/7.0.1: + /command-line-usage@7.0.1: resolution: {integrity: sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==} engines: {node: '>=12.20.0'} dependencies: @@ -4445,48 +4507,27 @@ packages: typical: 7.1.1 dev: true - /commander/2.20.3: + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true - /commander/4.1.1: + /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} dev: true - /commander/9.5.0: + /commander@9.5.0: resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} dev: true - /commitizen/4.3.0: + /commitizen@4.3.0(@swc/core@1.3.35): resolution: {integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==} engines: {node: '>= 12'} hasBin: true dependencies: cachedir: 2.3.0 - cz-conventional-changelog: 3.3.0_@swc+core@1.3.35 - dedent: 0.7.0 - detect-indent: 6.1.0 - find-node-modules: 2.1.3 - find-root: 1.1.0 - fs-extra: 9.1.0 - glob: 7.2.3 - inquirer: 8.2.5 - is-utf8: 0.2.1 - lodash: 4.17.21 - minimist: 1.2.7 - strip-bom: 4.0.0 - strip-json-comments: 3.1.1 - dev: true - - /commitizen/4.3.0_@swc+core@1.3.35: - resolution: {integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==} - engines: {node: '>= 12'} - hasBin: true - dependencies: - cachedir: 2.3.0 - cz-conventional-changelog: 3.3.0_@swc+core@1.3.35 + cz-conventional-changelog: 3.3.0(@swc/core@1.3.35) dedent: 0.7.0 detect-indent: 6.1.0 find-node-modules: 2.1.3 @@ -4504,36 +4545,36 @@ packages: - '@swc/wasm' dev: true - /commondir/1.0.1: + /commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: true - /compare-func/2.0.0: + /compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} dependencies: array-ify: 1.0.0 dot-prop: 5.3.0 dev: true - /component-emitter/1.3.0: + /component-emitter@1.3.0: resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} dev: true - /compressible/2.0.18: + /compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 dev: true - /compression/1.7.4_supports-color@6.1.0: + /compression@1.7.4(supports-color@6.1.0): resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} engines: {node: '>= 0.8.0'} dependencies: accepts: 1.3.8 bytes: 3.0.0 compressible: 2.0.18 - debug: 2.6.9_supports-color@6.1.0 + debug: 2.6.9(supports-color@6.1.0) on-headers: 1.0.2 safe-buffer: 5.1.2 vary: 1.1.2 @@ -4541,28 +4582,28 @@ packages: - supports-color dev: true - /concat-map/0.0.1: + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /connect-history-api-fallback/1.6.0: + /connect-history-api-fallback@1.6.0: resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==} engines: {node: '>=0.8'} dev: true - /content-disposition/0.5.4: + /content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} dependencies: safe-buffer: 5.2.1 dev: true - /content-type/1.0.5: + /content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} dev: true - /conventional-changelog-angular/5.0.13: + /conventional-changelog-angular@5.0.13: resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==} engines: {node: '>=10'} dependencies: @@ -4570,7 +4611,7 @@ packages: q: 1.5.1 dev: true - /conventional-changelog-conventionalcommits/4.6.3: + /conventional-changelog-conventionalcommits@4.6.3: resolution: {integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==} engines: {node: '>=10'} dependencies: @@ -4579,11 +4620,11 @@ packages: q: 1.5.1 dev: true - /conventional-commit-types/3.0.0: + /conventional-commit-types@3.0.0: resolution: {integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==} dev: true - /conventional-commits-parser/3.2.4: + /conventional-commits-parser@3.2.4: resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==} engines: {node: '>=10'} hasBin: true @@ -4596,28 +4637,28 @@ packages: through2: 4.0.2 dev: true - /convert-source-map/1.9.0: + /convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} dev: true - /convert-source-map/2.0.0: + /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true - /cookie-signature/1.0.6: + /cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} dev: true - /cookie/0.4.2: + /cookie@0.4.2: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} dev: true - /cookie/0.5.0: + /cookie@0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} - /cookies/0.8.0: + /cookies@0.8.0: resolution: {integrity: sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==} engines: {node: '>= 0.8'} dependencies: @@ -4625,22 +4666,22 @@ packages: keygrip: 1.1.0 dev: true - /copy-descriptor/0.1.1: + /copy-descriptor@0.1.1: resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} engines: {node: '>=0.10.0'} dev: true - /core-js-compat/3.28.0: + /core-js-compat@3.28.0: resolution: {integrity: sha512-myzPgE7QodMg4nnd3K1TDoES/nADRStM8Gpz0D6nhkwbmwEnE0ZGJgoWsvQ722FR8D7xS0n0LV556RcEicjTyg==} dependencies: browserslist: 4.21.5 dev: true - /core-util-is/1.0.3: + /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /cors/2.8.5: + /cors@2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} dependencies: @@ -4648,25 +4689,27 @@ packages: vary: 1.1.2 dev: true - /cosmiconfig-typescript-loader/2.0.2_e3mldq4edkmsxtnlaee6ja5nty: + /cosmiconfig-typescript-loader@2.0.2(@swc/core@1.3.35)(@types/node@18.16.16)(cosmiconfig@7.1.0)(typescript@4.9.5): resolution: {integrity: sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@types/node': '*' + cosmiconfig: '>=7' typescript: '>=3' dependencies: '@types/node': 18.16.16 cosmiconfig: 7.1.0 - ts-node: 10.9.1_e3mldq4edkmsxtnlaee6ja5nty + ts-node: 10.9.1(@swc/core@1.3.35)(@types/node@18.16.16)(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true - /cosmiconfig-typescript-loader/4.3.0_eosbvqlsep633ytzoa7bmtacpi: + /cosmiconfig-typescript-loader@4.3.0(@types/node@18.16.16)(cosmiconfig@8.0.0)(ts-node@10.9.1)(typescript@4.9.5): resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==} engines: {node: '>=12', npm: '>=6'} + requiresBuild: true peerDependencies: '@types/node': '*' cosmiconfig: '>=7' @@ -4675,12 +4718,12 @@ packages: dependencies: '@types/node': 18.16.16 cosmiconfig: 8.0.0 - ts-node: 10.9.1_e3mldq4edkmsxtnlaee6ja5nty + ts-node: 10.9.1(@swc/core@1.3.35)(@types/node@18.16.16)(typescript@4.9.5) typescript: 4.9.5 dev: true optional: true - /cosmiconfig/7.1.0: + /cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} dependencies: @@ -4691,9 +4734,10 @@ packages: yaml: 1.10.2 dev: true - /cosmiconfig/8.0.0: + /cosmiconfig@8.0.0: resolution: {integrity: sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==} engines: {node: '>=14'} + requiresBuild: true dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -4702,11 +4746,11 @@ packages: dev: true optional: true - /create-require/1.1.1: + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true - /cross-env/7.0.3: + /cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} hasBin: true @@ -4714,7 +4758,7 @@ packages: cross-spawn: 7.0.3 dev: true - /cross-fetch/3.1.5: + /cross-fetch@3.1.5: resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} dependencies: node-fetch: 2.6.7 @@ -4722,7 +4766,7 @@ packages: - encoding dev: true - /cross-spawn/6.0.5: + /cross-spawn@6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} dependencies: @@ -4733,7 +4777,7 @@ packages: which: 1.3.1 dev: true - /cross-spawn/7.0.3: + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} dependencies: @@ -4742,44 +4786,44 @@ packages: which: 2.0.2 dev: true - /cssom/0.3.8: + /cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} dev: true - /cssom/0.5.0: + /cssom@0.5.0: resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} dev: true - /cssstyle/2.3.0: + /cssstyle@2.3.0: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} dependencies: cssom: 0.3.8 dev: true - /cz-conventional-changelog/3.3.0_@swc+core@1.3.35: + /cz-conventional-changelog@3.3.0(@swc/core@1.3.35): resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==} engines: {node: '>= 10'} dependencies: chalk: 2.4.2 - commitizen: 4.3.0 + commitizen: 4.3.0(@swc/core@1.3.35) conventional-commit-types: 3.0.0 lodash.map: 4.6.0 longest: 2.0.1 word-wrap: 1.2.3 optionalDependencies: - '@commitlint/load': 17.4.4_@swc+core@1.3.35 + '@commitlint/load': 17.4.4(@swc/core@1.3.35) transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true - /dargs/7.0.0: + /dargs@7.0.0: resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} engines: {node: '>=8'} dev: true - /data-urls/3.0.2: + /data-urls@3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} dependencies: @@ -4788,26 +4832,15 @@ packages: whatwg-url: 11.0.0 dev: true - /dateformat/4.6.3: + /dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} dev: true - /debounce/1.2.1: + /debounce@1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} dev: true - /debug/2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.0.0 - dev: true - - /debug/2.6.9_supports-color@6.1.0: + /debug@2.6.9(supports-color@6.1.0): resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: supports-color: '*' @@ -4819,18 +4852,7 @@ packages: supports-color: 6.1.0 dev: true - /debug/3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - dev: true - - /debug/3.2.7_supports-color@6.1.0: + /debug@3.2.7(supports-color@6.1.0): resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' @@ -4842,19 +4864,7 @@ packages: supports-color: 6.1.0 dev: true - /debug/4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /debug/4.3.4_supports-color@6.1.0: + /debug@4.3.4(supports-color@6.1.0): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -4867,7 +4877,7 @@ packages: supports-color: 6.1.0 dev: true - /decamelize-keys/1.1.1: + /decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} engines: {node: '>=0.10.0'} dependencies: @@ -4875,29 +4885,29 @@ packages: map-obj: 1.0.1 dev: true - /decamelize/1.2.0: + /decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} dev: true - /decimal.js/10.4.3: + /decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} dev: true - /decode-uri-component/0.2.2: + /decode-uri-component@0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} dev: true - /dedent/0.7.0: + /dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true - /deep-equal/1.0.1: + /deep-equal@1.0.1: resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} dev: true - /deep-equal/1.1.1: + /deep-equal@1.1.1: resolution: {integrity: sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==} dependencies: is-arguments: 1.1.1 @@ -4908,21 +4918,21 @@ packages: regexp.prototype.flags: 1.4.3 dev: true - /deep-extend/0.6.0: + /deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} dev: true - /deep-is/0.1.4: + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /deepmerge/4.3.0: + /deepmerge@4.3.0: resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==} engines: {node: '>=0.10.0'} dev: true - /default-gateway/4.2.0: + /default-gateway@4.2.0: resolution: {integrity: sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==} engines: {node: '>=6'} dependencies: @@ -4930,17 +4940,17 @@ packages: ip-regex: 2.1.0 dev: true - /defaults/1.0.4: + /defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 - /define-lazy-prop/2.0.0: + /define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} dev: true - /define-properties/1.2.0: + /define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} dependencies: @@ -4948,21 +4958,21 @@ packages: object-keys: 1.1.1 dev: true - /define-property/0.2.5: + /define-property@0.2.5: resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} engines: {node: '>=0.10.0'} dependencies: is-descriptor: 0.1.6 dev: true - /define-property/1.0.0: + /define-property@1.0.0: resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} engines: {node: '>=0.10.0'} dependencies: is-descriptor: 1.0.2 dev: true - /define-property/2.0.2: + /define-property@2.0.2: resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} engines: {node: '>=0.10.0'} dependencies: @@ -4970,7 +4980,7 @@ packages: isobject: 3.0.1 dev: true - /del/4.1.1: + /del@4.1.1: resolution: {integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==} engines: {node: '>=6'} dependencies: @@ -4983,111 +4993,111 @@ packages: rimraf: 2.7.1 dev: true - /delayed-stream/1.0.0: + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} dev: true - /delegates/1.0.0: + /delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} dev: true - /depd/1.1.2: + /depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} dev: true - /depd/2.0.0: + /depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} dev: true - /destroy/1.2.0: + /destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dev: true - /detect-file/1.0.0: + /detect-file@1.0.0: resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} engines: {node: '>=0.10.0'} dev: true - /detect-indent/6.1.0: + /detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} dev: true - /detect-newline/3.1.0: + /detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} dev: true - /detect-node/2.1.0: + /detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} dev: true - /diff-sequences/29.4.3: + /diff-sequences@29.4.3: resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /diff/4.0.2: + /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} dev: true - /dir-glob/3.0.1: + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} dependencies: path-type: 4.0.0 dev: true - /dns-equal/1.0.0: + /dns-equal@1.0.0: resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} dev: true - /dns-packet/1.3.4: + /dns-packet@1.3.4: resolution: {integrity: sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==} dependencies: ip: 1.1.8 safe-buffer: 5.2.1 dev: true - /dns-txt/2.0.2: + /dns-txt@2.0.2: resolution: {integrity: sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==} dependencies: buffer-indexof: 1.1.1 dev: true - /doctrine/3.0.0: + /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 dev: true - /domexception/4.0.0: + /domexception@4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} dependencies: webidl-conversions: 7.0.0 dev: true - /dot-prop/5.3.0: + /dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} dependencies: is-obj: 2.0.0 dev: true - /duplexer2/0.1.4: + /duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: readable-stream: 2.3.7 dev: true - /duplexify/4.1.2: + /duplexify@4.1.2: resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} dependencies: end-of-stream: 1.4.4 @@ -5096,56 +5106,56 @@ packages: stream-shift: 1.0.1 dev: true - /eastasianwidth/0.2.0: + /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /ee-first/1.1.1: + /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true - /electron-to-chromium/1.4.301: + /electron-to-chromium@1.4.301: resolution: {integrity: sha512-bz00ASIIDjcgszZKuEA1JEFhbDjqUNbQ/PEhNEl1wbixzYpeTp2H2QWjsQvAL2T1wJBdOwCF5hE896BoMwYKrA==} dev: true - /emittery/0.13.1: + /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} dev: true - /emoji-regex/7.0.3: + /emoji-regex@7.0.3: resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} dev: true - /emoji-regex/8.0.0: + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - /emoji-regex/9.2.2: + /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true - /emojis-list/3.0.0: + /emojis-list@3.0.0: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} engines: {node: '>= 4'} dev: true - /encodeurl/1.0.2: + /encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} dev: true - /end-of-stream/1.4.4: + /end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 dev: true - /engine.io-parser/5.0.6: + /engine.io-parser@5.0.6: resolution: {integrity: sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==} engines: {node: '>=10.0.0'} dev: true - /engine.io/6.4.0: + /engine.io@6.4.0: resolution: {integrity: sha512-OgxY1c/RuCSeO/rTr8DIFXx76IzUUft86R7/P7MMbbkuzeqJoTNw2lmeD91IyGz41QYleIIjWeMJGgug043sfQ==} engines: {node: '>=10.0.0'} dependencies: @@ -5156,7 +5166,7 @@ packages: base64id: 2.0.0 cookie: 0.4.2 cors: 2.8.5 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) engine.io-parser: 5.0.6 ws: 8.11.0 transitivePeerDependencies: @@ -5165,7 +5175,7 @@ packages: - utf-8-validate dev: true - /enhanced-resolve/5.12.0: + /enhanced-resolve@5.12.0: resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} engines: {node: '>=10.13.0'} dependencies: @@ -5173,32 +5183,32 @@ packages: tapable: 2.2.1 dev: true - /enquirer/2.3.6: + /enquirer@2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} dependencies: ansi-colors: 4.1.3 dev: true - /entities/4.4.0: + /entities@4.4.0: resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} engines: {node: '>=0.12'} dev: true - /errno/0.1.8: + /errno@0.1.8: resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} hasBin: true dependencies: prr: 1.0.1 dev: true - /error-ex/1.3.2: + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 dev: true - /es-abstract/1.21.1: + /es-abstract@1.21.1: resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==} engines: {node: '>= 0.4'} dependencies: @@ -5237,19 +5247,19 @@ packages: which-typed-array: 1.1.9 dev: true - /es-array-method-boxes-properly/1.0.0: + /es-array-method-boxes-properly@1.0.0: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} dev: true - /es-module-lexer/0.9.3: + /es-module-lexer@0.9.3: resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} dev: true - /es-module-lexer/1.2.1: + /es-module-lexer@1.2.1: resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==} dev: true - /es-set-tostringtag/2.0.1: + /es-set-tostringtag@2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} dependencies: @@ -5258,7 +5268,7 @@ packages: has-tostringtag: 1.0.0 dev: true - /es-to-primitive/1.2.1: + /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} dependencies: @@ -5267,7 +5277,7 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild-loader/2.21.0_webpack@5.75.0: + /esbuild-loader@2.21.0(webpack@5.75.0): resolution: {integrity: sha512-k7ijTkCT43YBSZ6+fBCW1Gin7s46RrJ0VQaM8qA7lq7W+OLsGgtLyFV8470FzYi/4TeDexniTBTPTwZUnXXR5g==} peerDependencies: webpack: ^4.40.0 || ^5.0.0 @@ -5277,11 +5287,11 @@ packages: json5: 2.2.3 loader-utils: 2.0.4 tapable: 2.2.1 - webpack: 5.75.0_mtsvlg4x4u5udzh2pohivgt4x4 + webpack: 5.75.0(@swc/core@1.3.35)(esbuild@0.17.19) webpack-sources: 1.4.3 dev: true - /esbuild/0.16.17: + /esbuild@0.16.17: resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==} engines: {node: '>=12'} hasBin: true @@ -5311,7 +5321,7 @@ packages: '@esbuild/win32-x64': 0.16.17 dev: true - /esbuild/0.17.19: + /esbuild@0.17.19: resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} engines: {node: '>=12'} hasBin: true @@ -5341,29 +5351,29 @@ packages: '@esbuild/win32-x64': 0.17.19 dev: true - /escalade/3.1.1: + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} - /escape-html/1.0.3: + /escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} dev: true - /escape-string-regexp/1.0.5: + /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - /escape-string-regexp/2.0.0: + /escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} dev: true - /escape-string-regexp/4.0.0: + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} dev: true - /escodegen/2.0.0: + /escodegen@2.0.0: resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} engines: {node: '>=6.0'} hasBin: true @@ -5376,7 +5386,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-prettier/8.6.0_eslint@7.32.0: + /eslint-config-prettier@8.6.0(eslint@7.32.0): resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==} hasBin: true peerDependencies: @@ -5385,7 +5395,7 @@ packages: eslint: 7.32.0 dev: true - /eslint-plugin-prettier/3.4.1_2fbugv7hbzbahj5qm3ztcno6by: + /eslint-plugin-prettier@3.4.1(eslint-config-prettier@8.6.0)(eslint@7.32.0)(prettier@2.8.4): resolution: {integrity: sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==} engines: {node: '>=6.0.0'} peerDependencies: @@ -5397,12 +5407,12 @@ packages: optional: true dependencies: eslint: 7.32.0 - eslint-config-prettier: 8.6.0_eslint@7.32.0 + eslint-config-prettier: 8.6.0(eslint@7.32.0) prettier: 2.8.4 prettier-linter-helpers: 1.0.0 dev: true - /eslint-scope/5.1.1: + /eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} dependencies: @@ -5410,14 +5420,14 @@ packages: estraverse: 4.3.0 dev: true - /eslint-utils/2.1.0: + /eslint-utils@2.1.0: resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} engines: {node: '>=6'} dependencies: eslint-visitor-keys: 1.3.0 dev: true - /eslint-utils/3.0.0_eslint@7.32.0: + /eslint-utils@3.0.0(eslint@7.32.0): resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: @@ -5427,22 +5437,22 @@ packages: eslint-visitor-keys: 2.1.0 dev: true - /eslint-visitor-keys/1.3.0: + /eslint-visitor-keys@1.3.0: resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} engines: {node: '>=4'} dev: true - /eslint-visitor-keys/2.1.0: + /eslint-visitor-keys@2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} dev: true - /eslint-visitor-keys/3.3.0: + /eslint-visitor-keys@3.3.0: resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint/7.32.0: + /eslint@7.32.0: resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} engines: {node: ^10.12.0 || >=12.0.0} hasBin: true @@ -5453,7 +5463,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) doctrine: 3.0.0 enquirer: 2.3.6 escape-string-regexp: 4.0.0 @@ -5491,74 +5501,74 @@ packages: - supports-color dev: true - /espree/7.3.1: + /espree@7.3.1: resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: acorn: 7.4.1 - acorn-jsx: 5.3.2_acorn@7.4.1 + acorn-jsx: 5.3.2(acorn@7.4.1) eslint-visitor-keys: 1.3.0 dev: true - /esprima/4.0.1: + /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true dev: true - /esquery/1.4.2: + /esquery@1.4.2: resolution: {integrity: sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 dev: true - /esrecurse/4.3.0: + /esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 dev: true - /estraverse/4.3.0: + /estraverse@4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} dev: true - /estraverse/5.3.0: + /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} dev: true - /estree-walker/1.0.1: + /estree-walker@1.0.1: resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} dev: true - /esutils/2.0.3: + /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} dev: true - /etag/1.8.1: + /etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} dev: true - /eventemitter3/4.0.7: + /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} dev: true - /events/3.3.0: + /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} dev: true - /eventsource/2.0.2: + /eventsource@2.0.2: resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==} engines: {node: '>=12.0.0'} dev: true - /execa/1.0.0: + /execa@1.0.0: resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} engines: {node: '>=6'} dependencies: @@ -5571,7 +5581,7 @@ packages: strip-eof: 1.0.0 dev: true - /execa/5.1.1: + /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} dependencies: @@ -5586,7 +5596,7 @@ packages: strip-final-newline: 2.0.0 dev: true - /execa/6.1.0: + /execa@6.1.0: resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: @@ -5601,34 +5611,34 @@ packages: strip-final-newline: 3.0.0 dev: true - /exit/0.1.2: + /exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} dev: true - /expand-brackets/2.1.4_supports-color@6.1.0: + /expand-brackets@2.1.4(supports-color@6.1.0): resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} engines: {node: '>=0.10.0'} dependencies: - debug: 2.6.9_supports-color@6.1.0 + debug: 2.6.9(supports-color@6.1.0) define-property: 0.2.5 extend-shallow: 2.0.1 posix-character-classes: 0.1.1 regex-not: 1.0.2 - snapdragon: 0.8.2_supports-color@6.1.0 + snapdragon: 0.8.2(supports-color@6.1.0) to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true - /expand-tilde/2.0.2: + /expand-tilde@2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} dependencies: homedir-polyfill: 1.0.3 dev: true - /expect/29.4.3: + /expect@29.4.3: resolution: {integrity: sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -5639,23 +5649,23 @@ packages: jest-util: 29.4.3 dev: true - /express/4.18.2: + /express@4.18.2(supports-color@6.1.0): resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} engines: {node: '>= 0.10.0'} dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.1 + body-parser: 1.20.1(supports-color@6.1.0) content-disposition: 0.5.4 content-type: 1.0.5 cookie: 0.5.0 cookie-signature: 1.0.6 - debug: 2.6.9 + debug: 2.6.9(supports-color@6.1.0) depd: 2.0.0 encodeurl: 1.0.2 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.2.0 + finalhandler: 1.2.0(supports-color@6.1.0) fresh: 0.5.2 http-errors: 2.0.0 merge-descriptors: 1.0.1 @@ -5667,8 +5677,8 @@ packages: qs: 6.11.0 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 + send: 0.18.0(supports-color@6.1.0) + serve-static: 1.15.0(supports-color@6.1.0) setprototypeof: 1.2.0 statuses: 2.0.1 type-is: 1.6.18 @@ -5678,53 +5688,14 @@ packages: - supports-color dev: true - /express/4.18.2_supports-color@6.1.0: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} - engines: {node: '>= 0.10.0'} - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.1_supports-color@6.1.0 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.5.0 - cookie-signature: 1.0.6 - debug: 2.6.9_supports-color@6.1.0 - depd: 2.0.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.2.0_supports-color@6.1.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.11.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0_supports-color@6.1.0 - serve-static: 1.15.0_supports-color@6.1.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /extend-shallow/2.0.1: + /extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} dependencies: is-extendable: 0.1.1 dev: true - /extend-shallow/3.0.2: + /extend-shallow@3.0.2: resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} engines: {node: '>=0.10.0'} dependencies: @@ -5732,7 +5703,7 @@ packages: is-extendable: 1.0.1 dev: true - /external-editor/3.1.0: + /external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} dependencies: @@ -5740,31 +5711,31 @@ packages: iconv-lite: 0.4.24 tmp: 0.0.33 - /extglob/2.0.4_supports-color@6.1.0: + /extglob@2.0.4(supports-color@6.1.0): resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} engines: {node: '>=0.10.0'} dependencies: array-unique: 0.3.2 define-property: 1.0.0 - expand-brackets: 2.1.4_supports-color@6.1.0 + expand-brackets: 2.1.4(supports-color@6.1.0) extend-shallow: 2.0.1 fragment-cache: 0.2.1 regex-not: 1.0.2 - snapdragon: 0.8.2_supports-color@6.1.0 + snapdragon: 0.8.2(supports-color@6.1.0) to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true - /fast-deep-equal/3.1.3: + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-diff/1.2.0: + /fast-diff@1.2.0: resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} dev: true - /fast-glob/3.2.12: + /fast-glob@3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} engines: {node: '>=8.6.0'} dependencies: @@ -5775,56 +5746,56 @@ packages: micromatch: 4.0.5 dev: true - /fast-json-stable-stringify/2.1.0: + /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true - /fast-levenshtein/2.0.6: + /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fast-redact/3.1.2: + /fast-redact@3.1.2: resolution: {integrity: sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==} engines: {node: '>=6'} dev: true - /fast-safe-stringify/2.1.1: + /fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true - /fastq/1.15.0: + /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 dev: true - /faye-websocket/0.11.4: + /faye-websocket@0.11.4: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} engines: {node: '>=0.8.0'} dependencies: websocket-driver: 0.7.4 dev: true - /fb-watchman/2.0.2: + /fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 dev: true - /figures/3.2.0: + /figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} dependencies: escape-string-regexp: 1.0.5 - /file-entry-cache/6.0.1: + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.0.4 dev: true - /fill-range/4.0.0: + /fill-range@4.0.0: resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} engines: {node: '>=0.10.0'} dependencies: @@ -5834,32 +5805,17 @@ packages: to-regex-range: 2.1.1 dev: true - /fill-range/7.0.1: + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - /finalhandler/1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /finalhandler/1.2.0_supports-color@6.1.0: + /finalhandler@1.2.0(supports-color@6.1.0): resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} engines: {node: '>= 0.8'} dependencies: - debug: 2.6.9_supports-color@6.1.0 + debug: 2.6.9(supports-color@6.1.0) encodeurl: 1.0.2 escape-html: 1.0.3 on-finished: 2.4.1 @@ -5870,7 +5826,7 @@ packages: - supports-color dev: true - /find-cache-dir/3.3.2: + /find-cache-dir@3.3.2: resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} engines: {node: '>=8'} dependencies: @@ -5879,32 +5835,32 @@ packages: pkg-dir: 4.2.0 dev: true - /find-node-modules/2.1.3: + /find-node-modules@2.1.3: resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==} dependencies: findup-sync: 4.0.0 merge: 2.1.1 dev: true - /find-replace/3.0.0: + /find-replace@3.0.0: resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} engines: {node: '>=4.0.0'} dependencies: array-back: 3.1.0 dev: true - /find-root/1.1.0: + /find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} dev: true - /find-up/3.0.0: + /find-up@3.0.0: resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} engines: {node: '>=6'} dependencies: locate-path: 3.0.0 dev: true - /find-up/4.1.0: + /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} dependencies: @@ -5912,7 +5868,7 @@ packages: path-exists: 4.0.0 dev: true - /find-up/5.0.0: + /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} dependencies: @@ -5920,7 +5876,7 @@ packages: path-exists: 4.0.0 dev: true - /findup-sync/4.0.0: + /findup-sync@4.0.0: resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==} engines: {node: '>= 8'} dependencies: @@ -5930,7 +5886,7 @@ packages: resolve-dir: 1.0.1 dev: true - /flat-cache/3.0.4: + /flat-cache@3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: @@ -5938,11 +5894,11 @@ packages: rimraf: 3.0.2 dev: true - /flatted/3.2.7: + /flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true - /follow-redirects/1.15.2_debug@4.3.4: + /follow-redirects@1.15.2(debug@4.3.4): resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} engines: {node: '>=4.0'} peerDependencies: @@ -5951,21 +5907,21 @@ packages: debug: optional: true dependencies: - debug: 4.3.4_supports-color@6.1.0 + debug: 4.3.4(supports-color@6.1.0) dev: true - /for-each/0.3.3: + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 dev: true - /for-in/1.0.2: + /for-in@1.0.2: resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} engines: {node: '>=0.10.0'} dev: true - /form-data/3.0.1: + /form-data@3.0.1: resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} engines: {node: '>= 6'} dependencies: @@ -5974,7 +5930,7 @@ packages: mime-types: 2.1.35 dev: true - /form-data/4.0.0: + /form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} dependencies: @@ -5983,7 +5939,7 @@ packages: mime-types: 2.1.35 dev: true - /formdata-node/4.4.1: + /formdata-node@4.4.1: resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} engines: {node: '>= 12.20'} dependencies: @@ -5991,24 +5947,24 @@ packages: web-streams-polyfill: 4.0.0-beta.3 dev: false - /forwarded/0.2.0: + /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} dev: true - /fragment-cache/0.2.1: + /fragment-cache@0.2.1: resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} engines: {node: '>=0.10.0'} dependencies: map-cache: 0.2.2 dev: true - /fresh/0.5.2: + /fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} dev: true - /fs-extra/10.1.0: + /fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} dependencies: @@ -6017,7 +5973,7 @@ packages: universalify: 2.0.0 dev: true - /fs-extra/9.1.0: + /fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} dependencies: @@ -6027,26 +5983,26 @@ packages: universalify: 2.0.0 dev: true - /fs-monkey/1.0.3: + /fs-monkey@1.0.3: resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} dev: true - /fs-readdir-recursive/1.1.0: + /fs-readdir-recursive@1.1.0: resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} dev: true - /fs-teardown/0.3.2: + /fs-teardown@0.3.2: resolution: {integrity: sha512-5xJQGMsGjHdZJ5yw/eyZEkAIHYwQQA6T34PfXUCl5JOeizfLWnz3gBEVfEidgrnnYZKTBW3L7aPrB3aI8f0Vqw==} dependencies: fs-extra: 10.1.0 outvariant: 1.4.0 dev: true - /fs.realpath/1.0.0: + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /fsevents/2.1.3: + /fsevents@2.1.3: resolution: {integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] @@ -6054,7 +6010,7 @@ packages: requiresBuild: true optional: true - /fsevents/2.3.2: + /fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] @@ -6062,11 +6018,11 @@ packages: dev: true optional: true - /function-bind/1.1.1: + /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true - /function.prototype.name/1.1.5: + /function.prototype.name@1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} engines: {node: '>= 0.4'} dependencies: @@ -6076,24 +6032,24 @@ packages: functions-have-names: 1.2.3 dev: true - /functional-red-black-tree/1.0.1: + /functional-red-black-tree@1.0.1: resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} dev: true - /functions-have-names/1.2.3: + /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true - /gensync/1.0.0-beta.2: + /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} dev: true - /get-caller-file/2.0.5: + /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - /get-intrinsic/1.2.0: + /get-intrinsic@1.2.0: resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} dependencies: function-bind: 1.1.1 @@ -6101,24 +6057,24 @@ packages: has-symbols: 1.0.3 dev: true - /get-package-type/0.1.0: + /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} dev: true - /get-stream/4.1.0: + /get-stream@4.1.0: resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} engines: {node: '>=6'} dependencies: pump: 3.0.0 dev: true - /get-stream/6.0.1: + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} dev: true - /get-symbol-description/1.0.0: + /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: @@ -6126,12 +6082,12 @@ packages: get-intrinsic: 1.2.0 dev: true - /get-value/2.0.6: + /get-value@2.0.6: resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} engines: {node: '>=0.10.0'} dev: true - /git-log-parser/1.2.0: + /git-log-parser@1.2.0: resolution: {integrity: sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==} dependencies: argv-formatter: 1.0.0 @@ -6142,7 +6098,7 @@ packages: traverse: 0.6.7 dev: true - /git-raw-commits/2.0.11: + /git-raw-commits@2.0.11: resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} engines: {node: '>=10'} hasBin: true @@ -6154,17 +6110,17 @@ packages: through2: 4.0.2 dev: true - /glob-parent/5.1.2: + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - /glob-to-regexp/0.4.1: + /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob/7.1.6: + /glob@7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} dependencies: fs.realpath: 1.0.0 @@ -6175,7 +6131,7 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob/7.2.3: + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 @@ -6186,7 +6142,7 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob/9.3.5: + /glob@9.3.5: resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} engines: {node: '>=16 || 14 >=14.17'} dependencies: @@ -6196,14 +6152,14 @@ packages: path-scurry: 1.9.2 dev: true - /global-dirs/0.1.1: + /global-dirs@0.1.1: resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} engines: {node: '>=4'} dependencies: ini: 1.3.8 dev: true - /global-modules/1.0.0: + /global-modules@1.0.0: resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} engines: {node: '>=0.10.0'} dependencies: @@ -6212,7 +6168,7 @@ packages: resolve-dir: 1.0.1 dev: true - /global-prefix/1.0.2: + /global-prefix@1.0.2: resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} engines: {node: '>=0.10.0'} dependencies: @@ -6223,26 +6179,26 @@ packages: which: 1.3.1 dev: true - /globals/11.12.0: + /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} dev: true - /globals/13.20.0: + /globals@13.20.0: resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true - /globalthis/1.0.3: + /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.0 dev: true - /globby/11.1.0: + /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} dependencies: @@ -6254,7 +6210,7 @@ packages: slash: 3.0.0 dev: true - /globby/6.1.0: + /globby@6.1.0: resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} engines: {node: '>=0.10.0'} dependencies: @@ -6265,71 +6221,71 @@ packages: pinkie-promise: 2.0.1 dev: true - /gopd/1.0.1: + /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.0 dev: true - /graceful-fs/4.2.10: + /graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} dev: true - /grapheme-splitter/1.0.4: + /grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true - /graphql/16.7.1: + /graphql@16.7.1: resolution: {integrity: sha512-DRYR9tf+UGU0KOsMcKAlXeFfX89UiiIZ0dRU3mR0yJfu6OjZqUcp68NnFLnqQU5RexygFoDy1EW+ccOYcPfmHg==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} dev: false - /handle-thing/2.0.1: + /handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} dev: true - /hard-rejection/2.1.0: + /hard-rejection@2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} dev: true - /has-bigints/1.0.2: + /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true - /has-flag/3.0.0: + /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} dev: true - /has-flag/4.0.0: + /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-property-descriptors/1.0.0: + /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: get-intrinsic: 1.2.0 dev: true - /has-proto/1.0.1: + /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} dev: true - /has-symbols/1.0.3: + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: true - /has-tostringtag/1.0.0: + /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /has-value/0.3.1: + /has-value@0.3.1: resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} engines: {node: '>=0.10.0'} dependencies: @@ -6338,7 +6294,7 @@ packages: isobject: 2.1.0 dev: true - /has-value/1.0.0: + /has-value@1.0.0: resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} engines: {node: '>=0.10.0'} dependencies: @@ -6347,12 +6303,12 @@ packages: isobject: 3.0.1 dev: true - /has-values/0.1.4: + /has-values@0.1.4: resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} engines: {node: '>=0.10.0'} dev: true - /has-values/1.0.0: + /has-values@1.0.0: resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} engines: {node: '>=0.10.0'} dependencies: @@ -6360,35 +6316,35 @@ packages: kind-of: 4.0.0 dev: true - /has/1.0.3: + /has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 dev: true - /headers-polyfill/3.1.2: + /headers-polyfill@3.1.2: resolution: {integrity: sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==} - /homedir-polyfill/1.0.3: + /homedir-polyfill@1.0.3: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} dependencies: parse-passwd: 1.0.0 dev: true - /hosted-git-info/2.8.9: + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true - /hosted-git-info/4.1.0: + /hosted-git-info@4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} dependencies: lru-cache: 6.0.0 dev: true - /hpack.js/2.1.6: + /hpack.js@2.1.6: resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} dependencies: inherits: 2.0.4 @@ -6397,22 +6353,22 @@ packages: wbuf: 1.7.3 dev: true - /html-encoding-sniffer/3.0.0: + /html-encoding-sniffer@3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} dependencies: whatwg-encoding: 2.0.0 dev: true - /html-entities/1.4.0: + /html-entities@1.4.0: resolution: {integrity: sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==} dev: true - /html-escaper/2.0.2: + /html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - /http-assert/1.5.0: + /http-assert@1.5.0: resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} engines: {node: '>= 0.8'} dependencies: @@ -6420,11 +6376,11 @@ packages: http-errors: 1.8.1 dev: true - /http-deceiver/1.2.7: + /http-deceiver@1.2.7: resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} dev: true - /http-errors/1.6.3: + /http-errors@1.6.3: resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} engines: {node: '>= 0.6'} dependencies: @@ -6434,7 +6390,7 @@ packages: statuses: 1.5.0 dev: true - /http-errors/1.8.1: + /http-errors@1.8.1: resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} engines: {node: '>= 0.6'} dependencies: @@ -6445,7 +6401,7 @@ packages: toidentifier: 1.0.1 dev: true - /http-errors/2.0.0: + /http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} dependencies: @@ -6456,92 +6412,92 @@ packages: toidentifier: 1.0.1 dev: true - /http-parser-js/0.5.8: + /http-parser-js@0.5.8: resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} dev: true - /http-proxy-agent/5.0.0: + /http-proxy-agent@5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) transitivePeerDependencies: - supports-color dev: true - /http-proxy-middleware/0.19.1_tmpgdztspuwvsxzgjkhoqk7duq: + /http-proxy-middleware@0.19.1(debug@4.3.4)(supports-color@6.1.0): resolution: {integrity: sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==} engines: {node: '>=4.0.0'} dependencies: - http-proxy: 1.18.1_debug@4.3.4 + http-proxy: 1.18.1(debug@4.3.4) is-glob: 4.0.3 lodash: 4.17.21 - micromatch: 3.1.10_supports-color@6.1.0 + micromatch: 3.1.10(supports-color@6.1.0) transitivePeerDependencies: - debug - supports-color dev: true - /http-proxy/1.18.1_debug@4.3.4: + /http-proxy@1.18.1(debug@4.3.4): resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.2_debug@4.3.4 + follow-redirects: 1.15.2(debug@4.3.4) requires-port: 1.0.0 transitivePeerDependencies: - debug dev: true - /https-proxy-agent/5.0.1: + /https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) transitivePeerDependencies: - supports-color dev: true - /human-signals/2.1.0: + /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} dev: true - /human-signals/3.0.1: + /human-signals@3.0.1: resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==} engines: {node: '>=12.20.0'} dev: true - /iconv-lite/0.4.24: + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 - /iconv-lite/0.6.3: + /iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 dev: true - /ieee754/1.2.1: + /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - /ignore/4.0.6: + /ignore@4.0.6: resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} engines: {node: '>= 4'} dev: true - /ignore/5.2.4: + /ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} dev: true - /import-fresh/3.3.0: + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} dependencies: @@ -6549,7 +6505,7 @@ packages: resolve-from: 4.0.0 dev: true - /import-local/2.0.0: + /import-local@2.0.0: resolution: {integrity: sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==} engines: {node: '>=6'} hasBin: true @@ -6558,7 +6514,7 @@ packages: resolve-cwd: 2.0.0 dev: true - /import-local/3.1.0: + /import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} hasBin: true @@ -6567,35 +6523,35 @@ packages: resolve-cwd: 3.0.0 dev: true - /imurmurhash/0.1.4: + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} dev: true - /indent-string/4.0.0: + /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} dev: true - /inflight/1.0.6: + /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true - /inherits/2.0.3: + /inherits@2.0.3: resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} dev: true - /inherits/2.0.4: + /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /ini/1.3.8: + /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true - /inquirer/8.2.5: + /inquirer@8.2.5: resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} engines: {node: '>=12.0.0'} dependencies: @@ -6615,7 +6571,7 @@ packages: through: 2.3.8 wrap-ansi: 7.0.0 - /internal-ip/4.3.0: + /internal-ip@4.3.0: resolution: {integrity: sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==} engines: {node: '>=6'} dependencies: @@ -6623,7 +6579,7 @@ packages: ipaddr.js: 1.9.1 dev: true - /internal-slot/1.0.5: + /internal-slot@1.0.5: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} dependencies: @@ -6632,40 +6588,40 @@ packages: side-channel: 1.0.4 dev: true - /ip-regex/2.1.0: + /ip-regex@2.1.0: resolution: {integrity: sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==} engines: {node: '>=4'} dev: true - /ip/1.1.8: + /ip@1.1.8: resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==} dev: true - /ipaddr.js/1.9.1: + /ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} dev: true - /is-absolute-url/3.0.3: + /is-absolute-url@3.0.3: resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} engines: {node: '>=8'} dev: true - /is-accessor-descriptor/0.1.6: + /is-accessor-descriptor@0.1.6: resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /is-accessor-descriptor/1.0.0: + /is-accessor-descriptor@1.0.0: resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} engines: {node: '>=0.10.0'} dependencies: kind-of: 6.0.3 dev: true - /is-arguments/1.1.1: + /is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: @@ -6673,7 +6629,7 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-array-buffer/3.0.1: + /is-array-buffer@3.0.1: resolution: {integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==} dependencies: call-bind: 1.0.2 @@ -6681,23 +6637,23 @@ packages: is-typed-array: 1.1.10 dev: true - /is-arrayish/0.2.1: + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true - /is-bigint/1.0.4: + /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 dev: true - /is-binary-path/2.1.0: + /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 - /is-boolean-object/1.1.2: + /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: @@ -6705,50 +6661,50 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-buffer/1.1.6: + /is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: true - /is-builtin-module/3.2.1: + /is-builtin-module@3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} dependencies: builtin-modules: 3.3.0 dev: true - /is-callable/1.2.7: + /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} dev: true - /is-core-module/2.11.0: + /is-core-module@2.11.0: resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} dependencies: has: 1.0.3 dev: true - /is-data-descriptor/0.1.4: + /is-data-descriptor@0.1.4: resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /is-data-descriptor/1.0.0: + /is-data-descriptor@1.0.0: resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} engines: {node: '>=0.10.0'} dependencies: kind-of: 6.0.3 dev: true - /is-date-object/1.0.5: + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-descriptor/0.1.6: + /is-descriptor@0.1.6: resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} engines: {node: '>=0.10.0'} dependencies: @@ -6757,7 +6713,7 @@ packages: kind-of: 5.1.0 dev: true - /is-descriptor/1.0.2: + /is-descriptor@1.0.2: resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==} engines: {node: '>=0.10.0'} dependencies: @@ -6766,136 +6722,136 @@ packages: kind-of: 6.0.3 dev: true - /is-docker/2.2.1: + /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true dev: true - /is-extendable/0.1.1: + /is-extendable@0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} dev: true - /is-extendable/1.0.1: + /is-extendable@1.0.1: resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} engines: {node: '>=0.10.0'} dependencies: is-plain-object: 2.0.4 dev: true - /is-extglob/2.1.1: + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - /is-fullwidth-code-point/2.0.0: + /is-fullwidth-code-point@2.0.0: resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} engines: {node: '>=4'} dev: true - /is-fullwidth-code-point/3.0.0: + /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - /is-fullwidth-code-point/4.0.0: + /is-fullwidth-code-point@4.0.0: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} dev: true - /is-generator-fn/2.1.0: + /is-generator-fn@2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} dev: true - /is-generator-function/1.0.10: + /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-glob/4.0.3: + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - /is-interactive/1.0.0: + /is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} - /is-module/1.0.0: + /is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} dev: true - /is-negative-zero/2.0.2: + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} dev: true - /is-node-process/1.2.0: + /is-node-process@1.2.0: resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} dev: false - /is-number-object/1.0.7: + /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-number/3.0.0: + /is-number@3.0.0: resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /is-number/7.0.0: + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - /is-obj/2.0.0: + /is-obj@2.0.0: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} dev: true - /is-path-cwd/2.2.0: + /is-path-cwd@2.2.0: resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} engines: {node: '>=6'} dev: true - /is-path-in-cwd/2.1.0: + /is-path-in-cwd@2.1.0: resolution: {integrity: sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==} engines: {node: '>=6'} dependencies: is-path-inside: 2.1.0 dev: true - /is-path-inside/2.1.0: + /is-path-inside@2.1.0: resolution: {integrity: sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==} engines: {node: '>=6'} dependencies: path-is-inside: 1.0.2 dev: true - /is-plain-obj/1.1.0: + /is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} dev: true - /is-plain-object/2.0.4: + /is-plain-object@2.0.4: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true - /is-potential-custom-element-name/1.0.1: + /is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true - /is-regex/1.1.4: + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: @@ -6903,49 +6859,49 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-shared-array-buffer/1.0.2: + /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.2 dev: true - /is-stream/1.1.0: + /is-stream@1.1.0: resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} engines: {node: '>=0.10.0'} dev: true - /is-stream/2.0.1: + /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} dev: true - /is-stream/3.0.0: + /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /is-string/1.0.7: + /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-symbol/1.0.4: + /is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /is-text-path/1.0.1: + /is-text-path@1.0.1: resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} engines: {node: '>=0.10.0'} dependencies: text-extensions: 1.9.0 dev: true - /is-typed-array/1.1.10: + /is-typed-array@1.1.10: resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} engines: {node: '>= 0.4'} dependencies: @@ -6956,63 +6912,63 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-unicode-supported/0.1.0: + /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} - /is-utf8/0.2.1: + /is-utf8@0.2.1: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} dev: true - /is-weakref/1.0.2: + /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 dev: true - /is-windows/1.0.2: + /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} dev: true - /is-wsl/1.1.0: + /is-wsl@1.1.0: resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} engines: {node: '>=4'} dev: true - /is-wsl/2.2.0: + /is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} dependencies: is-docker: 2.2.1 dev: true - /isarray/1.0.0: + /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true - /isbinaryfile/5.0.0: + /isbinaryfile@5.0.0: resolution: {integrity: sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==} engines: {node: '>= 14.0.0'} dev: true - /isexe/2.0.0: + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /isobject/2.1.0: + /isobject@2.1.0: resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} engines: {node: '>=0.10.0'} dependencies: isarray: 1.0.0 dev: true - /isobject/3.0.1: + /isobject@3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} dev: true - /issue-parser/6.0.0: + /issue-parser@6.0.0: resolution: {integrity: sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==} engines: {node: '>=10.13'} dependencies: @@ -7023,12 +6979,12 @@ packages: lodash.uniqby: 4.7.0 dev: true - /istanbul-lib-coverage/3.2.0: + /istanbul-lib-coverage@3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} dev: true - /istanbul-lib-instrument/5.2.1: + /istanbul-lib-instrument@5.2.1: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: @@ -7041,7 +6997,7 @@ packages: - supports-color dev: true - /istanbul-lib-report/3.0.0: + /istanbul-lib-report@3.0.0: resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} engines: {node: '>=8'} dependencies: @@ -7050,18 +7006,18 @@ packages: supports-color: 7.2.0 dev: true - /istanbul-lib-source-maps/4.0.1: + /istanbul-lib-source-maps@4.0.1: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) istanbul-lib-coverage: 3.2.0 source-map: 0.6.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-reports/3.1.5: + /istanbul-reports@3.1.5: resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} engines: {node: '>=8'} dependencies: @@ -7069,7 +7025,7 @@ packages: istanbul-lib-report: 3.0.0 dev: true - /jest-changed-files/29.4.3: + /jest-changed-files@29.4.3: resolution: {integrity: sha512-Vn5cLuWuwmi2GNNbokPOEcvrXGSGrqVnPEZV7rC6P7ck07Dyw9RFnvWglnupSh+hGys0ajGtw/bc2ZgweljQoQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7077,7 +7033,7 @@ packages: p-limit: 3.1.0 dev: true - /jest-circus/29.4.3: + /jest-circus@29.4.3: resolution: {integrity: sha512-Vw/bVvcexmdJ7MLmgdT3ZjkJ3LKu8IlpefYokxiqoZy6OCQ2VAm6Vk3t/qHiAGUXbdbJKJWnc8gH3ypTbB/OBw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7104,7 +7060,7 @@ packages: - supports-color dev: true - /jest-cli/29.4.3_u3tjahz4lx2ow4rgesw7wigoy4: + /jest-cli@29.4.3(@types/node@18.16.16)(ts-node@10.9.1): resolution: {integrity: sha512-PiiAPuFNfWWolCE6t3ZrDXQc6OsAuM3/tVW0u27UWc1KE+n/HSn5dSE6B2juqN7WP+PP0jAcnKtGmI4u8GMYCg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -7114,14 +7070,14 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.4.3_ts-node@10.9.1 + '@jest/core': 29.4.3(ts-node@10.9.1) '@jest/test-result': 29.4.3 '@jest/types': 29.4.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 29.4.3_u3tjahz4lx2ow4rgesw7wigoy4 + jest-config: 29.4.3(@types/node@18.16.16)(ts-node@10.9.1) jest-util: 29.4.3 jest-validate: 29.4.3 prompts: 2.4.2 @@ -7132,7 +7088,7 @@ packages: - ts-node dev: true - /jest-config/29.4.3_u3tjahz4lx2ow4rgesw7wigoy4: + /jest-config@29.4.3(@types/node@18.16.16)(ts-node@10.9.1): resolution: {integrity: sha512-eCIpqhGnIjdUCXGtLhz4gdDoxKSWXKjzNcc5r+0S1GKOp2fwOipx5mRcwa9GB/ArsxJ1jlj2lmlD9bZAsBxaWQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -7148,7 +7104,7 @@ packages: '@jest/test-sequencer': 29.4.3 '@jest/types': 29.4.3 '@types/node': 18.16.16 - babel-jest: 29.4.3_@babel+core@7.20.12 + babel-jest: 29.4.3(@babel/core@7.20.12) chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.0 @@ -7167,12 +7123,12 @@ packages: pretty-format: 29.4.3 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1_ucqeymrky72u6ak3savtol5egu + ts-node: 10.9.1(@swc/core@1.3.35)(@types/node@18.16.16)(typescript@5.0.2) transitivePeerDependencies: - supports-color dev: true - /jest-diff/29.4.3: + /jest-diff@29.4.3: resolution: {integrity: sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7182,14 +7138,14 @@ packages: pretty-format: 29.4.3 dev: true - /jest-docblock/29.4.3: + /jest-docblock@29.4.3: resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 dev: true - /jest-each/29.4.3: + /jest-each@29.4.3: resolution: {integrity: sha512-1ElHNAnKcbJb/b+L+7j0/w7bDvljw4gTv1wL9fYOczeJrbTbkMGQ5iQPFJ3eFQH19VPTx1IyfePdqSpePKss7Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7200,7 +7156,7 @@ packages: pretty-format: 29.4.3 dev: true - /jest-environment-jsdom/29.4.3: + /jest-environment-jsdom@29.4.3: resolution: {integrity: sha512-rFjf8JXrw3OjUzzmSE5l0XjMj0/MSVEUMCSXBGPDkfwb1T03HZI7iJSL0cGctZApPSyJxbjyKDVxkZuyhHkuTw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -7223,7 +7179,7 @@ packages: - utf-8-validate dev: true - /jest-environment-node/29.4.3: + /jest-environment-node@29.4.3: resolution: {integrity: sha512-gAiEnSKF104fsGDXNkwk49jD/0N0Bqu2K9+aMQXA6avzsA9H3Fiv1PW2D+gzbOSR705bWd2wJZRFEFpV0tXISg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7235,12 +7191,12 @@ packages: jest-util: 29.4.3 dev: true - /jest-get-type/29.4.3: + /jest-get-type@29.4.3: resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-haste-map/29.4.3: + /jest-haste-map@29.4.3: resolution: {integrity: sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7259,7 +7215,7 @@ packages: fsevents: 2.3.2 dev: true - /jest-leak-detector/29.4.3: + /jest-leak-detector@29.4.3: resolution: {integrity: sha512-9yw4VC1v2NspMMeV3daQ1yXPNxMgCzwq9BocCwYrRgXe4uaEJPAN0ZK37nFBhcy3cUwEVstFecFLaTHpF7NiGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7267,7 +7223,7 @@ packages: pretty-format: 29.4.3 dev: true - /jest-matcher-utils/29.4.3: + /jest-matcher-utils@29.4.3: resolution: {integrity: sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7277,7 +7233,7 @@ packages: pretty-format: 29.4.3 dev: true - /jest-message-util/29.4.3: + /jest-message-util@29.4.3: resolution: {integrity: sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7292,7 +7248,7 @@ packages: stack-utils: 2.0.6 dev: true - /jest-mock/29.4.3: + /jest-mock@29.4.3: resolution: {integrity: sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7301,7 +7257,7 @@ packages: jest-util: 29.4.3 dev: true - /jest-pnp-resolver/1.2.3_jest-resolve@29.4.3: + /jest-pnp-resolver@1.2.3(jest-resolve@29.4.3): resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: @@ -7313,12 +7269,12 @@ packages: jest-resolve: 29.4.3 dev: true - /jest-regex-util/29.4.3: + /jest-regex-util@29.4.3: resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-resolve-dependencies/29.4.3: + /jest-resolve-dependencies@29.4.3: resolution: {integrity: sha512-uvKMZAQ3nmXLH7O8WAOhS5l0iWyT3WmnJBdmIHiV5tBbdaDZ1wqtNX04FONGoaFvSOSHBJxnwAVnSn1WHdGVaw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7328,14 +7284,14 @@ packages: - supports-color dev: true - /jest-resolve/29.4.3: + /jest-resolve@29.4.3: resolution: {integrity: sha512-GPokE1tzguRyT7dkxBim4wSx6E45S3bOQ7ZdKEG+Qj0Oac9+6AwJPCk0TZh5Vu0xzeX4afpb+eDmgbmZFFwpOw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 graceful-fs: 4.2.10 jest-haste-map: 29.4.3 - jest-pnp-resolver: 1.2.3_jest-resolve@29.4.3 + jest-pnp-resolver: 1.2.3(jest-resolve@29.4.3) jest-util: 29.4.3 jest-validate: 29.4.3 resolve: 1.22.1 @@ -7343,7 +7299,7 @@ packages: slash: 3.0.0 dev: true - /jest-runner/29.4.3: + /jest-runner@29.4.3: resolution: {integrity: sha512-GWPTEiGmtHZv1KKeWlTX9SIFuK19uLXlRQU43ceOQ2hIfA5yPEJC7AMkvFKpdCHx6pNEdOD+2+8zbniEi3v3gA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7372,7 +7328,7 @@ packages: - supports-color dev: true - /jest-runtime/29.4.3: + /jest-runtime@29.4.3: resolution: {integrity: sha512-F5bHvxSH+LvLV24vVB3L8K467dt3y3dio6V3W89dUz9nzvTpqd/HcT9zfYKL2aZPvD63vQFgLvaUX/UpUhrP6Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7402,14 +7358,14 @@ packages: - supports-color dev: true - /jest-snapshot/29.4.3: + /jest-snapshot@29.4.3: resolution: {integrity: sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.20.12 '@babel/generator': 7.20.14 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12 + '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.20.12) + '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.20.12) '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 '@jest/expect-utils': 29.4.3 @@ -7417,7 +7373,7 @@ packages: '@jest/types': 29.4.3 '@types/babel__traverse': 7.18.3 '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.20.12) chalk: 4.1.2 expect: 29.4.3 graceful-fs: 4.2.10 @@ -7434,7 +7390,7 @@ packages: - supports-color dev: true - /jest-util/29.4.3: + /jest-util@29.4.3: resolution: {integrity: sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7446,7 +7402,7 @@ packages: picomatch: 2.3.1 dev: true - /jest-validate/29.4.3: + /jest-validate@29.4.3: resolution: {integrity: sha512-J3u5v7aPQoXPzaar6GndAVhdQcZr/3osWSgTeKg5v574I9ybX/dTyH0AJFb5XgXIB7faVhf+rS7t4p3lL9qFaw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7458,7 +7414,7 @@ packages: pretty-format: 29.4.3 dev: true - /jest-watcher/29.4.3: + /jest-watcher@29.4.3: resolution: {integrity: sha512-zwlXH3DN3iksoIZNk73etl1HzKyi5FuQdYLnkQKm5BW4n8HpoG59xSwpVdFrnh60iRRaRBGw0gcymIxjJENPcA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7472,7 +7428,7 @@ packages: string-length: 4.0.2 dev: true - /jest-worker/27.5.1: + /jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: @@ -7481,7 +7437,7 @@ packages: supports-color: 8.1.1 dev: true - /jest-worker/29.4.3: + /jest-worker@29.4.3: resolution: {integrity: sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -7491,7 +7447,7 @@ packages: supports-color: 8.1.1 dev: true - /jest/29.4.3_u3tjahz4lx2ow4rgesw7wigoy4: + /jest@29.4.3(@types/node@18.16.16)(ts-node@10.9.1): resolution: {integrity: sha512-XvK65feuEFGZT8OO0fB/QAQS+LGHvQpaadkH5p47/j3Ocqq3xf2pK9R+G0GzgfuhXVxEv76qCOOcMb5efLk6PA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -7501,31 +7457,31 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.4.3_ts-node@10.9.1 + '@jest/core': 29.4.3(ts-node@10.9.1) '@jest/types': 29.4.3 import-local: 3.1.0 - jest-cli: 29.4.3_u3tjahz4lx2ow4rgesw7wigoy4 + jest-cli: 29.4.3(@types/node@18.16.16)(ts-node@10.9.1) transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: true - /joycon/3.1.1: + /joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} dev: true - /js-levenshtein/1.1.6: + /js-levenshtein@1.1.6: resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} engines: {node: '>=0.10.0'} dev: false - /js-tokens/4.0.0: + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true - /js-yaml/3.14.1: + /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true dependencies: @@ -7533,15 +7489,16 @@ packages: esprima: 4.0.1 dev: true - /js-yaml/4.1.0: + /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + requiresBuild: true dependencies: argparse: 2.0.1 dev: true optional: true - /jsdom/20.0.3: + /jsdom@20.0.3: resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} engines: {node: '>=14'} peerDependencies: @@ -7582,50 +7539,50 @@ packages: - utf-8-validate dev: true - /jsesc/0.5.0: + /jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true dev: true - /jsesc/2.5.2: + /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true dev: true - /json-bigint/1.0.0: + /json-bigint@1.0.0: resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} dependencies: bignumber.js: 9.1.1 dev: true - /json-parse-even-better-errors/2.3.1: + /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true - /json-schema-traverse/0.4.1: + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true - /json-schema-traverse/1.0.0: + /json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: true - /json-stable-stringify-without-jsonify/1.0.1: + /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true - /json5/2.2.3: + /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true dev: true - /jsonc-parser/3.2.0: + /jsonc-parser@3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} dev: true - /jsonfile/6.1.0: + /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.0 @@ -7633,56 +7590,56 @@ packages: graceful-fs: 4.2.10 dev: true - /jsonparse/1.3.1: + /jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} dev: true - /keygrip/1.1.0: + /keygrip@1.1.0: resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} engines: {node: '>= 0.6'} dependencies: tsscmp: 1.0.6 dev: true - /killable/1.0.1: + /killable@1.0.1: resolution: {integrity: sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==} dev: true - /kind-of/3.2.2: + /kind-of@3.2.2: resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} engines: {node: '>=0.10.0'} dependencies: is-buffer: 1.1.6 dev: true - /kind-of/4.0.0: + /kind-of@4.0.0: resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} engines: {node: '>=0.10.0'} dependencies: is-buffer: 1.1.6 dev: true - /kind-of/5.1.0: + /kind-of@5.1.0: resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} engines: {node: '>=0.10.0'} dev: true - /kind-of/6.0.3: + /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} dev: true - /kleur/3.0.3: + /kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} dev: true - /koa-compose/4.1.0: + /koa-compose@4.1.0: resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} dev: true - /koa-convert/2.0.0: + /koa-convert@2.0.0: resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} engines: {node: '>= 10'} dependencies: @@ -7690,34 +7647,34 @@ packages: koa-compose: 4.1.0 dev: true - /koa-etag/4.0.0: + /koa-etag@4.0.0: resolution: {integrity: sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==} dependencies: etag: 1.8.1 dev: true - /koa-send/5.0.1: + /koa-send@5.0.1: resolution: {integrity: sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==} engines: {node: '>= 8'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) http-errors: 1.8.1 resolve-path: 1.4.0 transitivePeerDependencies: - supports-color dev: true - /koa-static/5.0.0: + /koa-static@5.0.0: resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==} engines: {node: '>= 7.6.0'} dependencies: - debug: 3.2.7 + debug: 3.2.7(supports-color@6.1.0) koa-send: 5.0.1 transitivePeerDependencies: - supports-color dev: true - /koa/2.14.2: + /koa@2.14.2: resolution: {integrity: sha512-VFI2bpJaodz6P7x2uyLiX6RLYpZmOJqNmoCst/Yyd7hQlszyPwG/I9CQJ63nOtKSxpt5M7NH67V6nJL2BwCl7g==} engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} dependencies: @@ -7726,7 +7683,7 @@ packages: content-disposition: 0.5.4 content-type: 1.0.5 cookies: 0.8.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) delegates: 1.0.0 depd: 2.0.0 destroy: 1.2.0 @@ -7748,17 +7705,17 @@ packages: - supports-color dev: true - /leven/2.1.0: + /leven@2.1.0: resolution: {integrity: sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==} engines: {node: '>=0.10.0'} dev: true - /leven/3.1.0: + /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} dev: true - /levn/0.3.0: + /levn@0.3.0: resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} engines: {node: '>= 0.8.0'} dependencies: @@ -7766,7 +7723,7 @@ packages: type-check: 0.3.2 dev: true - /levn/0.4.1: + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} dependencies: @@ -7774,16 +7731,16 @@ packages: type-check: 0.4.0 dev: true - /lilconfig/2.0.6: + /lilconfig@2.0.6: resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} engines: {node: '>=10'} dev: true - /lines-and-columns/1.2.4: + /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true - /lint-staged/13.1.2: + /lint-staged@13.1.2: resolution: {integrity: sha512-K9b4FPbWkpnupvK3WXZLbgu9pchUJ6N7TtVZjbaPsoizkqFUDkUReUL25xdrCljJs7uLUF3tZ7nVPeo/6lp+6w==} engines: {node: ^14.13.1 || >=16.0.0} hasBin: true @@ -7791,7 +7748,7 @@ packages: cli-truncate: 3.1.0 colorette: 2.0.19 commander: 9.5.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) execa: 6.1.0 lilconfig: 2.0.6 listr2: 5.0.7 @@ -7806,7 +7763,7 @@ packages: - supports-color dev: true - /listr2/5.0.7: + /listr2@5.0.7: resolution: {integrity: sha512-MD+qXHPmtivrHIDRwPYdfNkrzqDiuaKU/rfBcec3WMyMF3xylQj3jMq344OtvQxz7zaCFViRAeqlr2AFhPvXHw==} engines: {node: ^14.13.1 || >=16.0.0} peerDependencies: @@ -7825,17 +7782,17 @@ packages: wrap-ansi: 7.0.0 dev: true - /load-tsconfig/0.2.3: + /load-tsconfig@0.2.3: resolution: {integrity: sha512-iyT2MXws+dc2Wi6o3grCFtGXpeMvHmJqS27sMPGtV2eUu4PeFnG+33I8BlFK1t1NWMjOpcx9bridn5yxLDX2gQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /loader-runner/4.3.0: + /loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} dev: true - /loader-utils/2.0.4: + /loader-utils@2.0.4: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} engines: {node: '>=8.9.0'} dependencies: @@ -7844,7 +7801,7 @@ packages: json5: 2.2.3 dev: true - /locate-path/3.0.0: + /locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} dependencies: @@ -7852,89 +7809,91 @@ packages: path-exists: 3.0.0 dev: true - /locate-path/5.0.0: + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} dependencies: p-locate: 4.1.0 dev: true - /locate-path/6.0.0: + /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} dependencies: p-locate: 5.0.0 dev: true - /lodash.assignwith/4.2.0: + /lodash.assignwith@4.2.0: resolution: {integrity: sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==} dev: true - /lodash.camelcase/4.3.0: + /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true - /lodash.capitalize/4.2.1: + /lodash.capitalize@4.2.1: resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} dev: true - /lodash.debounce/4.0.8: + /lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: true - /lodash.escaperegexp/4.1.2: + /lodash.escaperegexp@4.1.2: resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} dev: true - /lodash.isplainobject/4.0.6: + /lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} dev: true - /lodash.isstring/4.0.1: + /lodash.isstring@4.0.1: resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} dev: true - /lodash.map/4.6.0: + /lodash.map@4.6.0: resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==} dev: true - /lodash.merge/4.6.2: + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true - /lodash.mergewith/4.6.2: + /lodash.mergewith@4.6.2: resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + requiresBuild: true dev: true optional: true - /lodash.sortby/4.7.0: + /lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} dev: true - /lodash.truncate/4.4.2: + /lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} dev: true - /lodash.uniq/4.5.0: + /lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + requiresBuild: true dev: true optional: true - /lodash.uniqby/4.7.0: + /lodash.uniqby@4.7.0: resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} dev: true - /lodash/4.17.21: + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - /log-symbols/4.1.0: + /log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - /log-update/4.0.0: + /log-update@4.0.0: resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} engines: {node: '>=10'} dependencies: @@ -7944,93 +7903,93 @@ packages: wrap-ansi: 6.2.0 dev: true - /loglevel/1.8.1: + /loglevel@1.8.1: resolution: {integrity: sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==} engines: {node: '>= 0.6.0'} dev: true - /longest/2.0.1: + /longest@2.0.1: resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==} engines: {node: '>=0.10.0'} dev: true - /lru-cache/5.1.1: + /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 dev: true - /lru-cache/6.0.0: + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 dev: true - /lru-cache/9.1.2: + /lru-cache@9.1.2: resolution: {integrity: sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==} engines: {node: 14 || >=16.14} dev: true - /make-dir/3.1.0: + /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} dependencies: semver: 6.3.0 dev: true - /make-error/1.3.6: + /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /makeerror/1.0.12: + /makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: tmpl: 1.0.5 dev: true - /map-cache/0.2.2: + /map-cache@0.2.2: resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} engines: {node: '>=0.10.0'} dev: true - /map-obj/1.0.1: + /map-obj@1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} dev: true - /map-obj/4.3.0: + /map-obj@4.3.0: resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} engines: {node: '>=8'} dev: true - /map-visit/1.0.0: + /map-visit@1.0.0: resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} engines: {node: '>=0.10.0'} dependencies: object-visit: 1.0.1 dev: true - /media-typer/0.3.0: + /media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} dev: true - /memfs/3.4.13: + /memfs@3.4.13: resolution: {integrity: sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==} engines: {node: '>= 4.0.0'} dependencies: fs-monkey: 1.0.3 dev: true - /memory-fs/0.4.1: + /memory-fs@0.4.1: resolution: {integrity: sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==} dependencies: errno: 0.1.8 readable-stream: 2.3.7 dev: true - /meow/8.1.2: + /meow@8.1.2: resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} engines: {node: '>=10'} dependencies: @@ -8047,50 +8006,50 @@ packages: yargs-parser: 20.2.9 dev: true - /merge-descriptors/1.0.1: + /merge-descriptors@1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} dev: true - /merge-stream/2.0.0: + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true - /merge/2.1.1: - resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} - dev: true - - /merge2/1.4.1: + /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} dev: true - /methods/1.1.2: + /merge@2.1.1: + resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} + dev: true + + /methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} dev: true - /micromatch/3.1.10_supports-color@6.1.0: + /micromatch@3.1.10(supports-color@6.1.0): resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} engines: {node: '>=0.10.0'} dependencies: arr-diff: 4.0.0 array-unique: 0.3.2 - braces: 2.3.2_supports-color@6.1.0 + braces: 2.3.2(supports-color@6.1.0) define-property: 2.0.2 extend-shallow: 3.0.2 - extglob: 2.0.4_supports-color@6.1.0 + extglob: 2.0.4(supports-color@6.1.0) fragment-cache: 0.2.1 kind-of: 6.0.3 - nanomatch: 1.2.13_supports-color@6.1.0 + nanomatch: 1.2.13(supports-color@6.1.0) object.pick: 1.3.0 regex-not: 1.0.2 - snapdragon: 0.8.2_supports-color@6.1.0 + snapdragon: 0.8.2(supports-color@6.1.0) to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true - /micromatch/4.0.5: + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: @@ -8098,62 +8057,62 @@ packages: picomatch: 2.3.1 dev: true - /mime-db/1.52.0: + /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} dev: true - /mime-types/2.1.35: + /mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 dev: true - /mime/1.6.0: + /mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} hasBin: true dev: true - /mime/2.6.0: + /mime@2.6.0: resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} engines: {node: '>=4.0.0'} hasBin: true dev: true - /mimic-fn/2.1.0: + /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - /mimic-fn/4.0.0: + /mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} dev: true - /min-indent/1.0.1: + /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} dev: true - /minimalistic-assert/1.0.1: + /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} dev: true - /minimatch/3.1.2: + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 dev: true - /minimatch/8.0.4: + /minimatch@8.0.4: resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 dev: true - /minimist-options/4.1.0: + /minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} dependencies: @@ -8162,25 +8121,25 @@ packages: kind-of: 6.0.3 dev: true - /minimist/1.2.7: + /minimist@1.2.7: resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} dev: true - /minimist/1.2.8: + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /minipass/4.2.8: + /minipass@4.2.8: resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} engines: {node: '>=8'} dev: true - /minipass/6.0.2: + /minipass@6.0.2: resolution: {integrity: sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==} engines: {node: '>=16 || 14 >=14.17'} dev: true - /mixin-deep/1.3.2: + /mixin-deep@1.3.2: resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} engines: {node: '>=0.10.0'} dependencies: @@ -8188,35 +8147,35 @@ packages: is-extendable: 1.0.1 dev: true - /mkdirp/0.5.6: + /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true dependencies: minimist: 1.2.8 dev: true - /mri/1.1.4: + /mri@1.1.4: resolution: {integrity: sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==} engines: {node: '>=4'} dev: true - /ms/2.0.0: + /ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: true - /ms/2.1.2: + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true - /ms/2.1.3: + /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true - /multicast-dns-service-types/1.1.0: + /multicast-dns-service-types@1.1.0: resolution: {integrity: sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==} dev: true - /multicast-dns/6.2.3: + /multicast-dns@6.2.3: resolution: {integrity: sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==} hasBin: true dependencies: @@ -8224,15 +8183,15 @@ packages: thunky: 1.1.0 dev: true - /mustache/4.2.0: + /mustache@4.2.0: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true dev: true - /mute-stream/0.0.8: + /mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - /mz/2.7.0: + /mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: any-promise: 1.3.0 @@ -8240,11 +8199,11 @@ packages: thenify-all: 1.6.0 dev: true - /nanocolors/0.2.13: + /nanocolors@0.2.13: resolution: {integrity: sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==} dev: true - /nanomatch/1.2.13_supports-color@6.1.0: + /nanomatch@1.2.13(supports-color@6.1.0): resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} engines: {node: '>=0.10.0'} dependencies: @@ -8257,39 +8216,39 @@ packages: kind-of: 6.0.3 object.pick: 1.3.0 regex-not: 1.0.2 - snapdragon: 0.8.2_supports-color@6.1.0 + snapdragon: 0.8.2(supports-color@6.1.0) to-regex: 3.0.2 transitivePeerDependencies: - supports-color dev: true - /natural-compare-lite/1.4.0: + /natural-compare-lite@1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} dev: true - /natural-compare/1.4.0: + /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /negotiator/0.6.3: + /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} dev: true - /neo-async/2.6.2: + /neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true - /nice-try/1.0.5: + /nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} dev: true - /node-domexception/1.0.0: + /node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} dev: false - /node-fetch/2.6.7: + /node-fetch@2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} peerDependencies: @@ -8301,7 +8260,7 @@ packages: whatwg-url: 5.0.0 dev: true - /node-fetch/2.6.9: + /node-fetch@2.6.9: resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} engines: {node: 4.x || >=6.0.0} peerDependencies: @@ -8313,20 +8272,20 @@ packages: whatwg-url: 5.0.0 dev: false - /node-forge/0.10.0: + /node-forge@0.10.0: resolution: {integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==} engines: {node: '>= 6.0.0'} dev: true - /node-int64/0.4.0: + /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /node-releases/2.0.10: + /node-releases@2.0.10: resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} dev: true - /normalize-package-data/2.5.0: + /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 @@ -8335,7 +8294,7 @@ packages: validate-npm-package-license: 3.0.4 dev: true - /normalize-package-data/3.0.3: + /normalize-package-data@3.0.3: resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} engines: {node: '>=10'} dependencies: @@ -8345,41 +8304,41 @@ packages: validate-npm-package-license: 3.0.4 dev: true - /normalize-path/3.0.0: + /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - /npm-run-path/2.0.2: + /npm-run-path@2.0.2: resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} engines: {node: '>=4'} dependencies: path-key: 2.0.1 dev: true - /npm-run-path/4.0.1: + /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} dependencies: path-key: 3.1.1 dev: true - /npm-run-path/5.1.0: + /npm-run-path@5.1.0: resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 dev: true - /nwsapi/2.2.2: + /nwsapi@2.2.2: resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} dev: true - /object-assign/4.1.1: + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} dev: true - /object-copy/0.1.0: + /object-copy@0.1.0: resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} engines: {node: '>=0.10.0'} dependencies: @@ -8388,11 +8347,11 @@ packages: kind-of: 3.2.2 dev: true - /object-inspect/1.12.3: + /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} dev: true - /object-is/1.1.5: + /object-is@1.1.5: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} engines: {node: '>= 0.4'} dependencies: @@ -8400,19 +8359,19 @@ packages: define-properties: 1.2.0 dev: true - /object-keys/1.1.1: + /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} dev: true - /object-visit/1.0.1: + /object-visit@1.0.1: resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true - /object.assign/4.1.4: + /object.assign@4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: @@ -8422,7 +8381,7 @@ packages: object-keys: 1.1.1 dev: true - /object.getownpropertydescriptors/2.1.5: + /object.getownpropertydescriptors@2.1.5: resolution: {integrity: sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==} engines: {node: '>= 0.8'} dependencies: @@ -8432,57 +8391,57 @@ packages: es-abstract: 1.21.1 dev: true - /object.pick/1.3.0: + /object.pick@1.3.0: resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true - /obuf/1.1.2: + /obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} dev: true - /on-exit-leak-free/0.2.0: + /on-exit-leak-free@0.2.0: resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} dev: true - /on-finished/2.4.1: + /on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} dependencies: ee-first: 1.1.1 dev: true - /on-headers/1.0.2: + /on-headers@1.0.2: resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} engines: {node: '>= 0.8'} dev: true - /once/1.4.0: + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 dev: true - /onetime/5.1.2: + /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - /onetime/6.0.0: + /onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 dev: true - /only/0.0.2: + /only@0.0.2: resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} dev: true - /open/8.4.2: + /open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} dependencies: @@ -8491,14 +8450,14 @@ packages: is-wsl: 2.2.0 dev: true - /opn/5.5.0: + /opn@5.5.0: resolution: {integrity: sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==} engines: {node: '>=4'} dependencies: is-wsl: 1.1.0 dev: true - /optionator/0.8.3: + /optionator@0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} dependencies: @@ -8510,7 +8469,7 @@ packages: word-wrap: 1.2.3 dev: true - /optionator/0.9.1: + /optionator@0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} engines: {node: '>= 0.8.0'} dependencies: @@ -8522,7 +8481,7 @@ packages: word-wrap: 1.2.3 dev: true - /ora/5.4.1: + /ora@5.4.1: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} dependencies: @@ -8536,78 +8495,78 @@ packages: strip-ansi: 6.0.1 wcwidth: 1.0.1 - /os-tmpdir/1.0.2: + /os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - /outvariant/1.4.0: + /outvariant@1.4.0: resolution: {integrity: sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==} - /p-finally/1.0.0: + /p-finally@1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} dev: true - /p-limit/2.3.0: + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} dependencies: p-try: 2.2.0 dev: true - /p-limit/3.1.0: + /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 dev: true - /p-locate/3.0.0: + /p-locate@3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} engines: {node: '>=6'} dependencies: p-limit: 2.3.0 dev: true - /p-locate/4.1.0: + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} dependencies: p-limit: 2.3.0 dev: true - /p-locate/5.0.0: + /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} dependencies: p-limit: 3.1.0 dev: true - /p-map/2.1.0: + /p-map@2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} dev: true - /p-map/4.0.0: + /p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} dependencies: aggregate-error: 3.1.0 dev: true - /p-retry/3.0.1: + /p-retry@3.0.1: resolution: {integrity: sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==} engines: {node: '>=6'} dependencies: retry: 0.12.0 dev: true - /p-try/2.2.0: + /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} dev: true - /page-with/0.6.1_mtsvlg4x4u5udzh2pohivgt4x4: + /page-with@0.6.1(@swc/core@1.3.35)(esbuild@0.17.19): resolution: {integrity: sha512-5J58fSpc8CKonUWCPsh8b2LctFrNSOpXQ8O3tB+/iJvixOQf1qHp4+cDLiIVsl/WiuheXdZTzMcuR0KLQMaWcg==} dependencies: '@open-draft/until': 2.1.0 @@ -8615,14 +8574,14 @@ packages: '@types/express': 4.17.17 '@types/mustache': 4.2.2 '@types/uuid': 8.3.4 - debug: 4.3.4 - express: 4.18.2 + debug: 4.3.4(supports-color@6.1.0) + express: 4.18.2(supports-color@6.1.0) headers-polyfill: 3.1.2 memfs: 3.4.13 mustache: 4.2.0 playwright: 1.30.0 uuid: 8.3.2 - webpack: 5.75.0_mtsvlg4x4u5udzh2pohivgt4x4 + webpack: 5.75.0(@swc/core@1.3.35)(esbuild@0.17.19) webpack-merge: 5.8.0 transitivePeerDependencies: - '@swc/core' @@ -8632,14 +8591,14 @@ packages: - webpack-cli dev: true - /parent-module/1.0.1: + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} dependencies: callsites: 3.1.0 dev: true - /parse-json/5.2.0: + /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: @@ -8649,70 +8608,70 @@ packages: lines-and-columns: 1.2.4 dev: true - /parse-passwd/1.0.0: + /parse-passwd@1.0.0: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} dev: true - /parse5/6.0.1: + /parse5@6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} dev: true - /parse5/7.1.2: + /parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: entities: 4.4.0 dev: true - /parseurl/1.3.3: + /parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} dev: true - /pascalcase/0.1.1: + /pascalcase@0.1.1: resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} engines: {node: '>=0.10.0'} dev: true - /path-exists/3.0.0: + /path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} dev: true - /path-exists/4.0.0: + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} dev: true - /path-is-absolute/1.0.1: + /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} dev: true - /path-is-inside/1.0.2: + /path-is-inside@1.0.2: resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} dev: true - /path-key/2.0.1: + /path-key@2.0.1: resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} engines: {node: '>=4'} dev: true - /path-key/3.1.1: + /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} dev: true - /path-key/4.0.0: + /path-key@4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} dev: true - /path-parse/1.0.7: + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-scurry/1.9.2: + /path-scurry@1.9.2: resolution: {integrity: sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==} engines: {node: '>=16 || 14 >=14.17'} dependencies: @@ -8720,63 +8679,63 @@ packages: minipass: 6.0.2 dev: true - /path-to-regexp/0.1.7: + /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: true - /path-to-regexp/6.2.1: + /path-to-regexp@6.2.1: resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} dev: false - /path-type/4.0.0: + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} dev: true - /picocolors/1.0.0: + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true - /picomatch/2.3.1: + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - /pidtree/0.6.0: + /pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} hasBin: true dev: true - /pify/2.3.0: + /pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} dev: true - /pify/4.0.1: + /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} dev: true - /pinkie-promise/2.0.1: + /pinkie-promise@2.0.1: resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} engines: {node: '>=0.10.0'} dependencies: pinkie: 2.0.4 dev: true - /pinkie/2.0.4: + /pinkie@2.0.4: resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} engines: {node: '>=0.10.0'} dev: true - /pino-abstract-transport/0.5.0: + /pino-abstract-transport@0.5.0: resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} dependencies: duplexify: 4.1.2 split2: 4.1.0 dev: true - /pino-pretty/7.6.1: + /pino-pretty@7.6.1: resolution: {integrity: sha512-H7N6ZYkiyrfwBGW9CSjx0uyO9Q2Lyt73881+OTYk8v3TiTdgN92QHrWlEq/LeWw5XtDP64jeSk3mnc6T+xX9/w==} hasBin: true dependencies: @@ -8795,11 +8754,11 @@ packages: strip-json-comments: 3.1.1 dev: true - /pino-std-serializers/4.0.0: + /pino-std-serializers@4.0.0: resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} dev: true - /pino/7.11.0: + /pino@7.11.0: resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} hasBin: true dependencies: @@ -8816,32 +8775,32 @@ packages: thread-stream: 0.15.2 dev: true - /pirates/4.0.5: + /pirates@4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} dev: true - /pkg-dir/3.0.0: + /pkg-dir@3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} engines: {node: '>=6'} dependencies: find-up: 3.0.0 dev: true - /pkg-dir/4.2.0: + /pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} dependencies: find-up: 4.1.0 dev: true - /playwright-core/1.30.0: + /playwright-core@1.30.0: resolution: {integrity: sha512-7AnRmTCf+GVYhHbLJsGUtskWTE33SwMZkybJ0v6rqR1boxq2x36U7p1vDRV7HO2IwTZgmycracLxPEJI49wu4g==} engines: {node: '>=14'} hasBin: true dev: true - /playwright/1.30.0: + /playwright@1.30.0: resolution: {integrity: sha512-ENbW5o75HYB3YhnMTKJLTErIBExrSlX2ZZ1C/FzmHjUYIfxj/UnI+DWpQr992m+OQVSg0rCExAOlRwB+x+yyIg==} engines: {node: '>=14'} hasBin: true @@ -8850,34 +8809,23 @@ packages: playwright-core: 1.30.0 dev: true - /portfinder/1.0.32: - resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} - engines: {node: '>= 0.12.0'} - dependencies: - async: 2.6.4 - debug: 3.2.7 - mkdirp: 0.5.6 - transitivePeerDependencies: - - supports-color - dev: true - - /portfinder/1.0.32_supports-color@6.1.0: + /portfinder@1.0.32(supports-color@6.1.0): resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} dependencies: async: 2.6.4 - debug: 3.2.7_supports-color@6.1.0 + debug: 3.2.7(supports-color@6.1.0) mkdirp: 0.5.6 transitivePeerDependencies: - supports-color dev: true - /posix-character-classes/0.1.1: + /posix-character-classes@0.1.1: resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} engines: {node: '>=0.10.0'} dev: true - /postcss-load-config/3.1.4_ts-node@10.9.1: + /postcss-load-config@3.1.4(ts-node@10.9.1): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -8890,34 +8838,34 @@ packages: optional: true dependencies: lilconfig: 2.0.6 - ts-node: 10.9.1_ucqeymrky72u6ak3savtol5egu + ts-node: 10.9.1(@swc/core@1.3.35)(@types/node@18.16.16)(typescript@5.0.2) yaml: 1.10.2 dev: true - /prelude-ls/1.1.2: + /prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} dev: true - /prelude-ls/1.2.1: + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} dev: true - /prettier-linter-helpers/1.0.0: + /prettier-linter-helpers@1.0.0: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} dependencies: fast-diff: 1.2.0 dev: true - /prettier/2.8.4: + /prettier@2.8.4: resolution: {integrity: sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==} engines: {node: '>=10.13.0'} hasBin: true dev: true - /pretty-format/29.4.3: + /pretty-format@29.4.3: resolution: {integrity: sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -8926,20 +8874,20 @@ packages: react-is: 18.2.0 dev: true - /process-nextick-args/2.0.1: + /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true - /process-warning/1.0.0: + /process-warning@1.0.0: resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} dev: true - /progress/2.0.3: + /progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} dev: true - /prompts/2.4.2: + /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} dependencies: @@ -8947,7 +8895,7 @@ packages: sisteransi: 1.0.5 dev: true - /proxy-addr/2.0.7: + /proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} dependencies: @@ -8955,77 +8903,77 @@ packages: ipaddr.js: 1.9.1 dev: true - /prr/1.0.1: + /prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} dev: true - /psl/1.9.0: + /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true - /pump/3.0.0: + /pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 dev: true - /punycode/1.3.2: + /punycode@1.3.2: resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} dev: true - /punycode/2.3.0: + /punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} dev: true - /q/1.5.1: + /q@1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} dev: true - /qs/6.11.0: + /qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.4 dev: true - /querystring/0.2.0: + /querystring@0.2.0: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. dev: true - /querystringify/2.2.0: + /querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} dev: true - /queue-microtask/1.2.3: + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true - /quick-format-unescaped/4.0.4: + /quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} dev: true - /quick-lru/4.0.1: + /quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} dev: true - /randombytes/2.1.0: + /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 dev: true - /range-parser/1.2.1: + /range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} dev: true - /raw-body/2.5.1: + /raw-body@2.5.1: resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} engines: {node: '>= 0.8'} dependencies: @@ -9035,7 +8983,7 @@ packages: unpipe: 1.0.0 dev: true - /rc/1.2.8: + /rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true dependencies: @@ -9045,11 +8993,11 @@ packages: strip-json-comments: 2.0.1 dev: true - /react-is/18.2.0: + /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true - /read-pkg-up/7.0.1: + /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} dependencies: @@ -9058,7 +9006,7 @@ packages: type-fest: 0.8.1 dev: true - /read-pkg/5.2.0: + /read-pkg@5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} dependencies: @@ -9068,7 +9016,7 @@ packages: type-fest: 0.6.0 dev: true - /readable-stream/2.3.7: + /readable-stream@2.3.7: resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} dependencies: core-util-is: 1.0.3 @@ -9080,7 +9028,7 @@ packages: util-deprecate: 1.0.2 dev: true - /readable-stream/3.6.0: + /readable-stream@3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} engines: {node: '>= 6'} dependencies: @@ -9088,18 +9036,18 @@ packages: string_decoder: 1.3.0 util-deprecate: 1.0.2 - /readdirp/3.4.0: + /readdirp@3.4.0: resolution: {integrity: sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 - /real-require/0.1.0: + /real-require@0.1.0: resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} engines: {node: '>= 12.13.0'} dev: true - /redent/3.0.0: + /redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} dependencies: @@ -9107,28 +9055,28 @@ packages: strip-indent: 3.0.0 dev: true - /regenerate-unicode-properties/10.1.0: + /regenerate-unicode-properties@10.1.0: resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} engines: {node: '>=4'} dependencies: regenerate: 1.4.2 dev: true - /regenerate/1.4.2: + /regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} dev: true - /regenerator-runtime/0.13.11: + /regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} dev: true - /regenerator-transform/0.15.1: + /regenerator-transform@0.15.1: resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} dependencies: '@babel/runtime': 7.20.13 dev: true - /regex-not/1.0.2: + /regex-not@1.0.2: resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} engines: {node: '>=0.10.0'} dependencies: @@ -9136,7 +9084,7 @@ packages: safe-regex: 1.1.0 dev: true - /regexp.prototype.flags/1.4.3: + /regexp.prototype.flags@1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} engines: {node: '>= 0.4'} dependencies: @@ -9145,12 +9093,12 @@ packages: functions-have-names: 1.2.3 dev: true - /regexpp/3.2.0: + /regexpp@3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} dev: true - /regexpu-core/5.3.1: + /regexpu-core@5.3.1: resolution: {integrity: sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ==} engines: {node: '>=4'} dependencies: @@ -9162,62 +9110,62 @@ packages: unicode-match-property-value-ecmascript: 2.1.0 dev: true - /registry-auth-token/4.2.2: + /registry-auth-token@4.2.2: resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==} engines: {node: '>=6.0.0'} dependencies: rc: 1.2.8 dev: true - /regjsparser/0.9.1: + /regjsparser@0.9.1: resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} hasBin: true dependencies: jsesc: 0.5.0 dev: true - /repeat-element/1.1.4: + /repeat-element@1.1.4: resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} engines: {node: '>=0.10.0'} dev: true - /repeat-string/1.6.1: + /repeat-string@1.6.1: resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} engines: {node: '>=0.10'} dev: true - /require-directory/2.1.1: + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - /require-from-string/2.0.2: + /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} dev: true - /require-main-filename/2.0.0: + /require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true - /requires-port/1.0.0: + /requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: true - /resolve-cwd/2.0.0: + /resolve-cwd@2.0.0: resolution: {integrity: sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==} engines: {node: '>=4'} dependencies: resolve-from: 3.0.0 dev: true - /resolve-cwd/3.0.0: + /resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 dev: true - /resolve-dir/1.0.1: + /resolve-dir@1.0.1: resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} engines: {node: '>=0.10.0'} dependencies: @@ -9225,29 +9173,29 @@ packages: global-modules: 1.0.0 dev: true - /resolve-from/3.0.0: + /resolve-from@3.0.0: resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} engines: {node: '>=4'} dev: true - /resolve-from/4.0.0: + /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} dev: true - /resolve-from/5.0.0: + /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} dev: true - /resolve-global/1.0.0: + /resolve-global@1.0.0: resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} engines: {node: '>=8'} dependencies: global-dirs: 0.1.1 dev: true - /resolve-path/1.4.0: + /resolve-path@1.4.0: resolution: {integrity: sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==} engines: {node: '>= 0.8'} dependencies: @@ -9255,17 +9203,17 @@ packages: path-is-absolute: 1.0.1 dev: true - /resolve-url/0.2.1: + /resolve-url@0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated dev: true - /resolve.exports/2.0.0: + /resolve.exports@2.0.0: resolution: {integrity: sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==} engines: {node: '>=10'} dev: true - /resolve/1.22.1: + /resolve@1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true dependencies: @@ -9274,47 +9222,47 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /restore-cursor/3.1.0: + /restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - /ret/0.1.15: + /ret@0.1.15: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} dev: true - /retry/0.12.0: + /retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} dev: true - /reusify/1.0.4: + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rfdc/1.3.0: + /rfdc@1.3.0: resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} dev: true - /rimraf/2.7.1: + /rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true dependencies: glob: 7.2.3 dev: true - /rimraf/3.0.2: + /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 dev: true - /rollup/2.79.1: + /rollup@2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} engines: {node: '>=10.0.0'} hasBin: true @@ -9322,7 +9270,7 @@ packages: fsevents: 2.3.2 dev: true - /rollup/3.24.0: + /rollup@3.24.0: resolution: {integrity: sha512-OgraHOIg2YpHQTjl0/ymWfFNBEyPucB7lmhXrQUh38qNOegxLapSPFs9sNr0qKR75awW41D93XafoR2QfhBdUQ==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true @@ -9330,29 +9278,29 @@ packages: fsevents: 2.3.2 dev: true - /run-async/2.4.1: + /run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} - /run-parallel/1.2.0: + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true - /rxjs/7.8.0: + /rxjs@7.8.0: resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: tslib: 2.5.0 - /safe-buffer/5.1.2: + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true - /safe-buffer/5.2.1: + /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - /safe-regex-test/1.0.0: + /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: call-bind: 1.0.2 @@ -9360,79 +9308,79 @@ packages: is-regex: 1.1.4 dev: true - /safe-regex/1.1.0: + /safe-regex@1.1.0: resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} dependencies: ret: 0.1.15 dev: true - /safe-stable-stringify/2.4.2: + /safe-stable-stringify@2.4.2: resolution: {integrity: sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA==} engines: {node: '>=10'} dev: true - /safer-buffer/2.1.2: + /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - /saxes/6.0.0: + /saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} dependencies: xmlchars: 2.2.0 dev: true - /schema-utils/1.0.0: + /schema-utils@1.0.0: resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==} engines: {node: '>= 4'} dependencies: ajv: 6.12.6 - ajv-errors: 1.0.1_ajv@6.12.6 - ajv-keywords: 3.5.2_ajv@6.12.6 + ajv-errors: 1.0.1(ajv@6.12.6) + ajv-keywords: 3.5.2(ajv@6.12.6) dev: true - /schema-utils/2.7.1: + /schema-utils@2.7.1: resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} engines: {node: '>= 8.9.0'} dependencies: '@types/json-schema': 7.0.11 ajv: 6.12.6 - ajv-keywords: 3.5.2_ajv@6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) dev: true - /schema-utils/3.1.1: + /schema-utils@3.1.1: resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} engines: {node: '>= 10.13.0'} dependencies: '@types/json-schema': 7.0.11 ajv: 6.12.6 - ajv-keywords: 3.5.2_ajv@6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) dev: true - /secure-json-parse/2.7.0: + /secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} dev: true - /select-hose/2.0.0: + /select-hose@2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} dev: true - /selfsigned/1.10.14: + /selfsigned@1.10.14: resolution: {integrity: sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==} dependencies: node-forge: 0.10.0 dev: true - /semver/5.7.1: + /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true dev: true - /semver/6.3.0: + /semver@6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true dev: true - /semver/7.3.7: + /semver@7.3.7: resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} engines: {node: '>=10'} hasBin: true @@ -9440,7 +9388,7 @@ packages: lru-cache: 6.0.0 dev: true - /semver/7.3.8: + /semver@7.3.8: resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} hasBin: true @@ -9448,11 +9396,11 @@ packages: lru-cache: 6.0.0 dev: true - /send/0.18.0: + /send@0.18.0(supports-color@6.1.0): resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} dependencies: - debug: 2.6.9 + debug: 2.6.9(supports-color@6.1.0) depd: 2.0.0 destroy: 1.2.0 encodeurl: 1.0.2 @@ -9469,40 +9417,19 @@ packages: - supports-color dev: true - /send/0.18.0_supports-color@6.1.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} - dependencies: - debug: 2.6.9_supports-color@6.1.0 - 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 - transitivePeerDependencies: - - supports-color - dev: true - - /serialize-javascript/6.0.1: + /serialize-javascript@6.0.1: resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} dependencies: randombytes: 2.1.0 dev: true - /serve-index/1.9.1_supports-color@6.1.0: + /serve-index@1.9.1(supports-color@6.1.0): resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} engines: {node: '>= 0.8.0'} dependencies: accepts: 1.3.8 batch: 0.6.1 - debug: 2.6.9_supports-color@6.1.0 + debug: 2.6.9(supports-color@6.1.0) escape-html: 1.0.3 http-errors: 1.6.3 mime-types: 2.1.35 @@ -9511,35 +9438,23 @@ packages: - supports-color dev: true - /serve-static/1.15.0: + /serve-static@1.15.0(supports-color@6.1.0): resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} dependencies: encodeurl: 1.0.2 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.18.0 + send: 0.18.0(supports-color@6.1.0) transitivePeerDependencies: - supports-color dev: true - /serve-static/1.15.0_supports-color@6.1.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} - dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.18.0_supports-color@6.1.0 - transitivePeerDependencies: - - supports-color - dev: true - - /set-blocking/2.0.0: + /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /set-value/2.0.1: + /set-value@2.0.1: resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} engines: {node: '>=0.10.0'} dependencies: @@ -9549,46 +9464,46 @@ packages: split-string: 3.1.0 dev: true - /setprototypeof/1.1.0: + /setprototypeof@1.1.0: resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} dev: true - /setprototypeof/1.2.0: + /setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} dev: true - /shallow-clone/3.0.1: + /shallow-clone@3.0.1: resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} engines: {node: '>=8'} dependencies: kind-of: 6.0.3 dev: true - /shebang-command/1.2.0: + /shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 dev: true - /shebang-command/2.0.0: + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 dev: true - /shebang-regex/1.0.0: + /shebang-regex@1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} dev: true - /shebang-regex/3.0.0: + /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} dev: true - /side-channel/1.0.4: + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 @@ -9596,25 +9511,25 @@ packages: object-inspect: 1.12.3 dev: true - /signal-exit/3.0.7: + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - /simple-git-hooks/2.8.1: + /simple-git-hooks@2.8.1: resolution: {integrity: sha512-DYpcVR1AGtSfFUNzlBdHrQGPsOhuuEJ/FkmPOOlFysP60AHd3nsEpkGq/QEOdtUyT1Qhk7w9oLmFoMG+75BDog==} hasBin: true requiresBuild: true dev: true - /sisteransi/1.0.5: + /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: true - /slash/3.0.0: + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} dev: true - /slice-ansi/3.0.0: + /slice-ansi@3.0.0: resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} engines: {node: '>=8'} dependencies: @@ -9623,7 +9538,7 @@ packages: is-fullwidth-code-point: 3.0.0 dev: true - /slice-ansi/4.0.0: + /slice-ansi@4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} dependencies: @@ -9632,7 +9547,7 @@ packages: is-fullwidth-code-point: 3.0.0 dev: true - /slice-ansi/5.0.0: + /slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} dependencies: @@ -9640,7 +9555,7 @@ packages: is-fullwidth-code-point: 4.0.0 dev: true - /snapdragon-node/2.1.1: + /snapdragon-node@2.1.1: resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} engines: {node: '>=0.10.0'} dependencies: @@ -9649,19 +9564,19 @@ packages: snapdragon-util: 3.0.1 dev: true - /snapdragon-util/3.0.1: + /snapdragon-util@3.0.1: resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /snapdragon/0.8.2_supports-color@6.1.0: + /snapdragon@0.8.2(supports-color@6.1.0): resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} engines: {node: '>=0.10.0'} dependencies: base: 0.11.2 - debug: 2.6.9_supports-color@6.1.0 + debug: 2.6.9(supports-color@6.1.0) define-property: 0.2.5 extend-shallow: 2.0.1 map-cache: 0.2.2 @@ -9672,7 +9587,7 @@ packages: - supports-color dev: true - /socket.io-adapter/2.5.2: + /socket.io-adapter@2.5.2: resolution: {integrity: sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==} dependencies: ws: 8.11.0 @@ -9681,23 +9596,23 @@ packages: - utf-8-validate dev: true - /socket.io-parser/4.2.2: + /socket.io-parser@4.2.2: resolution: {integrity: sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==} engines: {node: '>=10.0.0'} dependencies: '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) transitivePeerDependencies: - supports-color dev: true - /socket.io/4.6.0: + /socket.io@4.6.0: resolution: {integrity: sha512-b65bp6INPk/BMMrIgVvX12x3Q+NqlGqSlTuvKQWt0BUJ3Hyy3JangBl7fEoWZTXbOKlCqNPbQ6MbWgok/km28w==} engines: {node: '>=10.0.0'} dependencies: accepts: 1.3.8 base64id: 2.0.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) engine.io: 6.4.0 socket.io-adapter: 2.5.2 socket.io-parser: 4.2.2 @@ -9707,11 +9622,11 @@ packages: - utf-8-validate dev: true - /sockjs-client/1.6.1_supports-color@6.1.0: + /sockjs-client@1.6.1(supports-color@6.1.0): resolution: {integrity: sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==} engines: {node: '>=12'} dependencies: - debug: 3.2.7_supports-color@6.1.0 + debug: 3.2.7(supports-color@6.1.0) eventsource: 2.0.2 faye-websocket: 0.11.4 inherits: 2.0.4 @@ -9720,7 +9635,7 @@ packages: - supports-color dev: true - /sockjs/0.3.24: + /sockjs@0.3.24: resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} dependencies: faye-websocket: 0.11.4 @@ -9728,17 +9643,17 @@ packages: websocket-driver: 0.7.4 dev: true - /sonic-boom/2.8.0: + /sonic-boom@2.8.0: resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} dependencies: atomic-sleep: 1.0.0 dev: true - /source-list-map/2.0.1: + /source-list-map@2.0.1: resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} dev: true - /source-map-resolve/0.5.3: + /source-map-resolve@0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} deprecated: See https://github.com/lydell/source-map-resolve#deprecated dependencies: @@ -9749,72 +9664,72 @@ packages: urix: 0.1.0 dev: true - /source-map-support/0.5.13: + /source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: true - /source-map-support/0.5.21: + /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: true - /source-map-url/0.4.1: + /source-map-url@0.4.1: resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} deprecated: See https://github.com/lydell/source-map-url#deprecated dev: true - /source-map/0.5.7: + /source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} dev: true - /source-map/0.6.1: + /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} dev: true - /source-map/0.8.0-beta.0: + /source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} dependencies: whatwg-url: 7.1.0 dev: true - /spawn-error-forwarder/1.0.0: + /spawn-error-forwarder@1.0.0: resolution: {integrity: sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==} dev: true - /spdx-correct/3.1.1: + /spdx-correct@3.1.1: resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.12 dev: true - /spdx-exceptions/2.3.0: + /spdx-exceptions@2.3.0: resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} dev: true - /spdx-expression-parse/3.0.1: + /spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 spdx-license-ids: 3.0.12 dev: true - /spdx-license-ids/3.0.12: + /spdx-license-ids@3.0.12: resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} dev: true - /spdy-transport/3.0.0_supports-color@6.1.0: + /spdy-transport@3.0.0(supports-color@6.1.0): resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: - debug: 4.3.4_supports-color@6.1.0 + debug: 4.3.4(supports-color@6.1.0) detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -9824,55 +9739,55 @@ packages: - supports-color dev: true - /spdy/4.0.2_supports-color@6.1.0: + /spdy@4.0.2(supports-color@6.1.0): resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} dependencies: - debug: 4.3.4_supports-color@6.1.0 + debug: 4.3.4(supports-color@6.1.0) handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 - spdy-transport: 3.0.0_supports-color@6.1.0 + spdy-transport: 3.0.0(supports-color@6.1.0) transitivePeerDependencies: - supports-color dev: true - /split-string/3.1.0: + /split-string@3.1.0: resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} engines: {node: '>=0.10.0'} dependencies: extend-shallow: 3.0.2 dev: true - /split2/1.0.0: + /split2@1.0.0: resolution: {integrity: sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==} dependencies: through2: 2.0.5 dev: true - /split2/3.2.2: + /split2@3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: readable-stream: 3.6.0 dev: true - /split2/4.1.0: + /split2@4.1.0: resolution: {integrity: sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==} engines: {node: '>= 10.x'} dev: true - /sprintf-js/1.0.3: + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true - /stack-utils/2.0.6: + /stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 dev: true - /static-extend/0.1.2: + /static-extend@0.1.2: resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} engines: {node: '>=0.10.0'} dependencies: @@ -9880,46 +9795,46 @@ packages: object-copy: 0.1.0 dev: true - /statuses/1.5.0: + /statuses@1.5.0: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} dev: true - /statuses/2.0.1: + /statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - /stream-combiner2/1.1.1: + /stream-combiner2@1.1.1: resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} dependencies: duplexer2: 0.1.4 readable-stream: 2.3.7 dev: true - /stream-read-all/3.0.1: + /stream-read-all@3.0.1: resolution: {integrity: sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==} engines: {node: '>=10'} dev: true - /stream-shift/1.0.1: + /stream-shift@1.0.1: resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} dev: true - /streamsearch/1.1.0: + /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} dev: true - /strict-event-emitter/0.5.0: + /strict-event-emitter@0.5.0: resolution: {integrity: sha512-sqnMpVJLSB3daNO6FcvsEk4Mq5IJeAwDeH80DP1S8+pgxrF6yZnE1+VeapesGled7nEcIkz1Ax87HzaIy+02kA==} dev: false - /string-argv/0.3.1: + /string-argv@0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} engines: {node: '>=0.6.19'} dev: true - /string-length/4.0.2: + /string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} dependencies: @@ -9927,7 +9842,7 @@ packages: strip-ansi: 6.0.1 dev: true - /string-width/3.1.0: + /string-width@3.1.0: resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} engines: {node: '>=6'} dependencies: @@ -9936,7 +9851,7 @@ packages: strip-ansi: 5.2.0 dev: true - /string-width/4.2.3: + /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} dependencies: @@ -9944,7 +9859,7 @@ packages: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string-width/5.1.2: + /string-width@5.1.2: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} dependencies: @@ -9953,7 +9868,7 @@ packages: strip-ansi: 7.0.1 dev: true - /string.prototype.trimend/1.0.6: + /string.prototype.trimend@1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 @@ -9961,7 +9876,7 @@ packages: es-abstract: 1.21.1 dev: true - /string.prototype.trimstart/1.0.6: + /string.prototype.trimstart@1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 @@ -9969,82 +9884,82 @@ packages: es-abstract: 1.21.1 dev: true - /string_decoder/1.1.1: + /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 dev: true - /string_decoder/1.3.0: + /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 - /strip-ansi/3.0.1: + /strip-ansi@3.0.1: resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 dev: true - /strip-ansi/5.2.0: + /strip-ansi@5.2.0: resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} engines: {node: '>=6'} dependencies: ansi-regex: 4.1.1 dev: true - /strip-ansi/6.0.1: + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 - /strip-ansi/7.0.1: + /strip-ansi@7.0.1: resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 dev: true - /strip-bom/4.0.0: + /strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} dev: true - /strip-eof/1.0.0: + /strip-eof@1.0.0: resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} engines: {node: '>=0.10.0'} dev: true - /strip-final-newline/2.0.0: + /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} dev: true - /strip-final-newline/3.0.0: + /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} dev: true - /strip-indent/3.0.0: + /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} dependencies: min-indent: 1.0.1 dev: true - /strip-json-comments/2.0.1: + /strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} dev: true - /strip-json-comments/3.1.1: + /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} dev: true - /sucrase/3.29.0: + /sucrase@3.29.0: resolution: {integrity: sha512-bZPAuGA5SdFHuzqIhTAqt9fvNEo9rESqXIG3oiKdF8K4UmkQxC4KlNL3lVyAErXp+mPvUqZ5l13qx6TrDIGf3A==} engines: {node: '>=8'} hasBin: true @@ -10057,43 +9972,43 @@ packages: ts-interface-checker: 0.1.13 dev: true - /supports-color/5.5.0: + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} dependencies: has-flag: 3.0.0 dev: true - /supports-color/6.1.0: + /supports-color@6.1.0: resolution: {integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==} engines: {node: '>=6'} dependencies: has-flag: 3.0.0 dev: true - /supports-color/7.2.0: + /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - /supports-color/8.1.1: + /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 dev: true - /supports-preserve-symlinks-flag/1.0.0: + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true - /symbol-tree/3.2.4: + /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true - /table-layout/3.0.2: + /table-layout@3.0.2: resolution: {integrity: sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==} engines: {node: '>=12.17'} hasBin: true @@ -10107,7 +10022,7 @@ packages: wordwrapjs: 5.1.0 dev: true - /table/6.8.1: + /table@6.8.1: resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} engines: {node: '>=10.0.0'} dependencies: @@ -10118,12 +10033,12 @@ packages: strip-ansi: 6.0.1 dev: true - /tapable/2.2.1: + /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} dev: true - /terser-webpack-plugin/5.3.6_46rrhsymls7zkxn67al7zvwy5y: + /terser-webpack-plugin@5.3.6(@swc/core@1.3.35)(esbuild@0.17.19)(webpack@5.75.0): resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -10146,10 +10061,10 @@ packages: schema-utils: 3.1.1 serialize-javascript: 6.0.1 terser: 5.16.4 - webpack: 5.75.0_mtsvlg4x4u5udzh2pohivgt4x4 + webpack: 5.75.0(@swc/core@1.3.35)(esbuild@0.17.19) dev: true - /terser/5.16.4: + /terser@5.16.4: resolution: {integrity: sha512-5yEGuZ3DZradbogeYQ1NaGz7rXVBDWujWlx1PT8efXO6Txn+eWbfKqB2bTDVmFXmePFkoLU6XI8UektMIEA0ug==} engines: {node: '>=10'} hasBin: true @@ -10160,7 +10075,7 @@ packages: source-map-support: 0.5.21 dev: true - /test-exclude/6.0.0: + /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} dependencies: @@ -10169,77 +10084,77 @@ packages: minimatch: 3.1.2 dev: true - /text-extensions/1.9.0: + /text-extensions@1.9.0: resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} engines: {node: '>=0.10'} dev: true - /text-table/0.2.0: + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /thenify-all/1.6.0: + /thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 dev: true - /thenify/3.3.1: + /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 dev: true - /thread-stream/0.15.2: + /thread-stream@0.15.2: resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} dependencies: real-require: 0.1.0 dev: true - /through/2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - - /through2/2.0.5: + /through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: readable-stream: 2.3.7 xtend: 4.0.2 dev: true - /through2/4.0.2: + /through2@4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: readable-stream: 3.6.0 dev: true - /thunky/1.1.0: + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + /thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} dev: true - /tmp/0.0.33: + /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 - /tmpl/1.0.5: + /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true - /to-fast-properties/2.0.0: + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} dev: true - /to-object-path/0.3.0: + /to-object-path@0.3.0: resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /to-regex-range/2.1.1: + /to-regex-range@2.1.1: resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} engines: {node: '>=0.10.0'} dependencies: @@ -10247,13 +10162,13 @@ packages: repeat-string: 1.6.1 dev: true - /to-regex-range/5.0.1: + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - /to-regex/3.0.2: + /to-regex@3.0.2: resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} engines: {node: '>=0.10.0'} dependencies: @@ -10263,12 +10178,12 @@ packages: safe-regex: 1.1.0 dev: true - /toidentifier/1.0.1: + /toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} dev: true - /tough-cookie/4.1.2: + /tough-cookie@4.1.2: resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} engines: {node: '>=6'} dependencies: @@ -10278,41 +10193,41 @@ packages: url-parse: 1.5.10 dev: true - /tr46/0.0.3: + /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - /tr46/1.0.1: + /tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} dependencies: punycode: 2.3.0 dev: true - /tr46/3.0.0: + /tr46@3.0.0: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} dependencies: punycode: 2.3.0 dev: true - /traverse/0.6.7: + /traverse@0.6.7: resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} dev: true - /tree-kill/1.2.2: + /tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true dev: true - /trim-newlines/3.0.1: + /trim-newlines@3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} dev: true - /ts-interface-checker/0.1.13: + /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-node/10.9.1_e3mldq4edkmsxtnlaee6ja5nty: + /ts-node@10.9.1(@swc/core@1.3.35)(@types/node@18.16.16)(typescript@4.9.5): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -10344,7 +10259,7 @@ packages: yn: 3.1.1 dev: true - /ts-node/10.9.1_ucqeymrky72u6ak3savtol5egu: + /ts-node@10.9.1(@swc/core@1.3.35)(@types/node@18.16.16)(typescript@5.0.2): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -10376,19 +10291,19 @@ packages: yn: 3.1.1 dev: true - /tslib/1.14.1: + /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib/2.5.0: + /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - /tsscmp/1.0.6: + /tsscmp@1.0.6: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} dev: true - /tsup/6.7.0_4s7jzcjqpdttwnwh3e3glkuq6y: + /tsup@6.7.0(@swc/core@1.3.35)(ts-node@10.9.1)(typescript@5.0.2): resolution: {integrity: sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==} engines: {node: '>=14.18'} hasBin: true @@ -10405,15 +10320,15 @@ packages: optional: true dependencies: '@swc/core': 1.3.35 - bundle-require: 4.0.1_esbuild@0.17.19 + bundle-require: 4.0.1(esbuild@0.17.19) cac: 6.7.14 chokidar: 3.4.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@6.1.0) esbuild: 0.17.19 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 3.1.4_ts-node@10.9.1 + postcss-load-config: 3.1.4(ts-node@10.9.1) resolve-from: 5.0.0 rollup: 3.24.0 source-map: 0.8.0-beta.0 @@ -10425,7 +10340,7 @@ packages: - ts-node dev: true - /tsutils/3.21.0_typescript@5.0.2: + /tsutils@3.21.0(typescript@5.0.2): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: @@ -10435,55 +10350,55 @@ packages: typescript: 5.0.2 dev: true - /type-check/0.3.2: + /type-check@0.3.2: resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 dev: true - /type-check/0.4.0: + /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 dev: true - /type-detect/4.0.8: + /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} dev: true - /type-fest/0.18.1: + /type-fest@0.18.1: resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} engines: {node: '>=10'} dev: true - /type-fest/0.20.2: + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} dev: true - /type-fest/0.21.3: + /type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - /type-fest/0.6.0: + /type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} dev: true - /type-fest/0.8.1: + /type-fest@0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} dev: true - /type-fest/2.19.0: + /type-fest@2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} dev: false - /type-is/1.6.18: + /type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} dependencies: @@ -10491,7 +10406,7 @@ packages: mime-types: 2.1.35 dev: true - /typed-array-length/1.0.4: + /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: call-bind: 1.0.2 @@ -10499,29 +10414,29 @@ packages: is-typed-array: 1.1.10 dev: true - /typescript/4.9.5: + /typescript@4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} hasBin: true dev: true - /typescript/5.0.2: + /typescript@5.0.2: resolution: {integrity: sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==} engines: {node: '>=12.20'} hasBin: true dev: true - /typical/4.0.0: + /typical@4.0.0: resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} engines: {node: '>=8'} dev: true - /typical/7.1.1: + /typical@7.1.1: resolution: {integrity: sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==} engines: {node: '>=12.17'} dev: true - /unbox-primitive/1.0.2: + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: call-bind: 1.0.2 @@ -10530,19 +10445,19 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /undici/5.22.1: + /undici@5.22.1: resolution: {integrity: sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==} engines: {node: '>=14.0'} dependencies: busboy: 1.6.0 dev: true - /unicode-canonical-property-names-ecmascript/2.0.0: + /unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} dev: true - /unicode-match-property-ecmascript/2.0.0: + /unicode-match-property-ecmascript@2.0.0: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} dependencies: @@ -10550,17 +10465,17 @@ packages: unicode-property-aliases-ecmascript: 2.1.0 dev: true - /unicode-match-property-value-ecmascript/2.1.0: + /unicode-match-property-value-ecmascript@2.1.0: resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} engines: {node: '>=4'} dev: true - /unicode-property-aliases-ecmascript/2.1.0: + /unicode-property-aliases-ecmascript@2.1.0: resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} engines: {node: '>=4'} dev: true - /union-value/1.0.1: + /union-value@1.0.1: resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} engines: {node: '>=0.10.0'} dependencies: @@ -10570,22 +10485,22 @@ packages: set-value: 2.0.1 dev: true - /universalify/0.2.0: + /universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} dev: true - /universalify/2.0.0: + /universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} dev: true - /unpipe/1.0.0: + /unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} dev: true - /unset-value/1.0.0: + /unset-value@1.0.0: resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} engines: {node: '>=0.10.0'} dependencies: @@ -10593,7 +10508,7 @@ packages: isobject: 3.0.1 dev: true - /update-browserslist-db/1.0.10_browserslist@4.21.5: + /update-browserslist-db@1.0.10(browserslist@4.21.5): resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} hasBin: true peerDependencies: @@ -10604,18 +10519,18 @@ packages: picocolors: 1.0.0 dev: true - /uri-js/4.4.1: + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.0 dev: true - /urix/0.1.0: + /urix@0.1.0: resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} deprecated: Please see https://github.com/lydell/urix#deprecated dev: true - /url-loader/4.1.1_webpack@5.75.0: + /url-loader@4.1.1(webpack@5.75.0): resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -10628,32 +10543,32 @@ packages: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.1.1 - webpack: 5.75.0_mtsvlg4x4u5udzh2pohivgt4x4 + webpack: 5.75.0(@swc/core@1.3.35)(esbuild@0.17.19) dev: true - /url-parse/1.5.10: + /url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} dependencies: querystringify: 2.2.0 requires-port: 1.0.0 dev: true - /url/0.11.0: + /url@0.11.0: resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} dependencies: punycode: 1.3.2 querystring: 0.2.0 dev: true - /use/3.1.1: + /use@3.1.1: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} engines: {node: '>=0.10.0'} dev: true - /util-deprecate/1.0.2: + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - /util.promisify/1.1.1: + /util.promisify@1.1.1: resolution: {integrity: sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==} dependencies: call-bind: 1.0.2 @@ -10663,31 +10578,31 @@ packages: object.getownpropertydescriptors: 2.1.5 dev: true - /utils-merge/1.0.1: + /utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} dev: true - /uuid/3.4.0: + /uuid@3.4.0: resolution: {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. hasBin: true dev: true - /uuid/8.3.2: + /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true dev: true - /v8-compile-cache-lib/3.0.1: + /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /v8-compile-cache/2.3.0: + /v8-compile-cache@2.3.0: resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true - /v8-to-istanbul/9.1.0: + /v8-to-istanbul@9.1.0: resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} dependencies: @@ -10696,32 +10611,32 @@ packages: convert-source-map: 1.9.0 dev: true - /validate-npm-package-license/3.0.4: + /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: spdx-correct: 3.1.1 spdx-expression-parse: 3.0.1 dev: true - /vary/1.1.2: + /vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} dev: true - /w3c-xmlserializer/4.0.0: + /w3c-xmlserializer@4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} dependencies: xml-name-validator: 4.0.0 dev: true - /walker/1.0.8: + /walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 dev: true - /watchpack/2.4.0: + /watchpack@2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} dependencies: @@ -10729,35 +10644,35 @@ packages: graceful-fs: 4.2.10 dev: true - /wbuf/1.7.3: + /wbuf@1.7.3: resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} dependencies: minimalistic-assert: 1.0.1 dev: true - /wcwidth/1.0.1: + /wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 - /web-streams-polyfill/4.0.0-beta.3: + /web-streams-polyfill@4.0.0-beta.3: resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} engines: {node: '>= 14'} dev: false - /webidl-conversions/3.0.1: + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - /webidl-conversions/4.0.2: + /webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} dev: true - /webidl-conversions/7.0.0: + /webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} dev: true - /webpack-dev-middleware/3.7.3_webpack@5.75.0: + /webpack-dev-middleware@3.7.3(webpack@5.75.0): resolution: {integrity: sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==} engines: {node: '>= 6'} peerDependencies: @@ -10767,11 +10682,11 @@ packages: mime: 2.6.0 mkdirp: 0.5.6 range-parser: 1.2.1 - webpack: 5.75.0_mtsvlg4x4u5udzh2pohivgt4x4 + webpack: 5.75.0(@swc/core@1.3.35)(esbuild@0.17.19) webpack-log: 2.0.0 dev: true - /webpack-dev-server/3.11.3_webpack@5.75.0: + /webpack-dev-server@3.11.3(webpack@5.75.0): resolution: {integrity: sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==} engines: {node: '>= 6.11.5'} hasBin: true @@ -10785,13 +10700,13 @@ packages: ansi-html-community: 0.0.8 bonjour: 3.5.0 chokidar: 3.4.1 - compression: 1.7.4_supports-color@6.1.0 + compression: 1.7.4(supports-color@6.1.0) connect-history-api-fallback: 1.6.0 - debug: 4.3.4_supports-color@6.1.0 + debug: 4.3.4(supports-color@6.1.0) del: 4.1.1 - express: 4.18.2_supports-color@6.1.0 + express: 4.18.2(supports-color@6.1.0) html-entities: 1.4.0 - http-proxy-middleware: 0.19.1_tmpgdztspuwvsxzgjkhoqk7duq + http-proxy-middleware: 0.19.1(debug@4.3.4)(supports-color@6.1.0) import-local: 2.0.0 internal-ip: 4.3.0 ip: 1.1.8 @@ -10800,19 +10715,19 @@ packages: loglevel: 1.8.1 opn: 5.5.0 p-retry: 3.0.1 - portfinder: 1.0.32_supports-color@6.1.0 + portfinder: 1.0.32(supports-color@6.1.0) schema-utils: 1.0.0 selfsigned: 1.10.14 semver: 6.3.0 - serve-index: 1.9.1_supports-color@6.1.0 + serve-index: 1.9.1(supports-color@6.1.0) sockjs: 0.3.24 - sockjs-client: 1.6.1_supports-color@6.1.0 - spdy: 4.0.2_supports-color@6.1.0 + sockjs-client: 1.6.1(supports-color@6.1.0) + spdy: 4.0.2(supports-color@6.1.0) strip-ansi: 3.0.1 supports-color: 6.1.0 url: 0.11.0 - webpack: 5.75.0_mtsvlg4x4u5udzh2pohivgt4x4 - webpack-dev-middleware: 3.7.3_webpack@5.75.0 + webpack: 5.75.0(@swc/core@1.3.35)(esbuild@0.17.19) + webpack-dev-middleware: 3.7.3(webpack@5.75.0) webpack-log: 2.0.0 ws: 6.2.2 yargs: 13.3.2 @@ -10821,16 +10736,16 @@ packages: - utf-8-validate dev: true - /webpack-http-server/0.5.0_mtsvlg4x4u5udzh2pohivgt4x4: + /webpack-http-server@0.5.0(@swc/core@1.3.35)(esbuild@0.17.19): resolution: {integrity: sha512-kyewxAnzmDuZxe09fn/Bb0PeEnaDxHChYKFVsMy4oeBUs9Cyv2j1uEgzQJ7ljPFexLU8ongUS4i4O+e22CeBZQ==} dependencies: '@types/express': 4.17.17 '@types/mustache': 4.2.2 - express: 4.18.2 + express: 4.18.2(supports-color@6.1.0) memfs: 3.4.13 mustache: 4.2.0 outvariant: 1.4.0 - webpack: 5.75.0_mtsvlg4x4u5udzh2pohivgt4x4 + webpack: 5.75.0(@swc/core@1.3.35)(esbuild@0.17.19) transitivePeerDependencies: - '@swc/core' - esbuild @@ -10839,7 +10754,7 @@ packages: - webpack-cli dev: true - /webpack-log/2.0.0: + /webpack-log@2.0.0: resolution: {integrity: sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==} engines: {node: '>= 6'} dependencies: @@ -10847,7 +10762,7 @@ packages: uuid: 3.4.0 dev: true - /webpack-merge/5.8.0: + /webpack-merge@5.8.0: resolution: {integrity: sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==} engines: {node: '>=10.0.0'} dependencies: @@ -10855,19 +10770,19 @@ packages: wildcard: 2.0.0 dev: true - /webpack-sources/1.4.3: + /webpack-sources@1.4.3: resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} dependencies: source-list-map: 2.0.1 source-map: 0.6.1 dev: true - /webpack-sources/3.2.3: + /webpack-sources@3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} dev: true - /webpack/5.75.0_mtsvlg4x4u5udzh2pohivgt4x4: + /webpack@5.75.0(@swc/core@1.3.35)(esbuild@0.17.19): resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} engines: {node: '>=10.13.0'} hasBin: true @@ -10883,7 +10798,7 @@ packages: '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 acorn: 8.8.2 - acorn-import-assertions: 1.8.0_acorn@8.8.2 + acorn-import-assertions: 1.8.0(acorn@8.8.2) browserslist: 4.21.5 chrome-trace-event: 1.0.3 enhanced-resolve: 5.12.0 @@ -10898,7 +10813,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.1.1 tapable: 2.2.1 - terser-webpack-plugin: 5.3.6_46rrhsymls7zkxn67al7zvwy5y + terser-webpack-plugin: 5.3.6(@swc/core@1.3.35)(esbuild@0.17.19)(webpack@5.75.0) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -10907,7 +10822,7 @@ packages: - uglify-js dev: true - /websocket-driver/0.7.4: + /websocket-driver@0.7.4: resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} engines: {node: '>=0.8.0'} dependencies: @@ -10916,24 +10831,24 @@ packages: websocket-extensions: 0.1.4 dev: true - /websocket-extensions/0.1.4: + /websocket-extensions@0.1.4: resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} engines: {node: '>=0.8.0'} dev: true - /whatwg-encoding/2.0.0: + /whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} dependencies: iconv-lite: 0.6.3 dev: true - /whatwg-mimetype/3.0.0: + /whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} dev: true - /whatwg-url/11.0.0: + /whatwg-url@11.0.0: resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} engines: {node: '>=12'} dependencies: @@ -10941,13 +10856,13 @@ packages: webidl-conversions: 7.0.0 dev: true - /whatwg-url/5.0.0: + /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - /whatwg-url/7.1.0: + /whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} dependencies: lodash.sortby: 4.7.0 @@ -10955,7 +10870,7 @@ packages: webidl-conversions: 4.0.2 dev: true - /which-boxed-primitive/1.0.2: + /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 @@ -10965,11 +10880,11 @@ packages: is-symbol: 1.0.4 dev: true - /which-module/2.0.0: + /which-module@2.0.0: resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} dev: true - /which-typed-array/1.1.9: + /which-typed-array@1.1.9: resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} engines: {node: '>= 0.4'} dependencies: @@ -10981,14 +10896,14 @@ packages: is-typed-array: 1.1.10 dev: true - /which/1.3.1: + /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true dependencies: isexe: 2.0.0 dev: true - /which/2.0.2: + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true @@ -10996,21 +10911,21 @@ packages: isexe: 2.0.0 dev: true - /wildcard/2.0.0: + /wildcard@2.0.0: resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==} dev: true - /word-wrap/1.2.3: + /word-wrap@1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true - /wordwrapjs/5.1.0: + /wordwrapjs@5.1.0: resolution: {integrity: sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==} engines: {node: '>=12.17'} dev: true - /wrap-ansi/5.1.0: + /wrap-ansi@5.1.0: resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} engines: {node: '>=6'} dependencies: @@ -11019,7 +10934,7 @@ packages: strip-ansi: 5.2.0 dev: true - /wrap-ansi/6.2.0: + /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} dependencies: @@ -11028,7 +10943,7 @@ packages: strip-ansi: 6.0.1 dev: true - /wrap-ansi/7.0.0: + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} dependencies: @@ -11036,11 +10951,11 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 - /wrappy/1.0.2: + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /write-file-atomic/4.0.2: + /write-file-atomic@4.0.2: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: @@ -11048,7 +10963,7 @@ packages: signal-exit: 3.0.7 dev: true - /ws/6.2.2: + /ws@6.2.2: resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} peerDependencies: bufferutil: ^4.0.1 @@ -11062,7 +10977,7 @@ packages: async-limiter: 1.0.1 dev: true - /ws/7.5.9: + /ws@7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} peerDependencies: @@ -11075,7 +10990,7 @@ packages: optional: true dev: true - /ws/8.11.0: + /ws@8.11.0: resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} engines: {node: '>=10.0.0'} peerDependencies: @@ -11088,69 +11003,69 @@ packages: optional: true dev: true - /xml-name-validator/4.0.0: + /xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} dev: true - /xmlchars/2.2.0: + /xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true - /xtend/4.0.2: + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} dev: true - /y18n/4.0.3: + /y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} dev: true - /y18n/5.0.8: + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - /yallist/3.1.1: + /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true - /yallist/4.0.0: + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true - /yaml/1.10.2: + /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} dev: true - /yaml/2.2.1: + /yaml@2.2.1: resolution: {integrity: sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==} engines: {node: '>= 14'} dev: true - /yargs-parser/10.1.0: + /yargs-parser@10.1.0: resolution: {integrity: sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==} dependencies: camelcase: 4.1.0 dev: true - /yargs-parser/13.1.2: + /yargs-parser@13.1.2: resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} dependencies: camelcase: 5.3.1 decamelize: 1.2.0 dev: true - /yargs-parser/20.2.9: + /yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} dev: true - /yargs-parser/21.1.1: + /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - /yargs/13.3.2: + /yargs@13.3.2: resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==} dependencies: cliui: 5.0.0 @@ -11165,7 +11080,7 @@ packages: yargs-parser: 13.1.2 dev: true - /yargs/17.7.0: + /yargs@17.7.0: resolution: {integrity: sha512-dwqOPg5trmrre9+v8SUo2q/hAwyKoVfu8OC1xPHKJGNdxAvPl4sKxL4vBnh3bQz/ZvvGAFeA5H3ou2kcOY8sQQ==} engines: {node: '>=12'} dependencies: @@ -11177,17 +11092,17 @@ packages: y18n: 5.0.8 yargs-parser: 21.1.1 - /ylru/1.3.2: + /ylru@1.3.2: resolution: {integrity: sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==} engines: {node: '>= 4.0.0'} dev: true - /yn/3.1.1: + /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} dev: true - /yocto-queue/0.1.0: + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true diff --git a/src/core/NetworkError.ts b/src/core/NetworkError.ts index f07dc2780..c169d738a 100644 --- a/src/core/NetworkError.ts +++ b/src/core/NetworkError.ts @@ -3,9 +3,9 @@ * processing a request. * * @example - * import { rest, NetworkError } from 'msw' + * import { http, NetworkError } from 'msw' * - * rest.get('/user', () => { + * http.get('/user', () => { * throw new NetworkError('Failed to fetch') * }) */ diff --git a/src/core/handlers/RestHandler.test.ts b/src/core/handlers/HttpHandler.test.ts similarity index 84% rename from src/core/handlers/RestHandler.test.ts rename to src/core/handlers/HttpHandler.test.ts index d5d9ba94e..2ba461c52 100644 --- a/src/core/handlers/RestHandler.test.ts +++ b/src/core/handlers/HttpHandler.test.ts @@ -1,19 +1,19 @@ /** * @jest-environment jsdom */ -import { RestHandler, RestRequestResolverExtras } from './RestHandler' +import { HttpHandler, HttpRequestResolverExtras } from './HttpHandler' import { HttpResponse } from '..' import { ResponseResolver } from './RequestHandler' const resolver: ResponseResolver< - RestRequestResolverExtras<{ userId: string }> + HttpRequestResolverExtras<{ userId: string }> > = ({ params }) => { return HttpResponse.json({ userId: params.userId }) } describe('info', () => { test('exposes request handler information', () => { - const handler = new RestHandler('GET', '/user/:userId', resolver) + const handler = new HttpHandler('GET', '/user/:userId', resolver) expect(handler.info.header).toEqual('GET /user/:userId') expect(handler.info.method).toEqual('GET') @@ -24,7 +24,7 @@ describe('info', () => { describe('parse', () => { test('parses a URL given a matching request', async () => { - const handler = new RestHandler('GET', '/user/:userId', resolver) + const handler = new HttpHandler('GET', '/user/:userId', resolver) const request = new Request(new URL('/user/abc-123', location.href)) expect(await handler.parse(request)).toEqual({ @@ -39,7 +39,7 @@ describe('parse', () => { }) test('parses a URL and ignores the request method', async () => { - const handler = new RestHandler('GET', '/user/:userId', resolver) + const handler = new HttpHandler('GET', '/user/:userId', resolver) const request = new Request(new URL('/user/def-456', location.href), { method: 'POST', }) @@ -56,7 +56,7 @@ describe('parse', () => { }) test('returns negative match result given a non-matching request', async () => { - const handler = new RestHandler('GET', '/user/:userId', resolver) + const handler = new HttpHandler('GET', '/user/:userId', resolver) const request = new Request(new URL('/login', location.href)) expect(await handler.parse(request)).toEqual({ @@ -71,7 +71,7 @@ describe('parse', () => { describe('predicate', () => { test('returns true given a matching request', async () => { - const handler = new RestHandler('POST', '/login', resolver) + const handler = new HttpHandler('POST', '/login', resolver) const request = new Request(new URL('/login', location.href), { method: 'POST', }) @@ -80,7 +80,7 @@ describe('predicate', () => { }) test('respects RegExp as the request method', async () => { - const handler = new RestHandler(/.+/, '/login', resolver) + const handler = new HttpHandler(/.+/, '/login', resolver) const requests = [ new Request(new URL('/login', location.href)), new Request(new URL('/login', location.href), { method: 'POST' }), @@ -95,7 +95,7 @@ describe('predicate', () => { }) test('returns false given a non-matching request', async () => { - const handler = new RestHandler('POST', '/login', resolver) + const handler = new HttpHandler('POST', '/login', resolver) const request = new Request(new URL('/user/abc-123', location.href)) expect(handler.predicate(request, await handler.parse(request))).toBe(false) @@ -104,7 +104,7 @@ describe('predicate', () => { describe('test', () => { test('returns true given a matching request', async () => { - const handler = new RestHandler('GET', '/user/:userId', resolver) + const handler = new HttpHandler('GET', '/user/:userId', resolver) const firstTest = await handler.test( new Request(new URL('/user/abc-123', location.href)), ) @@ -117,7 +117,7 @@ describe('test', () => { }) test('returns false given a non-matching request', async () => { - const handler = new RestHandler('GET', '/user/:userId', resolver) + const handler = new HttpHandler('GET', '/user/:userId', resolver) const firstTest = await handler.test( new Request(new URL('/login', location.href)), ) @@ -136,7 +136,7 @@ describe('test', () => { describe('run', () => { test('returns a mocked response given a matching request', async () => { - const handler = new RestHandler('GET', '/user/:userId', resolver) + const handler = new HttpHandler('GET', '/user/:userId', resolver) const request = new Request(new URL('/user/abc-123', location.href)) const result = await handler.run(request) @@ -158,7 +158,7 @@ describe('run', () => { }) test('returns null given a non-matching request', async () => { - const handler = new RestHandler('POST', '/login', resolver) + const handler = new HttpHandler('POST', '/login', resolver) const result = await handler.run( new Request(new URL('/users', location.href)), ) @@ -167,7 +167,7 @@ describe('run', () => { }) test('returns an empty "params" object given request with no URL parameters', async () => { - const handler = new RestHandler('GET', '/users', resolver) + const handler = new HttpHandler('GET', '/users', resolver) const result = await handler.run( new Request(new URL('/users', location.href)), ) @@ -176,7 +176,7 @@ describe('run', () => { }) test('exhauses resolver until its generator completes', async () => { - const handler = new RestHandler('GET', '/users', function* () { + const handler = new HttpHandler('GET', '/users', function* () { let count = 0 while (count < 5) { diff --git a/src/core/handlers/RestHandler.ts b/src/core/handlers/HttpHandler.ts similarity index 86% rename from src/core/handlers/RestHandler.ts rename to src/core/handlers/HttpHandler.ts index 148453675..53e2a97ec 100644 --- a/src/core/handlers/RestHandler.ts +++ b/src/core/handlers/HttpHandler.ts @@ -21,14 +21,14 @@ import { ResponseResolver, } from './RequestHandler' -type RestHandlerMethod = string | RegExp +type HttpHandlerMethod = string | RegExp -export interface RestHandlerInfo extends RequestHandlerDefaultInfo { - method: RestHandlerMethod +export interface HttpHandlerInfo extends RequestHandlerDefaultInfo { + method: HttpHandlerMethod path: Path } -export enum RESTMethods { +export enum HttpMethods { HEAD = 'HEAD', GET = 'GET', POST = 'POST', @@ -42,29 +42,29 @@ export type RequestQuery = { [queryName: string]: string } -export type RestRequestParsedResult = { +export type HttpRequestParsedResult = { match: Match cookies: Record } -export type RestRequestResolverExtras = { +export type HttpRequestResolverExtras = { params: Params cookies: Record> } /** - * Request handler for REST API requests. + * Request handler for HTTP requests. * Provides request matching based on method and URL. */ -export class RestHandler extends RequestHandler< - RestHandlerInfo, - RestRequestParsedResult, - RestRequestResolverExtras +export class HttpHandler extends RequestHandler< + HttpHandlerInfo, + HttpRequestParsedResult, + HttpRequestResolverExtras > { constructor( - method: RestHandlerMethod, + method: HttpHandlerMethod, path: Path, - resolver: ResponseResolver, any, any>, + resolver: ResponseResolver, any, any>, options?: RequestHandlerPublicOptions, ) { super({ @@ -121,7 +121,7 @@ export class RestHandler extends RequestHandler< } } - predicate(request: Request, parsedResult: RestRequestParsedResult) { + predicate(request: Request, parsedResult: HttpRequestParsedResult) { const hasMatchingMethod = this.matchMethod(request.method) const hasMatchingUrl = parsedResult.match.matches return hasMatchingMethod && hasMatchingUrl @@ -135,7 +135,7 @@ export class RestHandler extends RequestHandler< protected extendInfo( _request: Request, - parsedResult: RestRequestParsedResult, + parsedResult: HttpRequestParsedResult, ) { return { params: parsedResult.match?.params || {}, diff --git a/src/core/rest.spec.ts b/src/core/http.spec.ts similarity index 61% rename from src/core/rest.spec.ts rename to src/core/http.spec.ts index c44f0a85e..8bc2bdc2d 100644 --- a/src/core/rest.spec.ts +++ b/src/core/http.spec.ts @@ -1,8 +1,8 @@ -import { rest } from './rest' +import { http } from './http' test('exports all REST API methods', () => { - expect(rest).toBeDefined() - expect(Object.keys(rest)).toEqual([ + expect(http).toBeDefined() + expect(Object.keys(http)).toEqual([ 'all', 'head', 'get', diff --git a/src/core/http.ts b/src/core/http.ts new file mode 100644 index 000000000..7423ae1c3 --- /dev/null +++ b/src/core/http.ts @@ -0,0 +1,42 @@ +import { + DefaultBodyType, + RequestHandlerPublicOptions, + ResponseResolver, +} from './handlers/RequestHandler' +import { + HttpMethods, + HttpHandler, + HttpRequestResolverExtras, +} from './handlers/HttpHandler' +import type { Path, PathParams } from './utils/matching/matchRequestUrl' + +function createHttpHandler( + method: Method, +) { + return < + Params extends PathParams = PathParams, + RequestBodyType extends DefaultBodyType = DefaultBodyType, + ResponseBodyType extends DefaultBodyType = undefined, + >( + path: Path, + resolver: ResponseResolver< + HttpRequestResolverExtras, + RequestBodyType, + ResponseBodyType + >, + options: RequestHandlerPublicOptions = {}, + ) => { + return new HttpHandler(method, path, resolver, options) + } +} + +export const http = { + all: createHttpHandler(/.+/), + head: createHttpHandler(HttpMethods.HEAD), + get: createHttpHandler(HttpMethods.GET), + post: createHttpHandler(HttpMethods.POST), + put: createHttpHandler(HttpMethods.PUT), + delete: createHttpHandler(HttpMethods.DELETE), + patch: createHttpHandler(HttpMethods.PATCH), + options: createHttpHandler(HttpMethods.OPTIONS), +} diff --git a/src/core/index.ts b/src/core/index.ts index e120805c2..799f6e353 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -4,8 +4,8 @@ export { SetupApi } from './SetupApi' /* Request handlers */ export { RequestHandler } from './handlers/RequestHandler' -export { rest } from './rest' -export { RestHandler, RESTMethods } from './handlers/RestHandler' +export { http } from './http' +export { HttpHandler, HttpMethods } from './handlers/HttpHandler' export { graphql } from './graphql' export { GraphQLHandler } from './handlers/GraphQLHandler' @@ -30,8 +30,8 @@ export type { export type { RequestQuery, - RestRequestParsedResult, -} from './handlers/RestHandler' + HttpRequestParsedResult, +} from './handlers/HttpHandler' export type { GraphQLVariables, diff --git a/src/core/passthrough.ts b/src/core/passthrough.ts index 9805e6cf0..3ba069a5e 100644 --- a/src/core/passthrough.ts +++ b/src/core/passthrough.ts @@ -3,7 +3,7 @@ * Unlike `bypass()`, this will not trigger an additional request. * * @example - * rest.get('/user', () => { + * http.get('/user', () => { * return passthrough() * }) */ diff --git a/src/core/rest.ts b/src/core/rest.ts deleted file mode 100644 index 69d86e7fd..000000000 --- a/src/core/rest.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { - DefaultBodyType, - RequestHandlerPublicOptions, - ResponseResolver, -} from './handlers/RequestHandler' -import { - RESTMethods, - RestHandler, - RestRequestResolverExtras, -} from './handlers/RestHandler' -import type { Path, PathParams } from './utils/matching/matchRequestUrl' - -function createRestHandler( - method: Method, -) { - return < - Params extends PathParams = PathParams, - RequestBodyType extends DefaultBodyType = DefaultBodyType, - ResponseBodyType extends DefaultBodyType = undefined, - >( - path: Path, - resolver: ResponseResolver< - RestRequestResolverExtras, - RequestBodyType, - ResponseBodyType - >, - options: RequestHandlerPublicOptions = {}, - ) => { - return new RestHandler(method, path, resolver, options) - } -} - -export const rest = { - all: createRestHandler(/.+/), - head: createRestHandler(RESTMethods.HEAD), - get: createRestHandler(RESTMethods.GET), - post: createRestHandler(RESTMethods.POST), - put: createRestHandler(RESTMethods.PUT), - delete: createRestHandler(RESTMethods.DELETE), - patch: createRestHandler(RESTMethods.PATCH), - options: createRestHandler(RESTMethods.OPTIONS), -} diff --git a/src/core/utils/handleRequest.test.ts b/src/core/utils/handleRequest.test.ts index b1dda47bc..5c5b7c613 100644 --- a/src/core/utils/handleRequest.test.ts +++ b/src/core/utils/handleRequest.test.ts @@ -5,7 +5,7 @@ import { Headers } from 'headers-polyfill' import { Emitter } from 'strict-event-emitter' import { LifeCycleEventsMap, SharedOptions } from '../sharedOptions' import { RequestHandler } from '../handlers/RequestHandler' -import { rest } from '../rest' +import { http } from '../http' import { handleRequest, HandleRequestOptions } from './handleRequest' import { RequiredDeep } from '../typeUtils' import { uuidv4 } from './internal/uuidv4' @@ -88,7 +88,7 @@ test('does not bypass a request with "x-msw-intention" header set to arbitrary v }), }) const handlers: Array = [ - rest.get('/user', () => { + http.get('/user', () => { return HttpResponse.text('hello world') }), ] @@ -143,7 +143,7 @@ test('returns undefined on a request handler that returns no response', async () const requestId = uuidv4() const request = new Request(new URL('http://localhost/user')) const handlers: Array = [ - rest.get('/user', () => { + http.get('/user', () => { // Intentionally blank response resolver. return }), @@ -180,7 +180,7 @@ test('returns the mocked response for a request with a matching request handler' const request = new Request(new URL('http://localhost/user')) const mockedResponse = HttpResponse.json({ firstName: 'John' }) const handlers: Array = [ - rest.get('/user', () => { + http.get('/user', () => { return mockedResponse }), ] @@ -238,7 +238,7 @@ test('returns a transformed response if the "transformResponse" option is provid const request = new Request(new URL('http://localhost/user')) const mockedResponse = HttpResponse.json({ firstName: 'John' }) const handlers: Array = [ - rest.get('/user', () => { + http.get('/user', () => { return mockedResponse }), ] @@ -320,7 +320,7 @@ it('returns undefined without warning on a passthrough request', async () => { const requestId = uuidv4() const request = new Request(new URL('http://localhost/user')) const handlers: Array = [ - rest.get('/user', () => { + http.get('/user', () => { return passthrough() }), ] diff --git a/src/core/utils/request/onUnhandledRequest.test.ts b/src/core/utils/request/onUnhandledRequest.test.ts index c416633ed..48c0123cd 100644 --- a/src/core/utils/request/onUnhandledRequest.test.ts +++ b/src/core/utils/request/onUnhandledRequest.test.ts @@ -5,7 +5,7 @@ import { onUnhandledRequest, UnhandledRequestCallback, } from './onUnhandledRequest' -import { RestHandler, RESTMethods } from '../../handlers/RestHandler' +import { HttpHandler, HttpMethods } from '../../handlers/HttpHandler' import { ResponseResolver } from '../../handlers/RequestHandler' const resolver: ResponseResolver = () => void 0 @@ -143,8 +143,8 @@ test('does not print any suggestions given no handlers are similar', async () => [ // None of the defined request handlers match the actual request URL // to be used as suggestions. - new RestHandler(RESTMethods.GET, 'https://api.github.com', resolver), - new RestHandler(RESTMethods.GET, 'https://api.stripe.com', resolver), + new HttpHandler(HttpMethods.GET, 'https://api.github.com', resolver), + new HttpHandler(HttpMethods.GET, 'https://api.stripe.com', resolver), ], 'warn', ) @@ -155,7 +155,7 @@ test('does not print any suggestions given no handlers are similar', async () => test('respects RegExp as a request handler method', async () => { await onUnhandledRequest( new Request(new URL('http://localhost/api')), - [new RestHandler(/^GE/, 'http://localhost/api', resolver)], + [new HttpHandler(/^GE/, 'http://localhost/api', resolver)], 'warn', ) @@ -166,9 +166,9 @@ test('sorts the suggestions by relevance', async () => { await onUnhandledRequest( new Request(new URL('http://localhost/api')), [ - new RestHandler(RESTMethods.GET, '/', resolver), - new RestHandler(RESTMethods.GET, 'https://api.example.com/api', resolver), - new RestHandler(RESTMethods.POST, '/api', resolver), + new HttpHandler(HttpMethods.GET, '/', resolver), + new HttpHandler(HttpMethods.GET, 'https://api.example.com/api', resolver), + new HttpHandler(HttpMethods.POST, '/api', resolver), ], 'warn', ) @@ -184,12 +184,12 @@ test('does not print more than 4 suggestions', async () => { await onUnhandledRequest( new Request(new URL('http://localhost/api')), [ - new RestHandler(RESTMethods.GET, '/ap', resolver), - new RestHandler(RESTMethods.GET, '/api', resolver), - new RestHandler(RESTMethods.GET, '/api-1', resolver), - new RestHandler(RESTMethods.GET, '/api-2', resolver), - new RestHandler(RESTMethods.GET, '/api-3', resolver), - new RestHandler(RESTMethods.GET, '/api-4', resolver), + new HttpHandler(HttpMethods.GET, '/ap', resolver), + new HttpHandler(HttpMethods.GET, '/api', resolver), + new HttpHandler(HttpMethods.GET, '/api-1', resolver), + new HttpHandler(HttpMethods.GET, '/api-2', resolver), + new HttpHandler(HttpMethods.GET, '/api-3', resolver), + new HttpHandler(HttpMethods.GET, '/api-4', resolver), ], 'warn', ) diff --git a/src/core/utils/request/onUnhandledRequest.ts b/src/core/utils/request/onUnhandledRequest.ts index b5260cac2..3ddef41fb 100644 --- a/src/core/utils/request/onUnhandledRequest.ts +++ b/src/core/utils/request/onUnhandledRequest.ts @@ -1,6 +1,6 @@ // @ts-ignore import jsLevenshtein from '@bundled-es-modules/js-levenshtein' -import { RequestHandler, RestHandler, GraphQLHandler } from '../..' +import { RequestHandler, HttpHandler, GraphQLHandler } from '../..' import { ParsedGraphQLQuery, parseGraphQLRequest, @@ -32,7 +32,7 @@ export type UnhandledRequestStrategy = | UnhandledRequestCallback interface RequestHandlerGroups { - rest: Array + http: Array graphql: Array } @@ -41,8 +41,8 @@ function groupHandlersByType( ): RequestHandlerGroups { return handlers.reduce( (groups, handler) => { - if (handler instanceof RestHandler) { - groups.rest.push(handler) + if (handler instanceof HttpHandler) { + groups.http.push(handler) } if (handler instanceof GraphQLHandler) { @@ -52,7 +52,7 @@ function groupHandlersByType( return groups }, { - rest: [], + http: [], graphql: [], }, ) @@ -65,7 +65,7 @@ type ScoreGetterFn = ( handler: RequestHandlerType, ) => number -function getRestHandlerScore(): ScoreGetterFn { +function getHttpHandlerScore(): ScoreGetterFn { return (request, handler) => { const { path, method } = handler.info @@ -109,8 +109,8 @@ function getGraphQLHandlerScore( function getSuggestedHandler( request: Request, - handlers: Array | Array, - getScore: ScoreGetterFn | ScoreGetterFn, + handlers: Array | Array, + getScore: ScoreGetterFn | ScoreGetterFn, ): Array { const suggestedHandlers = (handlers as Array) .reduce>((suggestions, handler) => { @@ -154,14 +154,14 @@ export async function onUnhandledRequest( const handlerGroups = groupHandlersByType(handlers) const relevantHandlers = parsedGraphQLQuery ? handlerGroups.graphql - : handlerGroups.rest + : handlerGroups.http const suggestedHandlers = getSuggestedHandler( request, relevantHandlers, parsedGraphQLQuery ? getGraphQLHandlerScore(parsedGraphQLQuery) - : getRestHandlerScore(), + : getHttpHandlerScore(), ) return suggestedHandlers.length > 0 diff --git a/test/browser/msw-api/context/delay.mocks.ts b/test/browser/msw-api/context/delay.mocks.ts index d6a9e3e4d..f8282b54f 100644 --- a/test/browser/msw-api/context/delay.mocks.ts +++ b/test/browser/msw-api/context/delay.mocks.ts @@ -1,8 +1,8 @@ -import { rest, delay, DelayMode, HttpResponse } from 'msw' +import { http, delay, DelayMode, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/delay', async ({ request }) => { + http.get('/delay', async ({ request }) => { const url = new URL(request.url) const mode = url.searchParams.get('mode') as DelayMode const duration = url.searchParams.get('duration') diff --git a/test/browser/msw-api/distribution/iife.mocks.js b/test/browser/msw-api/distribution/iife.mocks.js index e6e07823d..60d5c1c2c 100644 --- a/test/browser/msw-api/distribution/iife.mocks.js +++ b/test/browser/msw-api/distribution/iife.mocks.js @@ -1,7 +1,7 @@ -const { setupWorker, rest, HttpResponse } = MockServiceWorker +const { setupWorker, http, HttpResponse } = MockServiceWorker const worker = setupWorker( - rest.get('/user', () => { + http.get('/user', () => { return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/browser/msw-api/exception-handling.mocks.ts b/test/browser/msw-api/exception-handling.mocks.ts index 9a5a72dd3..12fba8f81 100644 --- a/test/browser/msw-api/exception-handling.mocks.ts +++ b/test/browser/msw-api/exception-handling.mocks.ts @@ -1,8 +1,8 @@ -import { rest } from 'msw' +import { http } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('https://api.github.com/users/:username', () => { + http.get('https://api.github.com/users/:username', () => { // @ts-ignore nonExisting() return diff --git a/test/browser/msw-api/hard-reload.mocks.ts b/test/browser/msw-api/hard-reload.mocks.ts index d9bcccebe..af89957ee 100644 --- a/test/browser/msw-api/hard-reload.mocks.ts +++ b/test/browser/msw-api/hard-reload.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('https://example.com/resource', () => { + http.get('https://example.com/resource', () => { return HttpResponse.json({ mocked: true }) }), ) diff --git a/test/browser/msw-api/integrity-check-invalid.mocks.ts b/test/browser/msw-api/integrity-check-invalid.mocks.ts index c8fe5ff89..7647806cb 100644 --- a/test/browser/msw-api/integrity-check-invalid.mocks.ts +++ b/test/browser/msw-api/integrity-check-invalid.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('https://example.com/users/:username', () => { + http.get('https://example.com/users/:username', () => { return HttpResponse.json({ mocked: true, }) diff --git a/test/browser/msw-api/integrity-check-valid.mocks.ts b/test/browser/msw-api/integrity-check-valid.mocks.ts index 740ad1ae9..8426baf65 100644 --- a/test/browser/msw-api/integrity-check-valid.mocks.ts +++ b/test/browser/msw-api/integrity-check-valid.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('https://example.com/users/octocat', () => { + http.get('https://example.com/users/octocat', () => { return HttpResponse.json({ mocked: true }) }), ) diff --git a/test/browser/msw-api/regression/null-body.mocks.ts b/test/browser/msw-api/regression/null-body.mocks.ts index 496427c65..3c48bdea1 100644 --- a/test/browser/msw-api/regression/null-body.mocks.ts +++ b/test/browser/msw-api/regression/null-body.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/api/books', () => { + http.get('/api/books', () => { return new HttpResponse(null, { status: 204 }) }), ) diff --git a/test/browser/msw-api/req/passthrough.mocks.ts b/test/browser/msw-api/req/passthrough.mocks.ts index 1c3859987..4d65c2956 100644 --- a/test/browser/msw-api/req/passthrough.mocks.ts +++ b/test/browser/msw-api/req/passthrough.mocks.ts @@ -1,8 +1,8 @@ -import { rest, passthrough, HttpResponse } from 'msw' +import { http, passthrough, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.post('/', () => { + http.post('/', () => { return passthrough() }), ) @@ -12,7 +12,7 @@ worker.start() // @ts-ignore window.msw = { worker, - rest, + http, passthrough, HttpResponse, } diff --git a/test/browser/msw-api/req/passthrough.test.ts b/test/browser/msw-api/req/passthrough.test.ts index 25e916ded..96c2a31a3 100644 --- a/test/browser/msw-api/req/passthrough.test.ts +++ b/test/browser/msw-api/req/passthrough.test.ts @@ -1,4 +1,4 @@ -import { HttpResponse, passthrough, rest } from 'msw' +import { HttpResponse, passthrough, http } from 'msw' import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../playwright.extend' @@ -7,7 +7,7 @@ const PASSTHROUGH_EXAMPLE = require.resolve('./passthrough.mocks.ts') declare namespace window { export const msw: { worker: SetupWorkerApi - rest: typeof rest + http: typeof http passthrough: typeof passthrough HttpResponse: typeof HttpResponse } @@ -35,9 +35,9 @@ test('performs request as-is when returning "req.passthrough" call in the resolv const endpointUrl = server.http.url('/user') await page.evaluate((endpointUrl) => { - const { worker, rest, passthrough } = window.msw + const { worker, http, passthrough } = window.msw worker.use( - rest.post(endpointUrl, () => { + http.post(endpointUrl, () => { return passthrough() }), ) @@ -72,13 +72,13 @@ test('does not allow fall-through when returning "req.passthrough" call in the r const endpointUrl = server.http.url('/user') await page.evaluate((endpointUrl) => { - const { worker, rest, passthrough, HttpResponse } = window.msw + const { worker, http, passthrough, HttpResponse } = window.msw worker.use( - rest.post(endpointUrl, () => { + http.post(endpointUrl, () => { return passthrough() }), - rest.post(endpointUrl, () => { + http.post(endpointUrl, () => { return HttpResponse.json({ name: 'Kate' }) }), ) @@ -111,9 +111,9 @@ test('performs a request as-is if nothing was returned from the resolver', async const endpointUrl = server.http.url('/user') await page.evaluate((endpointUrl) => { - const { worker, rest } = window.msw + const { worker, http } = window.msw worker.use( - rest.post(endpointUrl, () => { + http.post(endpointUrl, () => { return }), ) diff --git a/test/browser/msw-api/res/network-error.mocks.ts b/test/browser/msw-api/res/network-error.mocks.ts index 53e7ebb8e..2c6f3cfaa 100644 --- a/test/browser/msw-api/res/network-error.mocks.ts +++ b/test/browser/msw-api/res/network-error.mocks.ts @@ -1,8 +1,8 @@ -import { rest, NetworkError } from 'msw' +import { http, NetworkError } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/user', () => { + http.get('/user', () => { throw new NetworkError('Custom network error message') }), ) diff --git a/test/browser/msw-api/setup-worker/fallback-mode/fallback-mode.mocks.ts b/test/browser/msw-api/setup-worker/fallback-mode/fallback-mode.mocks.ts index 7fd67c1b2..ec535b98a 100644 --- a/test/browser/msw-api/setup-worker/fallback-mode/fallback-mode.mocks.ts +++ b/test/browser/msw-api/setup-worker/fallback-mode/fallback-mode.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('*/user', () => { + http.get('*/user', () => { return HttpResponse.json({ name: 'John Maverick' }) }), ) diff --git a/test/browser/msw-api/setup-worker/input-validation.mocks.ts b/test/browser/msw-api/setup-worker/input-validation.mocks.ts index 6f0b1af37..8869f7203 100644 --- a/test/browser/msw-api/setup-worker/input-validation.mocks.ts +++ b/test/browser/msw-api/setup-worker/input-validation.mocks.ts @@ -1,11 +1,11 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' // The next line will be ignored because we want to test that an Error // should be trown when `setupWorker` parameters are not valid //@ts-ignore const worker = setupWorker([ - rest.get('/book/:bookId', function originalResolver() { + http.get('/book/:bookId', function originalResolver() { return HttpResponse.json({ title: 'Original title' }) }), ]) diff --git a/test/browser/msw-api/setup-worker/life-cycle-events/on.mocks.ts b/test/browser/msw-api/setup-worker/life-cycle-events/on.mocks.ts index 94c00f446..503805e01 100644 --- a/test/browser/msw-api/setup-worker/life-cycle-events/on.mocks.ts +++ b/test/browser/msw-api/setup-worker/life-cycle-events/on.mocks.ts @@ -1,14 +1,14 @@ -import { HttpResponse, rest, LifeCycleEventsMap } from 'msw' +import { HttpResponse, http, LifeCycleEventsMap } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('*/user', () => { + http.get('*/user', () => { return HttpResponse.text('response-body') }), - rest.post('*/no-response', () => { + http.post('*/no-response', () => { return }), - rest.get('*/unhandled-exception', () => { + http.get('*/unhandled-exception', () => { throw new Error('Unhandled resolver error') }), ) diff --git a/test/browser/msw-api/setup-worker/listHandlers.mocks.ts b/test/browser/msw-api/setup-worker/listHandlers.mocks.ts index 97f13c3aa..c34e77728 100644 --- a/test/browser/msw-api/setup-worker/listHandlers.mocks.ts +++ b/test/browser/msw-api/setup-worker/listHandlers.mocks.ts @@ -1,4 +1,4 @@ -import { rest, graphql } from 'msw' +import { http, graphql } from 'msw' import { setupWorker } from 'msw/browser' const resolver = () => void 0 @@ -6,7 +6,7 @@ const resolver = () => void 0 const github = graphql.link('https://api.github.com') const worker = setupWorker( - rest.get('https://test.mswjs.io/book/:bookId', resolver), + http.get('https://test.mswjs.io/book/:bookId', resolver), graphql.query('GetUser', resolver), graphql.mutation('UpdatePost', resolver), graphql.operation(resolver), @@ -19,6 +19,6 @@ worker.start() // @ts-ignore window.msw = { worker, - rest, + http, graphql, } diff --git a/test/browser/msw-api/setup-worker/listHandlers.test.ts b/test/browser/msw-api/setup-worker/listHandlers.test.ts index 7ae561dad..8ead34b00 100644 --- a/test/browser/msw-api/setup-worker/listHandlers.test.ts +++ b/test/browser/msw-api/setup-worker/listHandlers.test.ts @@ -1,11 +1,11 @@ -import { rest, graphql } from 'msw' +import { http, graphql } from 'msw' import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../playwright.extend' declare namespace window { export const msw: { worker: SetupWorkerApi - rest: typeof rest + http: typeof http graphql: typeof graphql } } @@ -56,9 +56,9 @@ test('includes runtime request handlers when listing handlers', async ({ await loadExample(LIST_HANDLER_EXAMPLE) const handlerHeaders = await page.evaluate(() => { - const { worker, rest, graphql } = window.msw + const { worker, http, graphql } = window.msw worker.use( - rest.get('https://test.mswjs.io/book/:bookId', () => void 0), + http.get('https://test.mswjs.io/book/:bookId', () => void 0), graphql.query('GetRandomNumber', () => void 0), ) const handlers = worker.listHandlers() diff --git a/test/browser/msw-api/setup-worker/resetHandlers.test.ts b/test/browser/msw-api/setup-worker/resetHandlers.test.ts index 0660147ad..5fb1b9a07 100644 --- a/test/browser/msw-api/setup-worker/resetHandlers.test.ts +++ b/test/browser/msw-api/setup-worker/resetHandlers.test.ts @@ -1,4 +1,4 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../playwright.extend' @@ -6,7 +6,7 @@ declare namespace window { // Annotate global references to the worker and rest request handlers. export const msw: { worker: SetupWorkerApi - rest: typeof rest + http: typeof http HttpResponse: typeof HttpResponse } } @@ -25,7 +25,7 @@ test('removes all runtime request handlers when resetting without explicit next // Add a request handler on runtime msw.worker.use( - msw.rest.post('/login', () => { + msw.http.post('/login', () => { return msw.HttpResponse.json({ accepted: true }) }), ) @@ -74,7 +74,7 @@ test('replaces all handlers with the explicit next runtime handlers upon reset', const { msw } = window msw.worker.use( - msw.rest.post('/login', () => { + msw.http.post('/login', () => { return msw.HttpResponse.json({ accepted: true }) }), ) @@ -85,7 +85,7 @@ test('replaces all handlers with the explicit next runtime handlers upon reset', const { msw } = window msw.worker.resetHandlers( - msw.rest.get('/products', () => { + msw.http.get('/products', () => { return msw.HttpResponse.json([1, 2, 3]) }), ) diff --git a/test/browser/msw-api/setup-worker/response-logging.test.ts b/test/browser/msw-api/setup-worker/response-logging.test.ts index 2b9c26d87..aa9ac4a83 100644 --- a/test/browser/msw-api/setup-worker/response-logging.test.ts +++ b/test/browser/msw-api/setup-worker/response-logging.test.ts @@ -24,7 +24,7 @@ test('prints the response info to the console', async ({ } const getResponseLogs = (exp: RegExp) => { - return consoleSpy.get('startGroupCollapsed').filter((log) => { + return consoleSpy.get('startGroupCollapsed')?.filter((log) => { return exp.test(log) }) } diff --git a/test/browser/msw-api/setup-worker/restoreHandlers.test.ts b/test/browser/msw-api/setup-worker/restoreHandlers.test.ts index fe552695d..f69cf4457 100644 --- a/test/browser/msw-api/setup-worker/restoreHandlers.test.ts +++ b/test/browser/msw-api/setup-worker/restoreHandlers.test.ts @@ -1,11 +1,11 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../playwright.extend' declare namespace window { export const msw: { worker: SetupWorkerApi - rest: typeof rest + http: typeof http HttpResponse: typeof HttpResponse } } @@ -18,10 +18,10 @@ test('returns a mocked response from the used one-time request handler when rest await loadExample(require.resolve('./use.mocks.ts')) await page.evaluate(() => { - const { worker, rest, HttpResponse } = window.msw + const { worker, http, HttpResponse } = window.msw worker.use( - rest.get<{ bookId: string }>( + http.get<{ bookId: string }>( '/book/:bookId', () => { return HttpResponse.json({ title: 'One-time override' }) diff --git a/test/browser/msw-api/setup-worker/scenarios/custom-transformers.mocks.ts b/test/browser/msw-api/setup-worker/scenarios/custom-transformers.mocks.ts index e7844f7a1..4863a1370 100644 --- a/test/browser/msw-api/setup-worker/scenarios/custom-transformers.mocks.ts +++ b/test/browser/msw-api/setup-worker/scenarios/custom-transformers.mocks.ts @@ -1,9 +1,9 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' import * as JSONbig from 'json-bigint' const worker = setupWorker( - rest.get('/user', () => { + http.get('/user', () => { return new HttpResponse( JSONbig.stringify({ username: 'john.maverick', diff --git a/test/browser/msw-api/setup-worker/scenarios/errors/internal-error.mocks.ts b/test/browser/msw-api/setup-worker/scenarios/errors/internal-error.mocks.ts index ad56cbf2c..c8a28c831 100644 --- a/test/browser/msw-api/setup-worker/scenarios/errors/internal-error.mocks.ts +++ b/test/browser/msw-api/setup-worker/scenarios/errors/internal-error.mocks.ts @@ -1,8 +1,8 @@ -import { rest } from 'msw' +import { http } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/user', () => { + http.get('/user', () => { throw new Error('Custom error message') }), ) diff --git a/test/browser/msw-api/setup-worker/scenarios/errors/network-error.mocks.ts b/test/browser/msw-api/setup-worker/scenarios/errors/network-error.mocks.ts index 53e7ebb8e..2c6f3cfaa 100644 --- a/test/browser/msw-api/setup-worker/scenarios/errors/network-error.mocks.ts +++ b/test/browser/msw-api/setup-worker/scenarios/errors/network-error.mocks.ts @@ -1,8 +1,8 @@ -import { rest, NetworkError } from 'msw' +import { http, NetworkError } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/user', () => { + http.get('/user', () => { throw new NetworkError('Custom network error message') }), ) diff --git a/test/browser/msw-api/setup-worker/scenarios/fall-through.mocks.ts b/test/browser/msw-api/setup-worker/scenarios/fall-through.mocks.ts index 5f2f1f4dd..408be64c3 100644 --- a/test/browser/msw-api/setup-worker/scenarios/fall-through.mocks.ts +++ b/test/browser/msw-api/setup-worker/scenarios/fall-through.mocks.ts @@ -1,14 +1,14 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('*', () => console.log('[get] first')), - rest.get('/us*', () => console.log('[get] second')), - rest.get('/user', () => HttpResponse.json({ firstName: 'John' })), - rest.get('/user', () => console.log('[get] third')), + http.get('*', () => console.log('[get] first')), + http.get('/us*', () => console.log('[get] second')), + http.get('/user', () => HttpResponse.json({ firstName: 'John' })), + http.get('/user', () => console.log('[get] third')), - rest.post('/blog/*', () => console.log('[post] first')), - rest.post('/blog/article', () => console.log('[post] second')), + http.post('/blog/*', () => console.log('[post] first')), + http.post('/blog/article', () => console.log('[post] second')), ) worker.start() diff --git a/test/browser/msw-api/setup-worker/scenarios/iframe/iframe.mocks.ts b/test/browser/msw-api/setup-worker/scenarios/iframe/iframe.mocks.ts index 3121e239f..f592a8b7e 100644 --- a/test/browser/msw-api/setup-worker/scenarios/iframe/iframe.mocks.ts +++ b/test/browser/msw-api/setup-worker/scenarios/iframe/iframe.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('*/user', () => { + http.get('*/user', () => { return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/browser/msw-api/setup-worker/scenarios/text-event-stream.mocks.ts b/test/browser/msw-api/setup-worker/scenarios/text-event-stream.mocks.ts index fa561ffbc..f3844515f 100644 --- a/test/browser/msw-api/setup-worker/scenarios/text-event-stream.mocks.ts +++ b/test/browser/msw-api/setup-worker/scenarios/text-event-stream.mocks.ts @@ -1,13 +1,9 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/user', () => { - /** - * @todo This is not strictly synonymous to "res()" - * as ".text()" will set the "Content-Type" header. - */ - return HttpResponse.text() + http.get('/user', () => { + return new HttpResponse() }), ) diff --git a/test/browser/msw-api/setup-worker/start/error.mocks.ts b/test/browser/msw-api/setup-worker/start/error.mocks.ts index 2453a58b1..54cd2b6b0 100644 --- a/test/browser/msw-api/setup-worker/start/error.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/error.mocks.ts @@ -1,8 +1,8 @@ -import { rest } from 'msw' +import { http } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/user', () => { + http.get('/user', () => { return new Response() }), ) diff --git a/test/browser/msw-api/setup-worker/start/find-worker.error.mocks.ts b/test/browser/msw-api/setup-worker/start/find-worker.error.mocks.ts index 6568b74bd..9ea5b02d2 100644 --- a/test/browser/msw-api/setup-worker/start/find-worker.error.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/find-worker.error.mocks.ts @@ -1,8 +1,8 @@ -import { rest } from 'msw' +import { http } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/user', () => { + http.get('/user', () => { return new Response() }), ) diff --git a/test/browser/msw-api/setup-worker/start/find-worker.mocks.ts b/test/browser/msw-api/setup-worker/start/find-worker.mocks.ts index faef4a6a3..db93201cc 100644 --- a/test/browser/msw-api/setup-worker/start/find-worker.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/find-worker.mocks.ts @@ -1,8 +1,8 @@ -import { rest } from 'msw' +import { http } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/user', () => { + http.get('/user', () => { return new Response() }), ) diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/bypass.mocks.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/bypass.mocks.ts index 7ad72cd39..4ce27da7d 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/bypass.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/bypass.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/user', () => { + http.get('/user', () => { return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback-print.mocks.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback-print.mocks.ts index 8d92e98ec..bd70c8252 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback-print.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback-print.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/user', () => { + http.get('/user', () => { return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback-throws.mocks.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback-throws.mocks.ts index e4ca3c42f..dbc48fde6 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback-throws.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback-throws.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/user', () => { + http.get('/user', () => { return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback.mocks.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback.mocks.ts index 6d2a8a5cd..e2d86f0b2 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/user', () => { + http.get('/user', () => { return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/default.mocks.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/default.mocks.ts index 7b26a7334..f09ae14b5 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/default.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/default.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/user', () => { + http.get('/user', () => { return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/error.mocks.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/error.mocks.ts index 7a3a41d2b..6917dbc63 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/error.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/error.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/user', () => { + http.get('/user', () => { return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/suggestions.mocks.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/suggestions.mocks.ts index c0e140864..6450998ad 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/suggestions.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/suggestions.mocks.ts @@ -1,4 +1,4 @@ -import { rest, graphql } from 'msw' +import { http, graphql } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker() @@ -12,6 +12,6 @@ worker.start({ // @ts-ignore window.msw = { worker, - rest, + http, graphql, } diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/suggestions.rest.test.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/suggestions.rest.test.ts index 867764f1e..0bef29269 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/suggestions.rest.test.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/suggestions.rest.test.ts @@ -1,11 +1,11 @@ -import { rest } from 'msw' +import { http } from 'msw' import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../../../playwright.extend' declare namespace window { export const msw: { worker: SetupWorkerApi - rest: typeof rest + http: typeof http } } @@ -20,10 +20,10 @@ test.describe('REST API', () => { await loadExample(require.resolve('./suggestions.mocks.ts')) page.evaluate(() => { - const { worker, rest } = window.msw + const { worker, http } = window.msw worker.use( - rest.get('/user', () => void 0), - rest.post('/user-contact-details', () => void 0), + http.get('/user', () => void 0), + http.post('/user-contact-details', () => void 0), ) }) @@ -52,8 +52,8 @@ Read more: https://mswjs.io/docs/getting-started/mocks`), await loadExample(require.resolve('./suggestions.mocks.ts')) page.evaluate(() => { - const { worker, rest } = window.msw - worker.use(rest.get('/user', () => void 0)) + const { worker, http } = window.msw + worker.use(http.get('/user', () => void 0)) }) await fetch('/users') @@ -83,10 +83,10 @@ Read more: https://mswjs.io/docs/getting-started/mocks`), await loadExample(require.resolve('./suggestions.mocks.ts')) page.evaluate(() => { - const { worker, rest } = window.msw + const { worker, http } = window.msw worker.use( - rest.get('/user', () => void 0), - rest.post('/user-contact-details', () => void 0), + http.get('/user', () => void 0), + http.post('/user-contact-details', () => void 0), ) }) @@ -119,10 +119,10 @@ Read more: https://mswjs.io/docs/getting-started/mocks`), await loadExample(require.resolve('./suggestions.mocks.ts')) page.evaluate(() => { - const { worker, rest } = window.msw + const { worker, http } = window.msw worker.use( - rest.post('/payment', () => void 0), - rest.get('/payments', () => void 0), + http.post('/payment', () => void 0), + http.get('/payments', () => void 0), ) }) diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/warn.mocks.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/warn.mocks.ts index b4f4df6a0..45efa6a5c 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/warn.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/warn.mocks.ts @@ -1,16 +1,16 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/user', () => { + http.get('/user', () => { return HttpResponse.json({ firstName: 'John' }) }), - rest.post('/explicit-return', () => { + http.post('/explicit-return', () => { // Short-circuiting in a handler makes it perform the request as-is, // but still treats this request as handled. return }), - rest.post('/implicit-return', () => { + http.post('/implicit-return', () => { // The handler that has no return also performs the request as-is, // still treating this request as handled. }), diff --git a/test/browser/msw-api/setup-worker/start/options-sw-scope.mocks.ts b/test/browser/msw-api/setup-worker/start/options-sw-scope.mocks.ts index 44f0af6f9..c49392184 100644 --- a/test/browser/msw-api/setup-worker/start/options-sw-scope.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/options-sw-scope.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/user', () => { + http.get('/user', () => { return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/browser/msw-api/setup-worker/start/quiet.mocks.ts b/test/browser/msw-api/setup-worker/start/quiet.mocks.ts index 5fc98c83e..ef8c2848f 100644 --- a/test/browser/msw-api/setup-worker/start/quiet.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/quiet.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/user', () => { + http.get('/user', () => { return HttpResponse.json({ firstName: 'John', age: 32, diff --git a/test/browser/msw-api/setup-worker/start/start.mocks.ts b/test/browser/msw-api/setup-worker/start/start.mocks.ts index dab0763bd..c9a44aa2a 100644 --- a/test/browser/msw-api/setup-worker/start/start.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/start.mocks.ts @@ -1,8 +1,8 @@ -import { rest } from 'msw' +import { http } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/user', () => { + http.get('/user', () => { return new Response() }), ) diff --git a/test/browser/msw-api/setup-worker/start/wait-until-ready.error.mocks.ts b/test/browser/msw-api/setup-worker/start/wait-until-ready.error.mocks.ts index 0ae4a7572..1df2132d4 100644 --- a/test/browser/msw-api/setup-worker/start/wait-until-ready.error.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/wait-until-ready.error.mocks.ts @@ -1,11 +1,11 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('*/numbers', () => { + http.get('*/numbers', () => { return HttpResponse.json([1, 2, 3]) }), - rest.get('*/letters', () => { + http.get('*/letters', () => { return HttpResponse.json(['a', 'b', 'c']) }), ) diff --git a/test/browser/msw-api/setup-worker/start/wait-until-ready.false.mocks.ts b/test/browser/msw-api/setup-worker/start/wait-until-ready.false.mocks.ts index 5c16465e5..957b03f96 100644 --- a/test/browser/msw-api/setup-worker/start/wait-until-ready.false.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/wait-until-ready.false.mocks.ts @@ -1,11 +1,11 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('*/numbers', () => { + http.get('*/numbers', () => { return HttpResponse.json([1, 2, 3]) }), - rest.get('*/letters', () => { + http.get('*/letters', () => { return HttpResponse.json(['a', 'b', 'c']) }), ) diff --git a/test/browser/msw-api/setup-worker/start/wait-until-ready.mocks.ts b/test/browser/msw-api/setup-worker/start/wait-until-ready.mocks.ts index b583afe54..a0f393d19 100644 --- a/test/browser/msw-api/setup-worker/start/wait-until-ready.mocks.ts +++ b/test/browser/msw-api/setup-worker/start/wait-until-ready.mocks.ts @@ -1,11 +1,11 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('*/numbers', () => { + http.get('*/numbers', () => { return HttpResponse.json([1, 2, 3]) }), - rest.get('*/letters', () => { + http.get('*/letters', () => { return HttpResponse.json(['a', 'b', 'c']) }), ) diff --git a/test/browser/msw-api/setup-worker/stop.mocks.ts b/test/browser/msw-api/setup-worker/stop.mocks.ts index e0dc58617..74d1e7bd7 100644 --- a/test/browser/msw-api/setup-worker/stop.mocks.ts +++ b/test/browser/msw-api/setup-worker/stop.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('https://api.github.com', () => { + http.get('https://api.github.com', () => { return HttpResponse.json({ mocked: true }) }), ) diff --git a/test/browser/msw-api/setup-worker/stop/removes-all-listeners.mocks.ts b/test/browser/msw-api/setup-worker/stop/removes-all-listeners.mocks.ts index f2bc3c094..e08c7eb2f 100644 --- a/test/browser/msw-api/setup-worker/stop/removes-all-listeners.mocks.ts +++ b/test/browser/msw-api/setup-worker/stop/removes-all-listeners.mocks.ts @@ -1,9 +1,9 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const createWorker = () => { return setupWorker( - rest.get('/user', () => { + http.get('/user', () => { return new HttpResponse() }), ) diff --git a/test/browser/msw-api/setup-worker/use.mocks.ts b/test/browser/msw-api/setup-worker/use.mocks.ts index ce6ea0abc..91f9579f8 100644 --- a/test/browser/msw-api/setup-worker/use.mocks.ts +++ b/test/browser/msw-api/setup-worker/use.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/book/:bookId', function originalResolver() { + http.get('/book/:bookId', function originalResolver() { return HttpResponse.json({ title: 'Original title', }) @@ -12,10 +12,10 @@ const worker = setupWorker( worker.start() // @ts-ignore -// Propagate the worker and `rest` references to be globally available. +// Propagate the worker and `http` references to be globally available. // This would allow to modify request handlers on runtime. window.msw = { worker, - rest, + http, HttpResponse, } diff --git a/test/browser/msw-api/setup-worker/use.test.ts b/test/browser/msw-api/setup-worker/use.test.ts index 0a5357eda..f5bcc60da 100644 --- a/test/browser/msw-api/setup-worker/use.test.ts +++ b/test/browser/msw-api/setup-worker/use.test.ts @@ -1,11 +1,11 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { SetupWorkerApi } from 'msw/browser' import { test, expect } from '../../playwright.extend' declare namespace window { export const msw: { worker: SetupWorkerApi - rest: typeof rest + http: typeof http HttpResponse: typeof HttpResponse } } @@ -18,10 +18,10 @@ test('returns a mocked response from a runtime request handler upon match', asyn await loadExample(require.resolve('./use.mocks.ts')) await page.evaluate(() => { - const { worker, rest, HttpResponse } = window.msw + const { worker, http, HttpResponse } = window.msw worker.use( - rest.post('/login', function postLoginResolver() { + http.post('/login', function postLoginResolver() { return HttpResponse.json({ accepted: true }) }), ) @@ -51,10 +51,10 @@ test('returns a mocked response from a persistent request handler override', asy await loadExample(require.resolve('./use.mocks.ts')) await page.evaluate(() => { - const { worker, rest, HttpResponse } = window.msw + const { worker, http, HttpResponse } = window.msw worker.use( - rest.get('/book/:bookId', function permanentOverride() { + http.get('/book/:bookId', function permanentOverride() { return HttpResponse.json({ title: 'Permanent override' }) }), ) @@ -81,10 +81,10 @@ test('returns a mocked response from a one-time request handler override only up await loadExample(require.resolve('./use.mocks.ts')) await page.evaluate(() => { - const { worker, rest, HttpResponse } = window.msw + const { worker, http, HttpResponse } = window.msw worker.use( - rest.get( + http.get( '/book/:bookId', function oneTimeOverride() { return HttpResponse.json({ title: 'One-time override' }) @@ -115,10 +115,10 @@ test('returns a mocked response from a one-time request handler override only up await loadExample(require.resolve('./use.mocks.ts')) await page.evaluate(() => { - const { worker, rest, HttpResponse } = window.msw + const { worker, http, HttpResponse } = window.msw worker.use( - rest.get<{ bookId: string }>( + http.get<{ bookId: string }>( '/book/:bookId', function oneTimeOverride({ params }) { const { bookId } = params diff --git a/test/browser/msw-api/unregister.mocks.ts b/test/browser/msw-api/unregister.mocks.ts index 269782a24..d82c96e2f 100644 --- a/test/browser/msw-api/unregister.mocks.ts +++ b/test/browser/msw-api/unregister.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('*/resource', () => { + http.get('*/resource', () => { return HttpResponse.json({ mocked: true }) }), ) diff --git a/test/browser/rest-api/basic.mocks.ts b/test/browser/rest-api/basic.mocks.ts index 2b5927432..118ce5011 100644 --- a/test/browser/rest-api/basic.mocks.ts +++ b/test/browser/rest-api/basic.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('https://example.com/users/:username', ({ params }) => { + http.get('https://example.com/users/:username', ({ params }) => { const { username } = params return HttpResponse.json({ diff --git a/test/browser/rest-api/body.mocks.ts b/test/browser/rest-api/body.mocks.ts index a6d6381ae..4a9294515 100644 --- a/test/browser/rest-api/body.mocks.ts +++ b/test/browser/rest-api/body.mocks.ts @@ -1,4 +1,4 @@ -import { rest, HttpResponse, ResponseResolver } from 'msw' +import { http, HttpResponse, ResponseResolver } from 'msw' import { setupWorker } from 'msw/browser' const forwardRequestBody: ResponseResolver = async ({ request }) => { @@ -34,9 +34,9 @@ const forwardMultipartRequestBody: ResponseResolver = async ({ } const worker = setupWorker( - rest.get('/resource', forwardRequestBody), - rest.post('/resource', forwardRequestBody), - rest.post('/upload', forwardMultipartRequestBody), + http.get('/resource', forwardRequestBody), + http.post('/resource', forwardRequestBody), + http.post('/upload', forwardMultipartRequestBody), ) worker.start() diff --git a/test/browser/rest-api/context.mocks.ts b/test/browser/rest-api/context.mocks.ts index 0961ad29a..5e4009baf 100644 --- a/test/browser/rest-api/context.mocks.ts +++ b/test/browser/rest-api/context.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse, delay } from 'msw' +import { http, HttpResponse, delay } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('https://test.mswjs.io/', async () => { + http.get('https://test.mswjs.io/', async () => { await delay(2000) return HttpResponse.json( { mocked: true }, diff --git a/test/browser/rest-api/cookies-inheritance.mocks.ts b/test/browser/rest-api/cookies-inheritance.mocks.ts index f78bc2862..674ba07c1 100644 --- a/test/browser/rest-api/cookies-inheritance.mocks.ts +++ b/test/browser/rest-api/cookies-inheritance.mocks.ts @@ -1,15 +1,15 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.post('/login', () => { + http.post('/login', () => { return HttpResponse.text(null, { headers: { 'Set-Cookie': 'authToken=abc-123', }, }) }), - rest.get('/user', ({ cookies }) => { + http.get('/user', ({ cookies }) => { if (cookies.authToken == null) { return HttpResponse.json( { error: 'Auth token not found' }, diff --git a/test/browser/rest-api/cookies-request.mocks.ts b/test/browser/rest-api/cookies-request.mocks.ts index 6b60e36f5..06ba33770 100644 --- a/test/browser/rest-api/cookies-request.mocks.ts +++ b/test/browser/rest-api/cookies-request.mocks.ts @@ -1,10 +1,10 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( // Use wildcard so that we capture any "GET /user" requests // regardless of the origin, and can assert "same-origin" credentials. - rest.get('*/user', ({ cookies }) => { + http.get('*/user', ({ cookies }) => { return HttpResponse.json({ cookies }) }), ) diff --git a/test/browser/rest-api/cookies.mocks.ts b/test/browser/rest-api/cookies.mocks.ts index e522051e1..1c6a51f3f 100644 --- a/test/browser/rest-api/cookies.mocks.ts +++ b/test/browser/rest-api/cookies.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/user', () => { + http.get('/user', () => { return HttpResponse.json( { mocked: true, @@ -14,7 +14,7 @@ const worker = setupWorker( }, ) }), - rest.get('/order', () => { + http.get('/order', () => { return HttpResponse.json( { mocked: true, diff --git a/test/browser/rest-api/generator.mocks.ts b/test/browser/rest-api/generator.mocks.ts index 30a7e468f..991a526cc 100644 --- a/test/browser/rest-api/generator.mocks.ts +++ b/test/browser/rest-api/generator.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get<{ maxCount: string }>('/polling/:maxCount', function* ({ params }) { + http.get<{ maxCount: string }>('/polling/:maxCount', function* ({ params }) { const { maxCount } = params let count = 0 @@ -21,7 +21,7 @@ const worker = setupWorker( }) }), - rest.get<{ maxCount: string }>( + http.get<{ maxCount: string }>( '/polling/once/:maxCount', function* ({ params }) { const { maxCount } = params @@ -43,7 +43,7 @@ const worker = setupWorker( }, { once: true }, ), - rest.get('/polling/once/:maxCount', () => { + http.get('/polling/once/:maxCount', () => { return HttpResponse.json({ status: 'done' }) }), ) diff --git a/test/browser/rest-api/headers-multiple.mocks.ts b/test/browser/rest-api/headers-multiple.mocks.ts index 601f7393b..a0daeb9a1 100644 --- a/test/browser/rest-api/headers-multiple.mocks.ts +++ b/test/browser/rest-api/headers-multiple.mocks.ts @@ -1,14 +1,14 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.post('https://test.mswjs.io', ({ request }) => { + http.post('https://test.mswjs.io', ({ request }) => { return HttpResponse.json({ 'x-header': request.headers.get('x-header'), }) }), - rest.get('https://test.mswjs.io', () => { + http.get('https://test.mswjs.io', () => { return HttpResponse.json( { mocked: true, diff --git a/test/browser/rest-api/params.mocks.ts b/test/browser/rest-api/params.mocks.ts index 8528b2764..a089eb5ef 100644 --- a/test/browser/rest-api/params.mocks.ts +++ b/test/browser/rest-api/params.mocks.ts @@ -1,4 +1,4 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' type RequestParams = { @@ -7,7 +7,7 @@ type RequestParams = { } const worker = setupWorker( - rest.get( + http.get( 'https://api.github.com/users/:username/messages/:messageId', ({ params }) => { const { username, messageId } = params diff --git a/test/browser/rest-api/plain-response.mocks.ts b/test/browser/rest-api/plain-response.mocks.ts index 0af61987f..933d44406 100644 --- a/test/browser/rest-api/plain-response.mocks.ts +++ b/test/browser/rest-api/plain-response.mocks.ts @@ -1,8 +1,8 @@ -import { rest } from 'msw' +import { http } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/greeting', () => { + http.get('/greeting', () => { return new Response('Hello, world!') }), ) diff --git a/test/browser/rest-api/query-params-warning.mocks.ts b/test/browser/rest-api/query-params-warning.mocks.ts index a74f145d6..fbf4684a8 100644 --- a/test/browser/rest-api/query-params-warning.mocks.ts +++ b/test/browser/rest-api/query-params-warning.mocks.ts @@ -1,14 +1,14 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( // WARNING: Intentionally invalid example of including a query parameter // in the request handler URL. Don't do that, consider matching against a path // and accessing query parameters in the response resolver instead. - rest.get('/user?name=admin', () => { + http.get('/user?name=admin', () => { return HttpResponse.text('user-response') }), - rest.post('/login?id=123&type=auth', () => { + http.post('/login?id=123&type=auth', () => { return HttpResponse.text('login-response') }), ) diff --git a/test/browser/rest-api/query.mocks.ts b/test/browser/rest-api/query.mocks.ts index 7a894e45c..a8fd3bb53 100644 --- a/test/browser/rest-api/query.mocks.ts +++ b/test/browser/rest-api/query.mocks.ts @@ -1,15 +1,15 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('https://test.mswjs.io/api/books', ({ request }) => { + http.get('https://test.mswjs.io/api/books', ({ request }) => { const url = new URL(request.url) const bookId = url.searchParams.get('id') return HttpResponse.json({ bookId }) }), - rest.post('https://test.mswjs.io/products', ({ request }) => { + http.post('https://test.mswjs.io/products', ({ request }) => { const url = new URL(request.url) const productIds = url.searchParams.getAll('id') diff --git a/test/browser/rest-api/redirect.mocks.ts b/test/browser/rest-api/redirect.mocks.ts index 707e4d9e4..63e93ff19 100644 --- a/test/browser/rest-api/redirect.mocks.ts +++ b/test/browser/rest-api/redirect.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/login', () => { + http.get('/login', () => { return HttpResponse.text(null, { status: 307, headers: { @@ -10,7 +10,7 @@ const worker = setupWorker( }, }) }), - rest.get('/user', () => { + http.get('/user', () => { return HttpResponse.json({ firstName: 'John', lastName: 'Maverick', diff --git a/test/browser/rest-api/request/body/body.mocks.ts b/test/browser/rest-api/request/body/body.mocks.ts index 9b8266dbc..c03ab78b0 100644 --- a/test/browser/rest-api/request/body/body.mocks.ts +++ b/test/browser/rest-api/request/body/body.mocks.ts @@ -1,17 +1,17 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.post('/text', async ({ request }) => { + http.post('/text', async ({ request }) => { return HttpResponse.text(await request.text()) }), - rest.post('/json', async ({ request }) => { + http.post('/json', async ({ request }) => { return HttpResponse.json(await request.json()) }), - rest.post('/arrayBuffer', async ({ request }) => { + http.post('/arrayBuffer', async ({ request }) => { return HttpResponse.arrayBuffer(await request.arrayBuffer()) }), - rest.post('/formData', async ({ request }) => { + http.post('/formData', async ({ request }) => { const data = await request.formData() const name = data.get('name') const file = data.get('file') as File diff --git a/test/browser/rest-api/request/matching/all.mocks.ts b/test/browser/rest-api/request/matching/all.mocks.ts index f8f427657..bab7e136a 100644 --- a/test/browser/rest-api/request/matching/all.mocks.ts +++ b/test/browser/rest-api/request/matching/all.mocks.ts @@ -1,11 +1,11 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.all('*/api/*', () => { + http.all('*/api/*', () => { return HttpResponse.text('hello world') }), - rest.all('*', () => { + http.all('*', () => { return HttpResponse.text('welcome to the jungle') }), ) diff --git a/test/browser/rest-api/request/matching/all.test.ts b/test/browser/rest-api/request/matching/all.test.ts index 074e3197e..ab23ef155 100644 --- a/test/browser/rest-api/request/matching/all.test.ts +++ b/test/browser/rest-api/request/matching/all.test.ts @@ -41,7 +41,7 @@ test('respects custom path when matching requests', async ({ } // Mismatched request. - // There's a fallback "rest.all()" in this test that acts + // There's a fallback "http.all()" in this test that acts // as a fallback request handler for all otherwise mismatched requests. const mismatchedResponses = await forEachMethod((method) => { return fetch('http://localhost/foo', { method }) diff --git a/test/browser/rest-api/request/matching/method.mocks.ts b/test/browser/rest-api/request/matching/method.mocks.ts index c77e40d23..08fd0ba16 100644 --- a/test/browser/rest-api/request/matching/method.mocks.ts +++ b/test/browser/rest-api/request/matching/method.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.post('*/user', () => { + http.post('*/user', () => { return HttpResponse.json({ mocked: true }) }), ) diff --git a/test/browser/rest-api/request/matching/path-params-decode.mocks.ts b/test/browser/rest-api/request/matching/path-params-decode.mocks.ts index 691600114..98e71c479 100644 --- a/test/browser/rest-api/request/matching/path-params-decode.mocks.ts +++ b/test/browser/rest-api/request/matching/path-params-decode.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('https://test.mswjs.io/reflect-url/:url', ({ params }) => { + http.get('https://test.mswjs.io/reflect-url/:url', ({ params }) => { const { url } = params return HttpResponse.json({ url }) }), diff --git a/test/browser/rest-api/request/matching/uri.mocks.ts b/test/browser/rest-api/request/matching/uri.mocks.ts index e7a336d57..38262dde7 100644 --- a/test/browser/rest-api/request/matching/uri.mocks.ts +++ b/test/browser/rest-api/request/matching/uri.mocks.ts @@ -1,26 +1,26 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('https://api.github.com/made-up', () => { + http.get('https://api.github.com/made-up', () => { return HttpResponse.json({ mocked: true }) }), - rest.get('https://test.mswjs.io/messages/:messageId', ({ params }) => { + http.get('https://test.mswjs.io/messages/:messageId', ({ params }) => { const { messageId } = params return HttpResponse.json({ messageId }) }), - rest.get('https://test.mswjs.io/messages/:messageId/items', ({ params }) => { + http.get('https://test.mswjs.io/messages/:messageId/items', ({ params }) => { const { messageId } = params return HttpResponse.json({ messageId }) }), - rest.get(/(.+?)\.google\.com\/path/, () => { + http.get(/(.+?)\.google\.com\/path/, () => { return HttpResponse.json({ mocked: true }) }), - rest.get(`/resource\\('id'\\)`, () => { + http.get(`/resource\\('id'\\)`, () => { return HttpResponse.json({ mocked: true }) }), ) diff --git a/test/browser/rest-api/response-patching.mocks.ts b/test/browser/rest-api/response-patching.mocks.ts index e4c4de545..05643d431 100644 --- a/test/browser/rest-api/response-patching.mocks.ts +++ b/test/browser/rest-api/response-patching.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse, bypass } from 'msw' +import { http, HttpResponse, bypass } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('*/user', async ({ request }) => { + http.get('*/user', async ({ request }) => { const fetchArgs = await bypass(request.url) const originalResponse = await fetch(...fetchArgs) const body = await originalResponse.json() @@ -21,7 +21,7 @@ const worker = setupWorker( ) }), - rest.get('*/repos/:owner/:repoName', async ({ request }) => { + http.get('*/repos/:owner/:repoName', async ({ request }) => { const fetchArgs = await bypass(request) const originalResponse = await fetch(...fetchArgs) const body = await originalResponse.json() @@ -39,7 +39,7 @@ const worker = setupWorker( ) }), - rest.get('*/headers', async ({ request }) => { + http.get('*/headers', async ({ request }) => { const proxyUrl = new URL('/headers-proxy', request.url) const fetchArgs = await bypass(proxyUrl, { method: 'POST', @@ -55,7 +55,7 @@ const worker = setupWorker( }) }), - rest.post('*/posts', async ({ request }) => { + http.post('*/posts', async ({ request }) => { const fetchArgs = await bypass(request) const originalResponse = await fetch(...fetchArgs) const body = await originalResponse.json() @@ -74,7 +74,7 @@ const worker = setupWorker( ) }), - rest.get('*/posts', async ({ request }) => { + http.get('*/posts', async ({ request }) => { const fetchArgs = await bypass(request) const originalResponse = await fetch(...fetchArgs) const body = await originalResponse.json() @@ -92,7 +92,7 @@ const worker = setupWorker( ) }), - rest.head('*/posts', async ({ request }) => { + http.head('*/posts', async ({ request }) => { const fetchArgs = await bypass(request) const originalResponse = await fetch(...fetchArgs) diff --git a/test/browser/rest-api/response/body/body-binary.mocks.ts b/test/browser/rest-api/response/body/body-binary.mocks.ts index d09691522..751f7e9ec 100644 --- a/test/browser/rest-api/response/body/body-binary.mocks.ts +++ b/test/browser/rest-api/response/body/body-binary.mocks.ts @@ -1,9 +1,9 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' import base64Image from 'url-loader!../../../../fixtures/image.jpg' const worker = setupWorker( - rest.get('/images/:imageId', async () => { + http.get('/images/:imageId', async () => { const imageBuffer = await fetch(base64Image).then((res) => res.arrayBuffer(), ) diff --git a/test/browser/rest-api/response/body/body-blob.mocks.ts b/test/browser/rest-api/response/body/body-blob.mocks.ts index c79c4718a..eb7b26901 100644 --- a/test/browser/rest-api/response/body/body-blob.mocks.ts +++ b/test/browser/rest-api/response/body/body-blob.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/greeting', async () => { + http.get('/greeting', async () => { const blob = new Blob(['hello world'], { type: 'text/plain', }) diff --git a/test/browser/rest-api/response/body/body-formdata.mocks.ts b/test/browser/rest-api/response/body/body-formdata.mocks.ts index 4fcf3ea45..29cf1c27c 100644 --- a/test/browser/rest-api/response/body/body-formdata.mocks.ts +++ b/test/browser/rest-api/response/body/body-formdata.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/user', async () => { + http.get('/user', async () => { const data = new FormData() data.append('name', 'Alice') data.append('age', '32') diff --git a/test/browser/rest-api/response/body/body-json.mocks.ts b/test/browser/rest-api/response/body/body-json.mocks.ts index 25f0568f6..7bf637cc2 100644 --- a/test/browser/rest-api/response/body/body-json.mocks.ts +++ b/test/browser/rest-api/response/body/body-json.mocks.ts @@ -1,11 +1,11 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/json', () => { + http.get('/json', () => { return HttpResponse.json({ firstName: 'John' }) }), - rest.get('/number', () => { + http.get('/number', () => { return HttpResponse.json(123) }), ) diff --git a/test/browser/rest-api/response/body/body-text.mocks.ts b/test/browser/rest-api/response/body/body-text.mocks.ts index 23dcdbf36..fbac4101d 100644 --- a/test/browser/rest-api/response/body/body-text.mocks.ts +++ b/test/browser/rest-api/response/body/body-text.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/text', () => { + http.get('/text', () => { return HttpResponse.text('hello world') }), ) diff --git a/test/browser/rest-api/response/body/body-xml.mocks.ts b/test/browser/rest-api/response/body/body-xml.mocks.ts index 320dca109..e58c1bd63 100644 --- a/test/browser/rest-api/response/body/body-xml.mocks.ts +++ b/test/browser/rest-api/response/body/body-xml.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/user', () => { + http.get('/user', () => { return HttpResponse.xml(` abc-123 diff --git a/test/browser/rest-api/response/response-error.mocks.ts b/test/browser/rest-api/response/response-error.mocks.ts index f0c26bb3a..c372dda35 100644 --- a/test/browser/rest-api/response/response-error.mocks.ts +++ b/test/browser/rest-api/response/response-error.mocks.ts @@ -1,8 +1,8 @@ -import { rest } from 'msw' +import { http } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/resource', () => { + http.get('/resource', () => { return Response.error() }), ) diff --git a/test/browser/rest-api/status.mocks.ts b/test/browser/rest-api/status.mocks.ts index 4d43fb7f6..44902088f 100644 --- a/test/browser/rest-api/status.mocks.ts +++ b/test/browser/rest-api/status.mocks.ts @@ -1,13 +1,13 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/posts', () => { + http.get('/posts', () => { // Setting response status code without status text // implicitly sets the correct status text. return HttpResponse.text(null, { status: 403 }) }), - rest.get('/user', () => { + http.get('/user', () => { // Response status text can be overridden // to an arbitrary string value. return HttpResponse.text(null, { diff --git a/test/browser/rest-api/xhr.mocks.ts b/test/browser/rest-api/xhr.mocks.ts index c34079830..28239554b 100644 --- a/test/browser/rest-api/xhr.mocks.ts +++ b/test/browser/rest-api/xhr.mocks.ts @@ -1,8 +1,8 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('https://api.github.com/users/octocat', () => { + http.get('https://api.github.com/users/octocat', () => { return HttpResponse.json({ mocked: true }) }), ) diff --git a/test/modules/browser/esm-browser.test.ts b/test/modules/browser/esm-browser.test.ts index 92f324daa..53bfbe2eb 100644 --- a/test/modules/browser/esm-browser.test.ts +++ b/test/modules/browser/esm-browser.test.ts @@ -61,11 +61,11 @@ test.afterAll(async () => { test('runs in an ESM browser project', async ({ page }) => { await fsMock.create({ 'entry.mjs': ` -import { rest, HttpResponse } from 'msw' +import { http,HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - rest.get('/resource', () => new Response()), - rest.post('/login', () => HttpResponse.json([1, 2, 3])) + http.get('/resource', () => new Response()), + http.post('/login', () => HttpResponse.json([1, 2, 3])) ) console.log(typeof worker.start) `, diff --git a/test/modules/node/esm-node.test.ts b/test/modules/node/esm-node.test.ts index 7f1859c9f..303a19e7f 100644 --- a/test/modules/node/esm-node.test.ts +++ b/test/modules/node/esm-node.test.ts @@ -26,10 +26,10 @@ console.log('msw/node:', await import.meta.resolve('msw/node')) console.log('msw/native:', await import.meta.resolve('msw/native')) `, 'runtime.mjs': ` -import { rest } from 'msw' +import { http } from 'msw' import { setupServer } from 'msw/node' const server = setupServer( - rest.get('/resource', () => new Response()) + http.get('/resource', () => new Response()) ) console.log(typeof server.listen) `, @@ -77,10 +77,10 @@ console.log('msw/node:', require.resolve('msw/node')) console.log('msw/native:', require.resolve('msw/native')) `, 'runtime.cjs': ` -import { rest } from 'msw' +import { http } from 'msw' import { setupServer } from 'msw/node' const server = setupServer( - rest.get('/resource', () => new Response()) + http.get('/resource', () => new Response()) ) console.log(typeof server.listen) `, diff --git a/test/node/msw-api/context/delay.node.test.ts b/test/node/msw-api/context/delay.node.test.ts index a3ebefbe6..92c813d5c 100644 --- a/test/node/msw-api/context/delay.node.test.ts +++ b/test/node/msw-api/context/delay.node.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { delay, HttpResponse, rest } from 'msw' +import { delay, HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' import { performance } from 'perf_hooks' @@ -31,7 +31,7 @@ async function makeRequest(url: string) { test('uses explicit server response time', async () => { server.use( - rest.get('http://localhost/user', async () => { + http.get('http://localhost/user', async () => { await delay(500) return HttpResponse.text('john') }), @@ -45,7 +45,7 @@ test('uses explicit server response time', async () => { test('uses realistic server response time when no duration is provided', async () => { server.use( - rest.get('http://localhost/user', async () => { + http.get('http://localhost/user', async () => { await delay() return HttpResponse.text('john') }), @@ -60,7 +60,7 @@ test('uses realistic server response time when no duration is provided', async ( test('uses realistic server response time when "real" mode is provided', async () => { server.use( - rest.get('http://localhost/user', async () => { + http.get('http://localhost/user', async () => { await delay('real') return HttpResponse.text('john') }), diff --git a/test/node/msw-api/req/passthrough.node.test.ts b/test/node/msw-api/req/passthrough.node.test.ts index b7c3b5da5..64ef800c1 100644 --- a/test/node/msw-api/req/passthrough.node.test.ts +++ b/test/node/msw-api/req/passthrough.node.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { HttpResponse, passthrough, rest } from 'msw' +import { HttpResponse, passthrough, http } from 'msw' import { setupServer } from 'msw/node' import { HttpServer } from '@open-draft/test-server/http' @@ -40,7 +40,7 @@ afterAll(async () => { it('performs request as-is when returning "req.passthrough" call in the resolver', async () => { const endpointUrl = httpServer.http.url('/user') server.use( - rest.post(endpointUrl, () => { + http.post(endpointUrl, () => { return passthrough() }), ) @@ -57,10 +57,10 @@ it('performs request as-is when returning "req.passthrough" call in the resolver it('does not allow fall-through when returning "req.passthrough" call in the resolver', async () => { const endpointUrl = httpServer.http.url('/user') server.use( - rest.post(endpointUrl, () => { + http.post(endpointUrl, () => { return passthrough() }), - rest.post(endpointUrl, () => { + http.post(endpointUrl, () => { return HttpResponse.json({ name: 'Kate' }) }), ) @@ -77,7 +77,7 @@ it('does not allow fall-through when returning "req.passthrough" call in the res it('performs a request as-is if nothing was returned from the resolver', async () => { const endpointUrl = httpServer.http.url('/user') server.use( - rest.post(endpointUrl, () => { + http.post(endpointUrl, () => { return }), ) diff --git a/test/node/msw-api/res/network-error.node.test.ts b/test/node/msw-api/res/network-error.node.test.ts index e2c34ff57..c09c35323 100644 --- a/test/node/msw-api/res/network-error.node.test.ts +++ b/test/node/msw-api/res/network-error.node.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { rest, NetworkError } from 'msw' +import { http, NetworkError } from 'msw' import { setupServer } from 'msw/node' const server = setupServer() @@ -12,7 +12,7 @@ afterAll(() => server.close()) test('throws a network error when used with fetch', async () => { server.use( - rest.get('http://test.io/user', () => { + http.get('http://test.io/user', () => { throw new NetworkError('Custom network error message') }), ) diff --git a/test/node/msw-api/setup-server/input-validation.node.test.ts b/test/node/msw-api/setup-server/input-validation.node.test.ts index 3b3c56f97..38c0fb342 100644 --- a/test/node/msw-api/setup-server/input-validation.node.test.ts +++ b/test/node/msw-api/setup-server/input-validation.node.test.ts @@ -1,4 +1,4 @@ -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' test('throws an error given an Array of request handlers to setupServer', () => { @@ -7,7 +7,7 @@ test('throws an error given an Array of request handlers to setupServer', () => // should be thrown when `setupServer` parameters are not valid // @ts-ignore return setupServer([ - rest.get('https://test.mswjs.io/book/:bookId', () => { + http.get('https://test.mswjs.io/book/:bookId', () => { return HttpResponse.json({ title: 'Original title' }) }), ]) diff --git a/test/node/msw-api/setup-server/life-cycle-events/on.node.test.ts b/test/node/msw-api/setup-server/life-cycle-events/on.node.test.ts index 316d22ef7..932fa2d81 100644 --- a/test/node/msw-api/setup-server/life-cycle-events/on.node.test.ts +++ b/test/node/msw-api/setup-server/life-cycle-events/on.node.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' import { HttpServer } from '@open-draft/test-server/http' import { waitFor } from '../../../../support/waitFor' @@ -30,13 +30,13 @@ beforeAll(async () => { await httpServer.listen() server.use( - rest.get(httpServer.http.url('/user'), () => { + http.get(httpServer.http.url('/user'), () => { return HttpResponse.text('response-body') }), - rest.post(httpServer.http.url('/no-response'), () => { + http.post(httpServer.http.url('/no-response'), () => { return }), - rest.get(httpServer.http.url('/unhandled-exception'), () => { + http.get(httpServer.http.url('/unhandled-exception'), () => { throw new Error('Unhandled resolver error') }), ) diff --git a/test/node/msw-api/setup-server/life-cycle-events/removeAllListeners.node.test.ts b/test/node/msw-api/setup-server/life-cycle-events/removeAllListeners.node.test.ts index bcde99b6a..bc96068ef 100644 --- a/test/node/msw-api/setup-server/life-cycle-events/removeAllListeners.node.test.ts +++ b/test/node/msw-api/setup-server/life-cycle-events/removeAllListeners.node.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' import { HttpServer } from '@open-draft/test-server/http' @@ -18,7 +18,7 @@ beforeAll(async () => { await httpServer.listen() server.use( - rest.get(httpServer.http.url('/user'), () => { + http.get(httpServer.http.url('/user'), () => { return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/node/msw-api/setup-server/life-cycle-events/removeListener.node.test.ts b/test/node/msw-api/setup-server/life-cycle-events/removeListener.node.test.ts index c162fecc2..bf40845b9 100644 --- a/test/node/msw-api/setup-server/life-cycle-events/removeListener.node.test.ts +++ b/test/node/msw-api/setup-server/life-cycle-events/removeListener.node.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' import { HttpServer } from '@open-draft/test-server/http' @@ -18,7 +18,7 @@ beforeAll(async () => { await httpServer.listen() server.use( - rest.get(httpServer.http.url('/user'), () => { + http.get(httpServer.http.url('/user'), () => { return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/node/msw-api/setup-server/listHandlers.node.test.ts b/test/node/msw-api/setup-server/listHandlers.node.test.ts index 2abe6f41f..c542579ac 100644 --- a/test/node/msw-api/setup-server/listHandlers.node.test.ts +++ b/test/node/msw-api/setup-server/listHandlers.node.test.ts @@ -1,14 +1,14 @@ /** * @jest-environment node */ -import { rest, graphql } from 'msw' +import { http, graphql } from 'msw' import { setupServer } from 'msw/node' const resolver = () => null const github = graphql.link('https://api.github.com') const server = setupServer( - rest.get('https://test.mswjs.io/book/:bookId', resolver), + http.get('https://test.mswjs.io/book/:bookId', resolver), graphql.query('GetUser', resolver), graphql.mutation('UpdatePost', resolver), graphql.operation(resolver), @@ -58,7 +58,7 @@ test('forbids from modifying the list of handlers', () => { test('includes runtime request handlers when listing handlers', () => { server.use( - rest.get('https://test.mswjs.io/book/:bookId', resolver), + http.get('https://test.mswjs.io/book/:bookId', resolver), graphql.query('GetRandomNumber', resolver), ) diff --git a/test/node/msw-api/setup-server/resetHandlers.node.test.ts b/test/node/msw-api/setup-server/resetHandlers.node.test.ts index e1fe39a75..822da11af 100644 --- a/test/node/msw-api/setup-server/resetHandlers.node.test.ts +++ b/test/node/msw-api/setup-server/resetHandlers.node.test.ts @@ -2,11 +2,11 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' const server = setupServer( - rest.get('https://test.mswjs.io/books', () => { + http.get('https://test.mswjs.io/books', () => { return HttpResponse.json({ title: 'Original title' }) }), ) @@ -23,7 +23,7 @@ afterAll(() => { test('removes all runtime request handlers when resetting without explicit next handlers', async () => { server.use( - rest.post('https://test.mswjs.io/login', () => { + http.post('https://test.mswjs.io/login', () => { return HttpResponse.json({ accepted: true }) }), ) @@ -53,7 +53,7 @@ test('removes all runtime request handlers when resetting without explicit next test('replaces all handlers with the explicit next runtime handlers upon reset', async () => { server.use( - rest.post('https://test.mswjs.io/login', () => { + http.post('https://test.mswjs.io/login', () => { return HttpResponse.json({ accepted: true }) }), ) @@ -61,7 +61,7 @@ test('replaces all handlers with the explicit next runtime handlers upon reset', // Once reset with explicit next requets handlers, // replaces all present requets handlers with those. server.resetHandlers( - rest.get('https://test.mswjs.io/products', () => { + http.get('https://test.mswjs.io/products', () => { return HttpResponse.json([1, 2, 3]) }), ) diff --git a/test/node/msw-api/setup-server/restoreHandlers.node.test.ts b/test/node/msw-api/setup-server/restoreHandlers.node.test.ts index 6d4200a67..bd2c6a2b8 100644 --- a/test/node/msw-api/setup-server/restoreHandlers.node.test.ts +++ b/test/node/msw-api/setup-server/restoreHandlers.node.test.ts @@ -2,11 +2,11 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' const server = setupServer( - rest.get('https://test.mswjs.io/book/:bookId', () => { + http.get('https://test.mswjs.io/book/:bookId', () => { return HttpResponse.json({ title: 'Original title' }) }), ) @@ -16,7 +16,7 @@ afterAll(() => server.close()) test('returns a mocked response from the used one-time request handler when restored', async () => { server.use( - rest.get( + http.get( 'https://test.mswjs.io/book/:bookId', () => { return HttpResponse.json({ title: 'Overridden title' }) diff --git a/test/node/msw-api/setup-server/scenarios/cookies-request.node.test.ts b/test/node/msw-api/setup-server/scenarios/cookies-request.node.test.ts index 981be831b..ea39cb68e 100644 --- a/test/node/msw-api/setup-server/scenarios/cookies-request.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/cookies-request.node.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import https from 'https' -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupServer, SetupServerApi } from 'msw/node' import { httpsAgent, HttpServer } from '@open-draft/test-server/http' import { waitForClientRequest } from '../../../../support/utils' @@ -29,7 +29,7 @@ test('has access to request cookies', async () => { const endpointUrl = httpServer.https.url('/user') server.use( - rest.get(endpointUrl, ({ cookies }) => { + http.get(endpointUrl, ({ cookies }) => { return HttpResponse.json({ cookies }) }), ) diff --git a/test/node/msw-api/setup-server/scenarios/custom-transformers.node.test.ts b/test/node/msw-api/setup-server/scenarios/custom-transformers.node.test.ts index db29a0812..f0aec6dae 100644 --- a/test/node/msw-api/setup-server/scenarios/custom-transformers.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/custom-transformers.node.test.ts @@ -1,10 +1,10 @@ import fetch from 'node-fetch' import * as JSONbig from 'json-bigint' -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupServer } from 'msw/node' const server = setupServer( - rest.get('http://test.mswjs.io/me', () => { + http.get('http://test.mswjs.io/me', () => { return new HttpResponse( JSONbig.stringify({ username: 'john.maverick', diff --git a/test/node/msw-api/setup-server/scenarios/fake-timers.node.test.ts b/test/node/msw-api/setup-server/scenarios/fake-timers.node.test.ts index 050ecbeb3..15caee6e2 100644 --- a/test/node/msw-api/setup-server/scenarios/fake-timers.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/fake-timers.node.test.ts @@ -1,9 +1,9 @@ import fetch from 'node-fetch' import { setupServer } from 'msw/node' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' const server = setupServer( - rest.get('https://test.mswjs.io/pull', () => { + http.get('https://test.mswjs.io/pull', () => { return HttpResponse.json({ status: 'pulled' }) }), ) diff --git a/test/node/msw-api/setup-server/scenarios/fall-through.node.test.ts b/test/node/msw-api/setup-server/scenarios/fall-through.node.test.ts index c093efbcf..26f84b4f7 100644 --- a/test/node/msw-api/setup-server/scenarios/fall-through.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/fall-through.node.test.ts @@ -2,21 +2,21 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' const log = jest.fn() const server = setupServer( - rest.get('https://test.mswjs.io/*', () => log('[get] first')), - rest.get('https://test.mswjs.io/us*', () => log('[get] second')), - rest.get('https://test.mswjs.io/user', () => { + http.get('https://test.mswjs.io/*', () => log('[get] first')), + http.get('https://test.mswjs.io/us*', () => log('[get] second')), + http.get('https://test.mswjs.io/user', () => { return HttpResponse.json({ firstName: 'John' }) }), - rest.get('https://test.mswjs.io/user', () => log('[get] third')), + http.get('https://test.mswjs.io/user', () => log('[get] third')), - rest.post('https://test.mswjs.io/blog/*', () => log('[post] first')), - rest.post('https://test.mswjs.io/blog/article', () => log('[post] second')), + http.post('https://test.mswjs.io/blog/*', () => log('[post] first')), + http.post('https://test.mswjs.io/blog/article', () => log('[post] second')), ) beforeAll(() => { diff --git a/test/node/msw-api/setup-server/scenarios/fetch.node.test.ts b/test/node/msw-api/setup-server/scenarios/fetch.node.test.ts index b0c2a1cc8..64af804a1 100644 --- a/test/node/msw-api/setup-server/scenarios/fetch.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/fetch.node.test.ts @@ -1,9 +1,9 @@ import fetch from 'node-fetch' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' const server = setupServer( - rest.get('http://test.mswjs.io', () => { + http.get('http://test.mswjs.io', () => { return HttpResponse.json( { firstName: 'John', @@ -17,7 +17,7 @@ const server = setupServer( }, ) }), - rest.post('https://test.mswjs.io', async ({ request }) => { + http.post('https://test.mswjs.io', async ({ request }) => { return HttpResponse.json(await request.json(), { status: 403, headers: { diff --git a/test/node/msw-api/setup-server/scenarios/generator.node.test.ts b/test/node/msw-api/setup-server/scenarios/generator.node.test.ts index 85af13a97..bc4dd8a81 100644 --- a/test/node/msw-api/setup-server/scenarios/generator.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/generator.node.test.ts @@ -2,11 +2,11 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' const server = setupServer( - rest.get<{ maxCount: string }>( + http.get<{ maxCount: string }>( 'https://example.com/polling/:maxCount', function* ({ params }) { const maxCount = parseInt(params.maxCount) @@ -27,7 +27,7 @@ const server = setupServer( }, ), - rest.get<{ maxCount: string }>( + http.get<{ maxCount: string }>( 'https://example.com/polling/once/:maxCount', function* ({ params }) { const maxCount = parseInt(params.maxCount) @@ -48,7 +48,7 @@ const server = setupServer( }, { once: true }, ), - rest.get<{ maxCount: string }>( + http.get<{ maxCount: string }>( 'https://example.com/polling/once/:maxCount', () => { return HttpResponse.json({ status: 'done' }) diff --git a/test/node/msw-api/setup-server/scenarios/http.node.test.ts b/test/node/msw-api/setup-server/scenarios/http.node.test.ts index 07d57713c..aeca32c49 100644 --- a/test/node/msw-api/setup-server/scenarios/http.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/http.node.test.ts @@ -1,9 +1,9 @@ /** * @jest-environment node */ -import http from 'http' +import nodeHttp from 'http' import { HttpServer } from '@open-draft/test-server/http' -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupServer } from 'msw/node' import { waitForClientRequest } from '../../../../support/utils' @@ -22,7 +22,7 @@ beforeAll(async () => { beforeEach(() => { server.use( - rest.get(httpServer.http.url('/resource'), () => { + http.get(httpServer.http.url('/resource'), () => { return HttpResponse.json( { firstName: 'John' }, { @@ -46,7 +46,7 @@ afterAll(async () => { }) it('returns a mocked response to an "http.get" request', async () => { - const request = http.get(httpServer.http.url('/resource')) + const request = nodeHttp.get(httpServer.http.url('/resource')) const { response, responseText } = await waitForClientRequest(request) expect(response.statusCode).toBe(401) @@ -60,7 +60,7 @@ it('returns a mocked response to an "http.get" request', async () => { }) it('returns a mocked response to an "http.request" request', async () => { - const request = http.request(httpServer.http.url('/resource')) + const request = nodeHttp.request(httpServer.http.url('/resource')) request.end() const { response, responseText } = await waitForClientRequest(request) diff --git a/test/node/msw-api/setup-server/scenarios/https.node.test.ts b/test/node/msw-api/setup-server/scenarios/https.node.test.ts index ba26fd6a2..32eee39ad 100644 --- a/test/node/msw-api/setup-server/scenarios/https.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/https.node.test.ts @@ -3,7 +3,7 @@ */ import https from 'https' import { HttpServer, httpsAgent } from '@open-draft/test-server/http' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' import { waitForClientRequest } from '../../../../support/utils' @@ -22,7 +22,7 @@ beforeAll(async () => { beforeEach(() => { server.use( - rest.get(httpServer.https.url('/resource'), () => { + http.get(httpServer.https.url('/resource'), () => { return HttpResponse.json( { firstName: 'John', diff --git a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/bypass.node.test.ts b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/bypass.node.test.ts index 195875354..d35478e09 100644 --- a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/bypass.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/bypass.node.test.ts @@ -4,7 +4,7 @@ import fetch from 'node-fetch' import { HttpServer } from '@open-draft/test-server/http' import { setupServer } from 'msw/node' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' const httpServer = new HttpServer((app) => { app.get('/', (req, res) => { @@ -21,7 +21,7 @@ beforeAll(async () => { await httpServer.listen() server.use( - rest.get(httpServer.http.url('/user'), () => { + http.get(httpServer.http.url('/user'), () => { return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/callback-throws.node.test.ts b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/callback-throws.node.test.ts index 5189aed59..8a44c0355 100644 --- a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/callback-throws.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/callback-throws.node.test.ts @@ -3,10 +3,10 @@ */ import fetch from 'node-fetch' import { setupServer } from 'msw/node' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' const server = setupServer( - rest.get('https://test.mswjs.io/user', () => { + http.get('https://test.mswjs.io/user', () => { return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/callback.node.test.ts b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/callback.node.test.ts index 3efc5d3d1..13799b6fe 100644 --- a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/callback.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/callback.node.test.ts @@ -3,15 +3,15 @@ */ import fetch from 'node-fetch' import { setupServer } from 'msw/node' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' const server = setupServer( - rest.get('https://test.mswjs.io/user', () => { + http.get('https://test.mswjs.io/user', () => { return HttpResponse.json({ firstName: 'John' }) }), ) -const logs = [] +const logs: Array = [] beforeAll(() => server.listen({ diff --git a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/default.node.test.ts b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/default.node.test.ts index 51457e104..53e0f121f 100644 --- a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/default.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/default.node.test.ts @@ -3,10 +3,10 @@ */ import fetch from 'node-fetch' import { setupServer } from 'msw/node' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' const server = setupServer( - rest.get('https://test.mswjs.io/user', () => { + http.get('https://test.mswjs.io/user', () => { return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/error.node.test.ts b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/error.node.test.ts index d4a583e52..47658b1ed 100644 --- a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/error.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/error.node.test.ts @@ -3,7 +3,7 @@ */ import fetch from 'node-fetch' import { HttpServer } from '@open-draft/test-server/http' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' const httpServer = new HttpServer((app) => { @@ -23,15 +23,15 @@ beforeAll(async () => { await httpServer.listen() server.use( - rest.get(httpServer.http.url('/user'), () => { + http.get(httpServer.http.url('/user'), () => { return HttpResponse.json({ mocked: true }) }), - rest.post(httpServer.http.url('/explicit-return'), () => { + http.post(httpServer.http.url('/explicit-return'), () => { // Short-circuiting in a handler makes it perform the request as-is, // but still treats this request as handled. return }), - rest.post(httpServer.http.url('/implicit-return'), () => { + http.post(httpServer.http.url('/implicit-return'), () => { // The handler that has no return also performs the request as-is, // still treating this request as handled. }), diff --git a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/warn.node.test.ts b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/warn.node.test.ts index f92d8ba94..091864ce0 100644 --- a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/warn.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/warn.node.test.ts @@ -3,10 +3,10 @@ */ import fetch from 'node-fetch' import { setupServer } from 'msw/node' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' const server = setupServer( - rest.get('https://test.mswjs.io/user', () => { + http.get('https://test.mswjs.io/user', () => { return HttpResponse.json({ firstName: 'John' }) }), ) diff --git a/test/node/msw-api/setup-server/scenarios/relative-url.node.test.ts b/test/node/msw-api/setup-server/scenarios/relative-url.node.test.ts index edeaa1a60..85b1f37fe 100644 --- a/test/node/msw-api/setup-server/scenarios/relative-url.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/relative-url.node.test.ts @@ -2,14 +2,14 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' const server = setupServer( - rest.get('/books', () => { + http.get('/books', () => { return HttpResponse.json([1, 2, 3]) }), - rest.get('https://api.backend.com/path', () => { + http.get('https://api.backend.com/path', () => { return HttpResponse.json({ success: true }) }), ) diff --git a/test/node/msw-api/setup-server/scenarios/response-patching..node.test.ts b/test/node/msw-api/setup-server/scenarios/response-patching..node.test.ts index 7d7924ddb..a2814b4ac 100644 --- a/test/node/msw-api/setup-server/scenarios/response-patching..node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/response-patching..node.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import { HttpServer } from '@open-draft/test-server/http' -import { HttpResponse, rest, bypass } from 'msw' +import { HttpResponse, http, bypass } from 'msw' import { setupServer } from 'msw/node' const httpServer = new HttpServer((app) => { @@ -20,7 +20,7 @@ interface ResponseBody { } const server = setupServer( - rest.get('https://test.mswjs.io/user', async () => { + http.get('https://test.mswjs.io/user', async () => { const fetchArgs = await bypass(httpServer.http.url('/user')) const originalResponse = await fetch(...fetchArgs) const body = await originalResponse.json() @@ -30,7 +30,7 @@ const server = setupServer( mocked: true, }) }), - rest.get('https://test.mswjs.io/complex-request', async ({ request }) => { + http.get('https://test.mswjs.io/complex-request', async ({ request }) => { const url = new URL(request.url) const shouldBypass = url.searchParams.get('bypass') === 'true' @@ -53,7 +53,7 @@ const server = setupServer( mocked: true, }) }), - rest.post('https://httpbin.org/post', () => { + http.post('https://httpbin.org/post', () => { return HttpResponse.json({ id: 303 }) }), ) diff --git a/test/node/msw-api/setup-server/scenarios/xhr.node.test.ts b/test/node/msw-api/setup-server/scenarios/xhr.node.test.ts index 770e0fe2d..ea98d859c 100644 --- a/test/node/msw-api/setup-server/scenarios/xhr.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/xhr.node.test.ts @@ -1,12 +1,12 @@ /** * @jest-environment jsdom */ -import { rest } from 'msw' +import { http } from 'msw' import { setupServer } from 'msw/node' import { stringToHeaders } from 'headers-polyfill' const server = setupServer( - rest.get('http://localhost:3001/resource', ({ request }) => { + http.get('http://localhost:3001/resource', ({ request }) => { return new Response( JSON.stringify({ firstName: 'John', diff --git a/test/node/msw-api/setup-server/use.node.test.ts b/test/node/msw-api/setup-server/use.node.test.ts index 979ed1e25..8e74db56d 100644 --- a/test/node/msw-api/setup-server/use.node.test.ts +++ b/test/node/msw-api/setup-server/use.node.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { SetupServer, setupServer } from 'msw/node' import { RequestHandler as ExpressRequestHandler } from 'express' import { HttpServer } from '@open-draft/test-server/http' @@ -21,7 +21,7 @@ beforeAll(async () => { await httpServer.listen() server = setupServer( - rest.get<{ bookId: string }>(httpServer.http.url('/book/:bookId'), () => { + http.get<{ bookId: string }>(httpServer.http.url('/book/:bookId'), () => { return HttpResponse.json({ title: 'Original title' }) }), ) @@ -40,7 +40,7 @@ afterAll(async () => { test('returns a mocked response from a runtime request handler upon match', async () => { server.use( - rest.post(httpServer.http.url('/login'), () => { + http.post(httpServer.http.url('/login'), () => { return HttpResponse.json({ accepted: true }) }), ) @@ -61,7 +61,7 @@ test('returns a mocked response from a runtime request handler upon match', asyn test('returns a mocked response from a persistent request handler override', async () => { server.use( - rest.get<{ bookId: string }>(httpServer.http.url('/book/:bookId'), () => { + http.get<{ bookId: string }>(httpServer.http.url('/book/:bookId'), () => { return HttpResponse.json({ title: 'Permanent override' }) }), ) @@ -80,7 +80,7 @@ test('returns a mocked response from a persistent request handler override', asy test('returns a mocked response from a one-time request handler override only upon first request match', async () => { server.use( - rest.get<{ bookId: string }>( + http.get<{ bookId: string }>( httpServer.http.url('/book/:bookId'), () => { return HttpResponse.json({ title: 'One-time override' }) @@ -101,7 +101,7 @@ test('returns a mocked response from a one-time request handler override only up test('returns a mocked response from a one-time request handler override only upon first request match with parallel requests', async () => { server.use( - rest.get<{ bookId: string }>( + http.get<{ bookId: string }>( httpServer.http.url('/book/:bookId'), ({ params }) => { return HttpResponse.json({ diff --git a/test/node/rest-api/cookies-inheritance.node.test.ts b/test/node/rest-api/cookies-inheritance.node.test.ts index bf9bdbccb..8672570f0 100644 --- a/test/node/rest-api/cookies-inheritance.node.test.ts +++ b/test/node/rest-api/cookies-inheritance.node.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer, SetupServer } from 'msw/node' import { HttpServer } from '@open-draft/test-server/http' import { RequestHandler as ExpressRequestHandler } from 'express' @@ -21,14 +21,14 @@ beforeAll(async () => { await httpServer.listen() server = setupServer( - rest.post(httpServer.https.url('/login'), () => { + http.post(httpServer.https.url('/login'), () => { return new HttpResponse(null, { headers: { 'Set-Cookie': 'authToken=abc-123', }, }) }), - rest.get< + http.get< never, never, { firstName: string; lastName: string } | { error: string } diff --git a/test/node/rest-api/https.node.test.ts b/test/node/rest-api/https.node.test.ts index f0d79a273..72fb2a836 100644 --- a/test/node/rest-api/https.node.test.ts +++ b/test/node/rest-api/https.node.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import https from 'https' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' const server = setupServer() @@ -21,7 +21,7 @@ afterAll(() => { test('intercepts and mocks a request made via "https"', (done) => { server.use( - rest.get('https://api.example.com/resource', () => { + http.get('https://api.example.com/resource', () => { return HttpResponse.text('Hello, world!') }), ) diff --git a/test/node/rest-api/request/body/body-arraybuffer.node.test.ts b/test/node/rest-api/request/body/body-arraybuffer.node.test.ts index ce9ed2f8b..dd5991223 100644 --- a/test/node/rest-api/request/body/body-arraybuffer.node.test.ts +++ b/test/node/rest-api/request/body/body-arraybuffer.node.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' import { setupServer } from 'msw/node' function encodeBuffer(value: unknown) { @@ -10,7 +10,7 @@ function encodeBuffer(value: unknown) { } const server = setupServer( - rest.post('http://localhost/arrayBuffer', async ({ request }) => { + http.post('http://localhost/arrayBuffer', async ({ request }) => { const requestBodyBuffer = await request.arrayBuffer() return HttpResponse.arrayBuffer(requestBodyBuffer) }), diff --git a/test/node/rest-api/request/body/body-form-data.node.test.ts b/test/node/rest-api/request/body/body-form-data.node.test.ts index 874d78705..f07d5026a 100644 --- a/test/node/rest-api/request/body/body-form-data.node.test.ts +++ b/test/node/rest-api/request/body/body-form-data.node.test.ts @@ -1,11 +1,11 @@ /** * @jest-environment node */ -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' const server = setupServer( - rest.post('http://localhost/resource', async ({ request }) => { + http.post('http://localhost/resource', async ({ request }) => { const formData = await request.formData() return HttpResponse.json(Array.from(formData.entries())) }), diff --git a/test/node/rest-api/request/body/body-json.node.test.ts b/test/node/rest-api/request/body/body-json.node.test.ts index 519a3a848..20f301b37 100644 --- a/test/node/rest-api/request/body/body-json.node.test.ts +++ b/test/node/rest-api/request/body/body-json.node.test.ts @@ -2,12 +2,12 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' import { encodeBuffer } from '@mswjs/interceptors' const server = setupServer( - rest.post('http://localhost/json', async ({ request }) => { + http.post('http://localhost/json', async ({ request }) => { return HttpResponse.json(await request.json()) }), ) diff --git a/test/node/rest-api/request/body/body-text.node.test.ts b/test/node/rest-api/request/body/body-text.node.test.ts index d2d1df608..b3025686f 100644 --- a/test/node/rest-api/request/body/body-text.node.test.ts +++ b/test/node/rest-api/request/body/body-text.node.test.ts @@ -2,12 +2,12 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' import { encodeBuffer } from '@mswjs/interceptors' const server = setupServer( - rest.post('http://localhost/resource', async ({ request }) => { + http.post('http://localhost/resource', async ({ request }) => { return HttpResponse.text(await request.text()) }), ) @@ -62,7 +62,7 @@ test('reads array buffer request body as text', async () => { test('reads null request body as empty text', async () => { const res = await fetch('http://localhost/resource', { method: 'POST', - body: null, + body: null as any, }) const body = await res.text() diff --git a/test/node/rest-api/request/matching/all.node.test.ts b/test/node/rest-api/request/matching/all.node.test.ts index c5d9525d6..350855cee 100644 --- a/test/node/rest-api/request/matching/all.node.test.ts +++ b/test/node/rest-api/request/matching/all.node.test.ts @@ -3,7 +3,7 @@ */ import fetch, { Response } from 'node-fetch' import { HttpServer } from '@open-draft/test-server/http' -import { RESTMethods, rest, HttpResponse } from 'msw' +import { HttpMethods, http, HttpResponse } from 'msw' import { setupServer } from 'msw/node' const httpServer = new HttpServer((app) => { @@ -31,21 +31,21 @@ afterAll(async () => { await httpServer.close() }) -async function forEachMethod(callback: (method: RESTMethods) => unknown) { - for (const method of Object.values(RESTMethods)) { +async function forEachMethod(callback: (method: HttpMethods) => unknown) { + for (const method of Object.values(HttpMethods)) { await callback(method) } } test('matches all requests given no custom path', async () => { server.use( - rest.all('*', () => { + http.all('*', () => { return HttpResponse.text('welcome to the jungle') }), ) const responses = await Promise.all( - Object.values(RESTMethods).reduce[]>((all, method) => { + Object.values(HttpMethods).reduce[]>((all, method) => { return all.concat( [ httpServer.http.url('/'), @@ -64,7 +64,7 @@ test('matches all requests given no custom path', async () => { test('respects custom path when matching requests', async () => { server.use( - rest.all(httpServer.http.url('/api/*'), () => { + http.all(httpServer.http.url('/api/*'), () => { return HttpResponse.text('hello world') }), ) diff --git a/test/node/rest-api/request/matching/path-params-decode.node.test.ts b/test/node/rest-api/request/matching/path-params-decode.node.test.ts index 02822d790..f59815ffc 100644 --- a/test/node/rest-api/request/matching/path-params-decode.node.test.ts +++ b/test/node/rest-api/request/matching/path-params-decode.node.test.ts @@ -2,11 +2,11 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' const server = setupServer( - rest.get<{ url: string }>( + http.get<{ url: string }>( 'https://test.mswjs.io/reflect-url/:url', ({ params }) => { return HttpResponse.json({ url: params.url }) diff --git a/test/node/rest-api/response/body-binary.node.test.ts b/test/node/rest-api/response/body-binary.node.test.ts index d0e856350..1c9d8b681 100644 --- a/test/node/rest-api/response/body-binary.node.test.ts +++ b/test/node/rest-api/response/body-binary.node.test.ts @@ -4,7 +4,7 @@ import * as path from 'path' import * as fs from 'fs' import fetch from 'node-fetch' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' function getImageBuffer() { @@ -12,7 +12,7 @@ function getImageBuffer() { } const server = setupServer( - rest.get('http://test.mswjs.io/image', () => { + http.get('http://test.mswjs.io/image', () => { const imageBuffer = getImageBuffer() return HttpResponse.arrayBuffer(imageBuffer, { diff --git a/test/node/rest-api/response/body-json.node.test.ts b/test/node/rest-api/response/body-json.node.test.ts index 66690ed41..9c59d1b92 100644 --- a/test/node/rest-api/response/body-json.node.test.ts +++ b/test/node/rest-api/response/body-json.node.test.ts @@ -1,14 +1,14 @@ /** * @jest-environment node */ -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' const server = setupServer( - rest.get('http://localhost/json', () => { + http.get('http://localhost/json', () => { return HttpResponse.json({ firstName: 'John' }) }), - rest.get('http://localhost/number', () => { + http.get('http://localhost/number', () => { return HttpResponse.json(123) }), ) diff --git a/test/node/rest-api/response/body-stream.node.test.ts b/test/node/rest-api/response/body-stream.node.test.ts index 3213f0606..2e657b5b7 100644 --- a/test/node/rest-api/response/body-stream.node.test.ts +++ b/test/node/rest-api/response/body-stream.node.test.ts @@ -2,7 +2,7 @@ * @jest-environment node */ import https from 'https' -import { HttpResponse, rest, delay } from 'msw' +import { HttpResponse, http, delay } from 'msw' import { setupServer } from 'msw/node' const encoder = new TextEncoder() @@ -22,7 +22,7 @@ afterAll(() => { test('responds with a ReadableStream', async () => { server.use( - rest.get('https://api.example.com/stream', () => { + http.get('https://api.example.com/stream', () => { const stream = new ReadableStream({ start(controller) { controller.enqueue(encoder.encode('hello')) @@ -51,7 +51,7 @@ test('responds with a ReadableStream', async () => { test('supports delays when enqueuing chunks', (done) => { server.use( - rest.get('https://api.example.com/stream', () => { + http.get('https://api.example.com/stream', () => { const stream = new ReadableStream({ async start(controller) { controller.enqueue(encoder.encode('first')) diff --git a/test/node/rest-api/response/body-text.node.test.ts b/test/node/rest-api/response/body-text.node.test.ts index b6b7498d1..0c97edf49 100644 --- a/test/node/rest-api/response/body-text.node.test.ts +++ b/test/node/rest-api/response/body-text.node.test.ts @@ -2,11 +2,11 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' const server = setupServer( - rest.get('http://localhost/text', () => { + http.get('http://localhost/text', () => { return HttpResponse.text('hello world') }), ) diff --git a/test/node/rest-api/response/body-xml.node.test.ts b/test/node/rest-api/response/body-xml.node.test.ts index ee70c1f3c..8862936db 100644 --- a/test/node/rest-api/response/body-xml.node.test.ts +++ b/test/node/rest-api/response/body-xml.node.test.ts @@ -2,11 +2,11 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { HttpResponse, rest } from 'msw' +import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' const server = setupServer( - rest.get('http://localhost/xml', () => { + http.get('http://localhost/xml', () => { return HttpResponse.xml(` abc-123 diff --git a/test/node/rest-api/response/response-error.test.ts b/test/node/rest-api/response/response-error.test.ts index dfb65941e..84bcb5b9a 100644 --- a/test/node/rest-api/response/response-error.test.ts +++ b/test/node/rest-api/response/response-error.test.ts @@ -1,7 +1,7 @@ /** * @jest-environment node */ -import { rest } from 'msw' +import { http } from 'msw' import { setupServer } from 'msw/node' const server = setupServer() @@ -20,7 +20,7 @@ afterAll(() => { it('responds with a mocked error response using "Response.error" shorthand', async () => { server.use( - rest.get('https://api.example.com/resource', () => { + http.get('https://api.example.com/resource', () => { return Response.error() }), ) diff --git a/test/typings/rest.test-d.ts b/test/typings/rest.test-d.ts index 0d9b3228c..7b7df59a7 100644 --- a/test/typings/rest.test-d.ts +++ b/test/typings/rest.test-d.ts @@ -1,16 +1,16 @@ -import { rest, HttpResponse } from 'msw' +import { http, HttpResponse } from 'msw' /** * Request path parameters. */ -rest.get<{ id: string }>('/user/:id', ({ params }) => { +http.get<{ id: string }>('/user/:id', ({ params }) => { params.id.toUpperCase() // @ts-expect-error Unknown path parameter params.unknown }) -rest.get<{ a: string; b: string[] }>('/user/:a/:b/:b', ({ params }) => { +http.get<{ a: string; b: string[] }>('/user/:a/:b/:b', ({ params }) => { params.a.toUpperCase() params.b.map((x) => x) @@ -20,7 +20,7 @@ rest.get<{ a: string; b: string[] }>('/user/:a/:b/:b', ({ params }) => { // Supports path parameters declaration via type. type UserPathParams = { id: string } -rest.get('/user/:id', ({ params }) => { +http.get('/user/:id', ({ params }) => { params.id.toUpperCase() // @ts-expect-error Unknown path parameter @@ -31,14 +31,14 @@ rest.get('/user/:id', ({ params }) => { interface PostPathParameters { id: string } -rest.get('/user/:id', ({ params }) => { +http.get('/user/:id', ({ params }) => { params.id.toUpperCase() // @ts-expect-error Unknown path parameter params.unknown }) -rest.get('/user/:a/:b', ({ params }) => { +http.get('/user/:a/:b', ({ params }) => { // @ts-expect-error Unknown path parameter params.a.toUpperCase() // @ts-expect-error Unknown path parameter @@ -48,7 +48,7 @@ rest.get('/user/:a/:b', ({ params }) => { /** * Request body generic. */ -rest.post('/user', async ({ request }) => { +http.post('/user', async ({ request }) => { const data = await request.json() data.id @@ -61,7 +61,7 @@ rest.post('/user', async ({ request }) => { text.id }) -rest.get('/user', async ({ request }) => { +http.get('/user', async ({ request }) => { const data = await request.json() // @ts-expect-error Null is not an object Object.keys(data) @@ -70,19 +70,19 @@ rest.get('/user', async ({ request }) => { /** * Response body generic. */ -rest.get('/user', () => { +http.get('/user', () => { // Allows responding with a plain Response // when no response body generic is set. return new Response('hello') }) -rest.get('/user', () => { +http.get('/user', () => { return HttpResponse.json({ id: 1 }) }) // Supports explicit response data declared via type. type ResponseBodyType = { id: number } -rest.get('/user', () => { +http.get('/user', () => { const data: ResponseBodyType = { id: 1 } return HttpResponse.json(data) }) @@ -91,18 +91,18 @@ rest.get('/user', () => { interface ResponseBodyInterface { id: number } -rest.get('/user', () => { +http.get('/user', () => { const data: ResponseBodyInterface = { id: 1 } return HttpResponse.json(data) }) -rest.get( +http.get( '/user', // @ts-expect-error String not assignable to number () => HttpResponse.json({ id: 'invalid' }), ) -rest.get( +http.get( '/user', // @ts-expect-error Missing property "id" () => HttpResponse.json({}), @@ -110,12 +110,12 @@ rest.get( // Response resolver can return a response body of a // narrower type than defined in the generic. -rest.get('/user', () => +http.get('/user', () => HttpResponse.json(['value']), ) // Response resolver can return a more specific type // than provided in the response generic. -rest.get('/user', () => +http.get('/user', () => HttpResponse.json({ label: true }), ) From 8943e1dbad08bb2b7358d18e21c39c344bdeeacf Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 31 Jul 2023 20:46:11 +0200 Subject: [PATCH 160/210] docs(passthrough): improve jsdoc description --- src/core/passthrough.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/core/passthrough.ts b/src/core/passthrough.ts index 3ba069a5e..e6f6e08ec 100644 --- a/src/core/passthrough.ts +++ b/src/core/passthrough.ts @@ -1,9 +1,12 @@ /** - * Instruct Mock Service Worker to perform this request as-is. + * Performs the captured request as-is. + * + * This stops request handler lookup so no other handlers + * can affect this request past this point. * Unlike `bypass()`, this will not trigger an additional request. * * @example - * http.get('/user', () => { + * http.get('/resource', () => { * return passthrough() * }) */ From 15db68609c7fb2fca8bf5212f9262bf7396f983f Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 31 Jul 2023 20:48:39 +0200 Subject: [PATCH 161/210] fix: remove unused utils modules --- src/utils/logging/serializeResponse.ts | 16 ---------------- .../createResponseFromIsomorphicResponse.ts | 11 ----------- 2 files changed, 27 deletions(-) delete mode 100644 src/utils/logging/serializeResponse.ts delete mode 100644 src/utils/request/createResponseFromIsomorphicResponse.ts diff --git a/src/utils/logging/serializeResponse.ts b/src/utils/logging/serializeResponse.ts deleted file mode 100644 index c46303d75..000000000 --- a/src/utils/logging/serializeResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { flattenHeadersObject, headersToObject } from 'headers-polyfill' -import type { SerializedResponse } from '../../setupWorker/glossary' - -export async function serializeResponse( - response: Response, -): Promise> { - return { - status: response.status, - statusText: response.statusText, - headers: flattenHeadersObject(headersToObject(response.headers)), - // Serialize the response body to a string - // so it's easier to process further down the chain in "prepareResponse" (browser-only) - // and "parseBody" (ambiguous). - body: await response.clone().text(), - } -} diff --git a/src/utils/request/createResponseFromIsomorphicResponse.ts b/src/utils/request/createResponseFromIsomorphicResponse.ts deleted file mode 100644 index 759d5cd26..000000000 --- a/src/utils/request/createResponseFromIsomorphicResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { IsomorphicResponse } from '@mswjs/interceptors' - -export function createResponseFromIsomorphicResponse( - response: IsomorphicResponse, -): Response { - return new Response(response.body, { - status: response.status, - statusText: response.statusText, - headers: response.headers, - }) -} From 90b854ab2a82cd742ebbe9647ed645f0ce9ff04c Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sun, 6 Aug 2023 13:51:58 +0200 Subject: [PATCH 162/210] chore(release): v0.0.0-fetch.rc-16 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 77f67c2e8..6336bcc81 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-15", + "version": "0.0.0-fetch.rc-16", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/core/index.js", "module": "./lib/core/index.mjs", From bb02e57568e052206ed8bc55b800cad5fc4c8c78 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 18 Aug 2023 22:16:33 +0200 Subject: [PATCH 163/210] test(graphql): add test on anonymous operation warning (#1693) --- src/core/handlers/GraphQLHandler.ts | 3 +- src/core/utils/request/onUnhandledRequest.ts | 15 +- .../graphql-api/anonymous-operation.mocks.ts | 12 + .../graphql-api/anonymous-operation.test.ts | 210 ++++++++++++++++++ .../graphql-api/anonymous-operations.test.ts | 108 +++++++++ 5 files changed, 344 insertions(+), 4 deletions(-) create mode 100644 test/browser/graphql-api/anonymous-operation.mocks.ts create mode 100644 test/browser/graphql-api/anonymous-operation.test.ts create mode 100644 test/node/graphql-api/anonymous-operations.test.ts diff --git a/src/core/handlers/GraphQLHandler.ts b/src/core/handlers/GraphQLHandler.ts index 509cc2f6b..d6dd7c3f7 100644 --- a/src/core/handlers/GraphQLHandler.ts +++ b/src/core/handlers/GraphQLHandler.ts @@ -129,8 +129,7 @@ export class GraphQLHandler extends RequestHandler< devUtils.warn(`\ Failed to intercept a GraphQL request at "${request.method} ${publicUrl}": anonymous GraphQL operations are not supported. -Consider naming this operation or using "graphql.operation()" request handler to intercept GraphQL requests regardless of their operation name/type. Read more: https://mswjs.io/docs/api/graphql/operation\ - `) +Consider naming this operation or using "graphql.operation()" request handler to intercept GraphQL requests regardless of their operation name/type. Read more: https://mswjs.io/docs/api/graphql/operation`) return false } diff --git a/src/core/utils/request/onUnhandledRequest.ts b/src/core/utils/request/onUnhandledRequest.ts index 3ddef41fb..3230bbcdf 100644 --- a/src/core/utils/request/onUnhandledRequest.ts +++ b/src/core/utils/request/onUnhandledRequest.ts @@ -3,6 +3,7 @@ import jsLevenshtein from '@bundled-es-modules/js-levenshtein' import { RequestHandler, HttpHandler, GraphQLHandler } from '../..' import { ParsedGraphQLQuery, + ParsedGraphQLRequest, parseGraphQLRequest, } from '../internal/parseGraphQLRequest' import { getPublicUrlFromRequest } from './getPublicUrlFromRequest' @@ -144,6 +145,7 @@ export async function onUnhandledRequest( const parsedGraphQLQuery = await parseGraphQLRequest(request).catch( () => null, ) + const publicUrl = getPublicUrlFromRequest(request) function generateHandlerSuggestion(): string { /** @@ -169,10 +171,19 @@ export async function onUnhandledRequest( : '' } + function getGraphQLRequestHeader( + parsedGraphQLRequest: ParsedGraphQLRequest, + ): string { + if (!parsedGraphQLRequest?.operationName) { + return `anonymous ${parsedGraphQLRequest?.operationType} (${request.method} ${publicUrl})` + } + + return `${parsedGraphQLRequest.operationType} ${parsedGraphQLRequest.operationName} (${request.method} ${publicUrl})` + } + function generateUnhandledRequestMessage(): string { - const publicUrl = getPublicUrlFromRequest(request) const requestHeader = parsedGraphQLQuery - ? `${parsedGraphQLQuery.operationType} ${parsedGraphQLQuery.operationName} (${request.method} ${publicUrl})` + ? getGraphQLRequestHeader(parsedGraphQLQuery) : `${request.method} ${publicUrl}` const handlerSuggestion = generateHandlerSuggestion() diff --git a/test/browser/graphql-api/anonymous-operation.mocks.ts b/test/browser/graphql-api/anonymous-operation.mocks.ts new file mode 100644 index 000000000..92647efc5 --- /dev/null +++ b/test/browser/graphql-api/anonymous-operation.mocks.ts @@ -0,0 +1,12 @@ +import { graphql, HttpResponse } from 'msw' +import { setupWorker } from 'msw/browser' + +const worker = setupWorker() +worker.start() + +// @ts-ignore +window.msw = { + worker, + graphql, + HttpResponse, +} diff --git a/test/browser/graphql-api/anonymous-operation.test.ts b/test/browser/graphql-api/anonymous-operation.test.ts new file mode 100644 index 000000000..c5702e34f --- /dev/null +++ b/test/browser/graphql-api/anonymous-operation.test.ts @@ -0,0 +1,210 @@ +import { HttpServer } from '@open-draft/test-server/http' +import { test, expect } from '../playwright.extend' +import { gql } from '../../support/graphql' +import { waitFor } from '../../support/waitFor' + +declare namespace window { + export const msw: { + worker: import('msw/browser').SetupWorkerApi + graphql: typeof import('msw').graphql + HttpResponse: typeof import('msw').HttpResponse + } +} + +const httpServer = new HttpServer((app) => { + app.post('/graphql', (req, res) => { + res.json({ + data: { + user: { + id: 'abc-123', + }, + }, + }) + }) +}) + +test.beforeAll(async () => { + await httpServer.listen() +}) + +test.afterAll(async () => { + await httpServer.close() +}) + +test('does not warn on anonymous GraphQL operation when no GraphQL handlers are present', async ({ + loadExample, + query, + spyOnConsole, +}) => { + await loadExample(require.resolve('./anonymous-operation.mocks.ts')) + const consoleSpy = spyOnConsole() + + const endpointUrl = httpServer.http.url('/graphql') + const response = await query(endpointUrl, { + query: gql` + # Intentionally anonymous query. + query { + user { + id + } + } + `, + }) + + const json = await response.json() + + // Must get the original server response. + expect(json).toEqual({ + data: { + user: { + id: 'abc-123', + }, + }, + }) + + await waitFor(() => { + // Must print a generic unhandled GraphQL request warning. + // This has nothing to do with the operation being anonymous. + expect(consoleSpy.get('warning')).toEqual([ + `\ +[MSW] Warning: captured a request without a matching request handler: + + • anonymous query (POST ${endpointUrl}) + +If you still wish to intercept this unhandled request, please create a request handler for it. +Read more: https://mswjs.io/docs/getting-started/mocks`, + ]) + }) + + // // Must print the warning because anonymous operations cannot be captured + // // using standard "graphql.query()" and "graphql.mutation()" handlers. + // await waitFor(() => { + // expect(consoleSpy.get('warning')).toEqual( + // expect.arrayContaining([ + // `[MSW] Failed to intercept a GraphQL request at "POST ${endpointUrl}": anonymous GraphQL operations are not supported. + + // Consider naming this operation or using "graphql.operation()" request handler to intercept GraphQL requests regardless of their operation name/type. Read more: https://mswjs.io/docs/api/graphql/operation`, + // ]), + // ) + // }) +}) + +test('warns on handled anonymous GraphQL operation', async ({ + loadExample, + query, + spyOnConsole, + page, +}) => { + await loadExample(require.resolve('./anonymous-operation.mocks.ts')) + const consoleSpy = spyOnConsole() + + await page.evaluate(() => { + const { worker, graphql, HttpResponse } = window.msw + + worker.use( + // This handler will have no effect on the anonymous operation performed. + graphql.query('IrrelevantQuery', () => { + return HttpResponse.json({ + data: { + user: { + id: 'mocked-123', + }, + }, + }) + }), + ) + }) + + const endpointUrl = httpServer.http.url('/graphql') + const response = await query(endpointUrl, { + query: gql` + # Intentionally anonymous query. + # It will be handled in the "graphql.operation()" handler above. + query { + user { + id + } + } + `, + }) + + const json = await response.json() + + // Must get the original response because the "graphql.query()" + // handler won't match an anonymous GraphQL operation. + expect(json).toEqual({ + data: { + user: { + id: 'abc-123', + }, + }, + }) + + // Must print the warning because an anonymous operation has been performed. + await waitFor(() => { + expect(consoleSpy.get('warning')).toEqual( + expect.arrayContaining([ + `[MSW] Failed to intercept a GraphQL request at "POST ${endpointUrl}": anonymous GraphQL operations are not supported. + +Consider naming this operation or using "graphql.operation()" request handler to intercept GraphQL requests regardless of their operation name/type. Read more: https://mswjs.io/docs/api/graphql/operation`, + ]), + ) + }) +}) + +test('does not print a warning on anonymous GraphQL operation handled by "graphql.operation()"', async ({ + loadExample, + spyOnConsole, + page, + query, +}) => { + await loadExample(require.resolve('./anonymous-operation.mocks.ts')) + const consoleSpy = spyOnConsole() + + await page.evaluate(() => { + const { worker, graphql, HttpResponse } = window.msw + + worker.use( + // This handler will match ANY anonymous GraphQL operation. + // It's a good idea to include some matching logic to differentiate + // between those operations. We're omitting it for testing purposes. + graphql.operation(() => { + return HttpResponse.json({ + data: { + user: { + id: 'mocked-123', + }, + }, + }) + }), + ) + }) + + const endpointUrl = httpServer.http.url('/graphql') + const response = await query(endpointUrl, { + query: gql` + # Intentionally anonymous query. + # It will be handled in the "graphql.operation()" handler above. + query { + user { + id + } + } + `, + }) + + const json = await response.json() + + // Must get the mocked response. + expect(json).toEqual({ + data: { + user: { + id: 'mocked-123', + }, + }, + }) + + // Must not print any warnings because a permissive "graphql.operation()" + // handler was used to capture and mock the anonymous GraphQL operation. + expect(consoleSpy.get('warning')).toBeUndefined() +}) diff --git a/test/node/graphql-api/anonymous-operations.test.ts b/test/node/graphql-api/anonymous-operations.test.ts new file mode 100644 index 000000000..8a7643435 --- /dev/null +++ b/test/node/graphql-api/anonymous-operations.test.ts @@ -0,0 +1,108 @@ +/** + * @jest-environment node + */ +import fetch from 'node-fetch' +import { HttpServer } from '@open-draft/test-server/http' +import { HttpResponse, graphql } from 'msw' +import { setupServer } from 'msw/node' + +const httpServer = new HttpServer((app) => { + app.post('/graphql', (req, res) => { + res.json({ + data: { + user: { id: 'abc-123' }, + }, + }) + }) +}) + +const server = setupServer(graphql.query('GetUser', () => {})) + +beforeAll(async () => { + server.listen() + await httpServer.listen() + jest.spyOn(console, 'warn').mockImplementation(() => {}) +}) + +afterEach(() => { + server.resetHandlers() + jest.resetAllMocks() +}) + +afterAll(async () => { + jest.restoreAllMocks() + server.close() + await httpServer.close() +}) + +test('warns on unhandled anonymous GraphQL operations', async () => { + const endpointUrl = httpServer.http.url('/graphql') + const response = await fetch(endpointUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + query: ` + query { + user { + id + } + } + `, + }), + }) + const json = await response.json() + + // Must receive the original server response. + expect(json).toEqual({ + data: { user: { id: 'abc-123' } }, + }) + + // Must print a warning about the anonymous GraphQL operation. + expect(console.warn).toHaveBeenCalledWith(`\ +[MSW] Failed to intercept a GraphQL request at "POST ${endpointUrl}": anonymous GraphQL operations are not supported. + +Consider naming this operation or using "graphql.operation()" request handler to intercept GraphQL requests regardless of their operation name/type. Read more: https://mswjs.io/docs/api/graphql/operation`) +}) + +test('does not print a warning when using anonymous operation with "graphql.operation()"', async () => { + server.use( + graphql.operation(async ({ query, variables }) => { + return HttpResponse.json({ + data: { + pets: [{ name: 'Tom' }, { name: 'Jerry' }], + }, + }) + }), + ) + + const endpointUrl = httpServer.http.url('/graphql') + const response = await fetch(endpointUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + query: ` + query { + pets { + name + } + } + `, + }), + }) + const json = await response.json() + + // Must get the mocked response. + expect(json).toEqual({ + data: { + pets: [{ name: 'Tom' }, { name: 'Jerry' }], + }, + }) + + // Must print no warnings: operation is handled and doesn't + // have to be named since we're using "graphql.operation()". + expect(console.warn).not.toHaveBeenCalled() +}) From 3b8f57ec10af6c672bce639dbc5a3dd6f6faa76d Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 25 Aug 2023 17:37:36 +0200 Subject: [PATCH 164/210] fix(graphql): clone request before parsing (#1714) --- .../internal/parseGraphQLRequest.test.ts | 13 ++++ .../utils/internal/parseGraphQLRequest.ts | 11 ++-- .../request/body/body-used.node.test.ts | 66 +++++++++++++++++++ 3 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 test/node/rest-api/request/body/body-used.node.test.ts diff --git a/src/core/utils/internal/parseGraphQLRequest.test.ts b/src/core/utils/internal/parseGraphQLRequest.test.ts index 176ab7cd0..d2a4564b3 100644 --- a/src/core/utils/internal/parseGraphQLRequest.test.ts +++ b/src/core/utils/internal/parseGraphQLRequest.test.ts @@ -85,3 +85,16 @@ test('returns false given a GraphQL-incompatible request', async () => { }) expect(await parseGraphQLRequest(postRequest)).toBeUndefined() }) + +test('does not read the original request body', async () => { + const request = new Request(new URL('http://localhost/api'), { + method: 'POST', + body: JSON.stringify({ payload: 'value' }), + }) + + await parseGraphQLRequest(request) + + // Must not read the original request body because GraphQL parsing + // is an internal operation that must not lock the body stream. + expect(request.bodyUsed).toBe(false) +}) diff --git a/src/core/utils/internal/parseGraphQLRequest.ts b/src/core/utils/internal/parseGraphQLRequest.ts index bf6a7e8bc..230d145f0 100644 --- a/src/core/utils/internal/parseGraphQLRequest.ts +++ b/src/core/utils/internal/parseGraphQLRequest.ts @@ -90,10 +90,9 @@ function extractMultipartVariables( } async function getGraphQLInput(request: Request): Promise { - const url = new URL(request.url) - switch (request.method) { case 'GET': { + const url = new URL(request.url) const query = url.searchParams.get('query') const variables = url.searchParams.get('variables') || '' @@ -104,12 +103,16 @@ async function getGraphQLInput(request: Request): Promise { } case 'POST': { + // Clone the request so we could read its body without locking + // the body stream to the downward consumers. + const requestClone = request.clone() + // Handle multipart body GraphQL operations. if ( request.headers.get('content-type')?.includes('multipart/form-data') ) { const responseJson = parseMultipartData( - await request.text(), + await requestClone.text(), request.headers, ) @@ -147,7 +150,7 @@ async function getGraphQLInput(request: Request): Promise { query: string variables?: GraphQLVariables operations?: any /** @todo Annotate this */ - } = await request.json().catch(() => null) + } = await requestClone.json().catch(() => null) if (requestJson?.query) { const { query, variables } = requestJson diff --git a/test/node/rest-api/request/body/body-used.node.test.ts b/test/node/rest-api/request/body/body-used.node.test.ts new file mode 100644 index 000000000..cc6d77a5c --- /dev/null +++ b/test/node/rest-api/request/body/body-used.node.test.ts @@ -0,0 +1,66 @@ +/** + * @jest-environment node + */ +import { HttpResponse, http, graphql } from 'msw' +import { setupServer } from 'msw/node' +import * as express from 'express' +import { HttpServer } from '@open-draft/test-server/http' + +const httpServer = new HttpServer((app) => { + app.post('/resource', express.json(), (req, res) => { + res.json({ response: `received: ${req.body.message}` }) + }) +}) + +const server = setupServer() + +beforeAll(async () => { + server.listen() + await httpServer.listen() +}) + +afterEach(() => { + server.resetHandlers() + jest.restoreAllMocks() +}) + +afterAll(async () => { + server.close() + await httpServer.close() +}) + +it('does not read the body while parsing an unhandled request', async () => { + // Expecting an unhandled request warning in this test. + jest.spyOn(console, 'warn').mockImplementation(() => {}) + + const requestUrl = httpServer.http.url('/resource') + const response = await fetch(requestUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + message: 'Hello server', + }), + }) + expect(await response.json()).toEqual({ response: `received: Hello server` }) +}) + +it('does not read the body while parsing an unhandled request', async () => { + const requestUrl = httpServer.http.url('/resource') + server.use( + http.post(requestUrl, () => { + return HttpResponse.json({ mocked: true }) + }), + ) + const response = await fetch(requestUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + message: 'Hello server', + }), + }) + expect(await response.json()).toEqual({ mocked: true }) +}) From 3fb29e5dd41650db1d92bf4aeae4b5a34bb073f4 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 25 Aug 2023 17:38:49 +0200 Subject: [PATCH 165/210] chore(release): v0.0.0-fetch.rc-17 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 77cd42543..c26a9b668 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-16", + "version": "0.0.0-fetch.rc-17", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/core/index.js", "module": "./lib/core/index.mjs", From a2b61baea42b7194fc83275e8d1544bb1c29dfb2 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 2 Sep 2023 11:52:16 +0200 Subject: [PATCH 166/210] docs: add multipart-data common issue to migrating --- MIGRATING.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/MIGRATING.md b/MIGRATING.md index 96f87e383..9f00369b9 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -637,4 +637,8 @@ http.get('/greeting', () => { ### `Response is not defined` -Make sure to import the `Response` class from the `msw` package. See [this](#responses-in-nodejs). +This likely means that you are running an old version of Node.js. Please use Node.js v18.14.0 and higher with this version of MSW. Also, see [this](#responses-in-nodejs). + +### `multipart/form-data is not supported` in Node.js + +Earlier versions of Node.js 18, like v18.8.0, had no support for `request.formData()`. Please upgrade to the latest Node.js version where Undici have added the said support to resolve the issue. From 4ba43a5adfad01605468600535a1f8e20d606d52 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 7 Sep 2023 11:14:39 +0200 Subject: [PATCH 167/210] chore: upgrade "headers-polyfill" to 3.2.3 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 31335f708..89be1427d 100644 --- a/package.json +++ b/package.json @@ -123,7 +123,7 @@ "chokidar": "^3.4.2", "formdata-node": "4.4.1", "graphql": "^15.0.0 || ^16.7.0", - "headers-polyfill": "^3.2.0", + "headers-polyfill": "^3.2.3", "inquirer": "^8.2.0", "is-node-process": "^1.2.0", "js-levenshtein": "^1.1.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1fa0bc5d7..e28280f30 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -52,7 +52,7 @@ specifiers: fs-teardown: ^0.3.0 glob: ^9.3.4 graphql: ^15.0.0 || ^16.7.0 - headers-polyfill: ^3.2.0 + headers-polyfill: ^3.2.3 inquirer: ^8.2.0 is-node-process: ^1.2.0 jest: ^29.4.3 @@ -94,7 +94,7 @@ dependencies: chokidar: 3.4.1 formdata-node: 4.4.1 graphql: 16.8.0 - headers-polyfill: 3.2.0 + headers-polyfill: 3.2.3 inquirer: 8.2.5 is-node-process: 1.2.0 js-levenshtein: 1.1.6 @@ -2354,7 +2354,7 @@ packages: '@open-draft/deferred-promise': 2.1.0 '@open-draft/logger': 0.3.0 '@open-draft/until': 2.1.0 - headers-polyfill: 3.2.0 + headers-polyfill: 3.2.3 outvariant: 1.4.0 strict-event-emitter: 0.5.0 dev: false @@ -6371,8 +6371,8 @@ packages: function-bind: 1.1.1 dev: true - /headers-polyfill/3.2.0: - resolution: {integrity: sha512-NsYkbrWFQyoPBrbX5riycJ3D4aaB/3fpx1nYgDi3JTTnoeFET3BN0rq2nOB3VUmvpQrYpbKL8zRJo1Jsmmt7nA==} + /headers-polyfill/3.2.3: + resolution: {integrity: sha512-oj6MO8sdFQ9gQQedSVdMGh96suxTNp91vPQu7C4qx/57FqYsA5TiNr92nhIZwVQq8zygn4nu3xS1aEqpakGqdw==} /homedir-polyfill/1.0.3: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} @@ -8621,7 +8621,7 @@ packages: '@types/uuid': 8.3.4 debug: 4.3.4 express: 4.18.2 - headers-polyfill: 3.2.0 + headers-polyfill: 3.2.3 memfs: 3.4.13 mustache: 4.2.0 playwright: 1.30.0 From 08985175969c3392e5912cca9717de700aa30d12 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 7 Sep 2023 11:14:53 +0200 Subject: [PATCH 168/210] chore(release): v0.0.0-fetch.rc-18 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 89be1427d..cd8019d70 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-17", + "version": "0.0.0-fetch.rc-18", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/core/index.js", "module": "./lib/core/index.mjs", From b2b634c88adf37cb65dd9623911b95f9df9a43d8 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 7 Sep 2023 18:03:54 +0200 Subject: [PATCH 169/210] fix: remove "NetworkError" in favor of "HttpResponse.error" (#1730) --- MIGRATING.md | 17 +++++++++++++++++ package.json | 2 +- pnpm-lock.yaml | 17 +++++++++++------ .../start/createRequestListener.ts | 12 ------------ .../start/utils/createMessageChannel.ts | 1 - src/core/NetworkError.ts | 17 ----------------- src/core/index.ts | 1 - src/mockServiceWorker.js | 18 ------------------ .../msw-api/res/network-error.mocks.ts | 4 ++-- .../scenarios/errors/network-error.mocks.ts | 4 ++-- .../scenarios/errors/network-error.test.ts | 10 ---------- test/jest.config.js | 2 ++ .../msw-api/res/network-error.node.test.ts | 19 ++++++++----------- .../rest-api/response/response-error.test.ts | 2 +- 14 files changed, 44 insertions(+), 82 deletions(-) delete mode 100644 src/core/NetworkError.ts diff --git a/MIGRATING.md b/MIGRATING.md index 9f00369b9..5af1b007f 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -19,6 +19,7 @@ To help you navigate, we've structured this guide on the feature basis. You can - [req.cookies](#request-cookies) - [req.passthrough](#reqpassthrough) - [res.once](#resonce) +- [res.networkError](#resnetworkerror) - [Context utilities](#context-utilities) - [ctx.status](#ctxstatus) - [ctx.set](#ctxset) @@ -249,6 +250,22 @@ export const handlers = [ ] ``` +## `res.networkError` + +To respond to a request with a network error, use the `HttpResponse.error()` static method: + +```js +import { http, HttpResponse } from 'msw' + +export const handlers = [ + http.get('/resource', () => { + return HttpResponse.error() + }), +] +``` + +> Note that we are dropping support for custom network error messages to be more compliant with the standard [`Response.error()`](https://developer.mozilla.org/en-US/docs/Web/API/Response/error_static) network errors, which don't support custom error messages. + ## `req.passthrough` ```js diff --git a/package.json b/package.json index cd8019d70..0fca6c1a9 100644 --- a/package.json +++ b/package.json @@ -114,7 +114,7 @@ "@bundled-es-modules/js-levenshtein": "^2.0.1", "@bundled-es-modules/statuses": "^1.0.1", "@mswjs/cookies": "^1.0.0", - "@mswjs/interceptors": "^0.23.0", + "@mswjs/interceptors": "^0.25.1", "@open-draft/until": "^2.1.0", "@types/cookie": "^0.4.1", "@types/js-levenshtein": "^1.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e28280f30..05f8dc231 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,7 +12,7 @@ specifiers: '@commitlint/cli': ^16.1.0 '@commitlint/config-conventional': ^16.0.0 '@mswjs/cookies': ^1.0.0 - '@mswjs/interceptors': ^0.23.0 + '@mswjs/interceptors': ^0.25.1 '@open-draft/test-server': ^0.4.2 '@open-draft/until': ^2.1.0 '@ossjs/release': ^0.7.2 @@ -85,7 +85,7 @@ dependencies: '@bundled-es-modules/js-levenshtein': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 '@mswjs/cookies': 1.0.0 - '@mswjs/interceptors': 0.23.0 + '@mswjs/interceptors': 0.25.1 '@open-draft/until': 2.1.0 '@types/cookie': 0.4.1 '@types/js-levenshtein': 1.1.1 @@ -2347,14 +2347,14 @@ packages: engines: {node: '>=14'} dev: false - /@mswjs/interceptors/0.23.0: - resolution: {integrity: sha512-JytvDa7pBbxXvCTXBYQs+0eE6MqxpqH/H4peRNY6zVAlvJ6d/hAWLHAef1D9lWN4zuIigN0VkakGOAUrX7FWLg==} + /@mswjs/interceptors/0.25.1: + resolution: {integrity: sha512-iM/2Qp+y7zKrX1sf45sPvvE7CGly8AKSR8Ua7cXAszXCK/To5i/L8AwiheEaBSVcZ6R7Em7kTcyZWN5H2ivcEQ==} engines: {node: '>=18'} dependencies: - '@open-draft/deferred-promise': 2.1.0 + '@open-draft/deferred-promise': 2.2.0 '@open-draft/logger': 0.3.0 '@open-draft/until': 2.1.0 - headers-polyfill: 3.2.3 + is-node-process: 1.2.0 outvariant: 1.4.0 strict-event-emitter: 0.5.0 dev: false @@ -2382,6 +2382,11 @@ packages: /@open-draft/deferred-promise/2.1.0: resolution: {integrity: sha512-Rzd5JrXZX8zErHzgcGyngh4fmEbSHqTETdGj9rXtejlqMIgXFlyKBA7Jn1Xp0Ls0M0Y22+xHcWiEzbmdWl0BOA==} + dev: true + + /@open-draft/deferred-promise/2.2.0: + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + dev: false /@open-draft/logger/0.3.0: resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} diff --git a/src/browser/setupWorker/start/createRequestListener.ts b/src/browser/setupWorker/start/createRequestListener.ts index f82d3fe75..1fa973045 100644 --- a/src/browser/setupWorker/start/createRequestListener.ts +++ b/src/browser/setupWorker/start/createRequestListener.ts @@ -7,7 +7,6 @@ import { ServiceWorkerMessage, WorkerChannel, } from './utils/createMessageChannel' -import { NetworkError } from '~/core/NetworkError' import { parseWorkerRequest } from '../../utils/parseWorkerRequest' import { handleRequest } from '~/core/utils/handleRequest' import { RequiredDeep } from '~/core/typeUtils' @@ -70,17 +69,6 @@ export const createRequestListener = ( }, ) } catch (error) { - if (error instanceof NetworkError) { - // Treat emulated network error differently, - // as it is an intended exception in a request handler. - messageChannel.postMessage('NETWORK_ERROR', { - name: error.name, - message: error.message, - }) - - return - } - if (error instanceof Error) { devUtils.error( `Uncaught exception in the request handler for "%s %s": diff --git a/src/browser/setupWorker/start/utils/createMessageChannel.ts b/src/browser/setupWorker/start/utils/createMessageChannel.ts index 60b07741e..210a7c3d1 100644 --- a/src/browser/setupWorker/start/utils/createMessageChannel.ts +++ b/src/browser/setupWorker/start/utils/createMessageChannel.ts @@ -17,7 +17,6 @@ interface WorkerChannelEventsMap { transfer?: [ReadableStream], ] NOT_FOUND: [] - NETWORK_ERROR: [data: { name: string; message: string }] } export class WorkerChannel { diff --git a/src/core/NetworkError.ts b/src/core/NetworkError.ts deleted file mode 100644 index c169d738a..000000000 --- a/src/core/NetworkError.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * An error indicating network issues while - * processing a request. - * - * @example - * import { http, NetworkError } from 'msw' - * - * http.get('/user', () => { - * throw new NetworkError('Failed to fetch') - * }) - */ -export class NetworkError extends Error { - constructor(message: string) { - super(message) - this.name = 'NetworkError' - } -} diff --git a/src/core/index.ts b/src/core/index.ts index 799f6e353..9deaa86d5 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -46,7 +46,6 @@ export * from './HttpResponse' export * from './delay' export { bypass } from './bypass' export { passthrough } from './passthrough' -export { NetworkError } from './NetworkError' // Validate environmental globals before executing any code. // This ensures that the library gives user-friendly errors diff --git a/src/mockServiceWorker.js b/src/mockServiceWorker.js index 214bc4426..a0634ad6d 100644 --- a/src/mockServiceWorker.js +++ b/src/mockServiceWorker.js @@ -112,15 +112,6 @@ self.addEventListener('fetch', function (event) { event.respondWith( handleRequest(event, requestId).catch((error) => { - if (error.name === 'NetworkError') { - console.warn( - '[MSW] Successfully emulated a network error for the "%s %s" request.', - request.method, - request.url, - ) - return - } - // At this point, any exception indicates an issue with the original request/response. console.error( `\ @@ -270,15 +261,6 @@ async function getResponse(event, client, requestId) { case 'MOCK_NOT_FOUND': { return passthrough() } - - case 'NETWORK_ERROR': { - const { name, message } = clientMessage.data - const networkError = new Error(message) - networkError.name = name - - // Rejecting a "respondWith" promise emulates a network error. - throw networkError - } } return passthrough() diff --git a/test/browser/msw-api/res/network-error.mocks.ts b/test/browser/msw-api/res/network-error.mocks.ts index 2c6f3cfaa..b7eaa41db 100644 --- a/test/browser/msw-api/res/network-error.mocks.ts +++ b/test/browser/msw-api/res/network-error.mocks.ts @@ -1,9 +1,9 @@ -import { http, NetworkError } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( http.get('/user', () => { - throw new NetworkError('Custom network error message') + return HttpResponse.error() }), ) diff --git a/test/browser/msw-api/setup-worker/scenarios/errors/network-error.mocks.ts b/test/browser/msw-api/setup-worker/scenarios/errors/network-error.mocks.ts index 2c6f3cfaa..b7eaa41db 100644 --- a/test/browser/msw-api/setup-worker/scenarios/errors/network-error.mocks.ts +++ b/test/browser/msw-api/setup-worker/scenarios/errors/network-error.mocks.ts @@ -1,9 +1,9 @@ -import { http, NetworkError } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( http.get('/user', () => { - throw new NetworkError('Custom network error message') + return HttpResponse.error() }), ) diff --git a/test/browser/msw-api/setup-worker/scenarios/errors/network-error.test.ts b/test/browser/msw-api/setup-worker/scenarios/errors/network-error.test.ts index bec2179e6..8e1f43aa6 100644 --- a/test/browser/msw-api/setup-worker/scenarios/errors/network-error.test.ts +++ b/test/browser/msw-api/setup-worker/scenarios/errors/network-error.test.ts @@ -23,7 +23,6 @@ test('propagates a mocked network error', async ({ spyOnConsole, fetch, page, - waitFor, makeUrl, }) => { const consoleSpy = spyOnConsole() @@ -41,15 +40,6 @@ test('propagates a mocked network error', async ({ ]), ) - // Expect a notification warning from the library. - await waitFor(async () => { - expect(workerConsole.messages.get('warn')).toEqual( - expect.arrayContaining([ - `[MSW] Successfully emulated a network error for the "GET ${endpointUrl}" request.`, - ]), - ) - }) - // The worker must not produce any errors. expect(workerConsole.messages.get('error')).toBeUndefined() }) diff --git a/test/jest.config.js b/test/jest.config.js index 1e384c902..e4a1a94ca 100644 --- a/test/jest.config.js +++ b/test/jest.config.js @@ -22,5 +22,7 @@ module.exports = { globals: { Request, Response, + TextEncoder, + TextDecoder, }, } diff --git a/test/node/msw-api/res/network-error.node.test.ts b/test/node/msw-api/res/network-error.node.test.ts index c09c35323..6caaafaa7 100644 --- a/test/node/msw-api/res/network-error.node.test.ts +++ b/test/node/msw-api/res/network-error.node.test.ts @@ -1,23 +1,20 @@ /** * @jest-environment node */ -import fetch from 'node-fetch' -import { http, NetworkError } from 'msw' +import { http, HttpResponse } from 'msw' import { setupServer } from 'msw/node' -const server = setupServer() +const server = setupServer( + http.get('http://example.com/user', () => { + return HttpResponse.error() + }), +) beforeAll(() => server.listen()) afterAll(() => server.close()) test('throws a network error when used with fetch', async () => { - server.use( - http.get('http://test.io/user', () => { - throw new NetworkError('Custom network error message') - }), - ) - - await expect(fetch('http://test.io/user')).rejects.toThrow( - 'Custom network error message', + await expect(fetch('http://example.com/user')).rejects.toThrow( + 'Failed to fetch', ) }) diff --git a/test/node/rest-api/response/response-error.test.ts b/test/node/rest-api/response/response-error.test.ts index 84bcb5b9a..443023ecb 100644 --- a/test/node/rest-api/response/response-error.test.ts +++ b/test/node/rest-api/response/response-error.test.ts @@ -31,5 +31,5 @@ it('responds with a mocked error response using "Response.error" shorthand', asy expect(responseError).toEqual(new TypeError('Failed to fetch')) // Guard against false positives due to exceptions arising from the library. - expect(responseError.cause).toBeUndefined() + expect(responseError.cause).toEqual(Response.error()) }) From faa71c42430176b8fb4aa073e2260a783437f3e2 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 8 Sep 2023 14:45:30 +0200 Subject: [PATCH 170/210] chore(release): v0.0.0-fetch.rc-19 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0fca6c1a9..69b7c9a46 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-18", + "version": "0.0.0-fetch.rc-19", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/core/index.js", "module": "./lib/core/index.mjs", From 3eca8c7ee9ffe3dca7fc6eb82ede811038b8a08c Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 16 Sep 2023 15:19:37 +0200 Subject: [PATCH 171/210] fix(graphql): support request handler options (#1739) --- src/core/graphql.ts | 16 +++++++++++++--- src/core/handlers/GraphQLHandler.ts | 3 +++ src/core/handlers/HttpHandler.ts | 8 ++++---- src/core/handlers/RequestHandler.ts | 22 +++++++++++++--------- src/core/http.ts | 4 ++-- 5 files changed, 35 insertions(+), 18 deletions(-) diff --git a/src/core/graphql.ts b/src/core/graphql.ts index fb2978058..c9ae77070 100644 --- a/src/core/graphql.ts +++ b/src/core/graphql.ts @@ -1,5 +1,8 @@ import type { DocumentNode, OperationTypeNode } from 'graphql' -import { ResponseResolver } from './handlers/RequestHandler' +import { + ResponseResolver, + RequestHandlerOptions, +} from './handlers/RequestHandler' import { GraphQLHandler, GraphQLVariables, @@ -8,7 +11,7 @@ import { GraphQLResolverExtras, GraphQLResponseBody, } from './handlers/GraphQLHandler' -import { Path } from './utils/matching/matchRequestUrl' +import type { Path } from './utils/matching/matchRequestUrl' export interface TypedDocumentNode< Result = { [key: string]: any }, @@ -36,8 +39,15 @@ function createScopedGraphQLHandler( null, GraphQLResponseBody >, + options: RequestHandlerOptions = {}, ) => { - return new GraphQLHandler(operationType, operationName, url, resolver) + return new GraphQLHandler( + operationType, + operationName, + url, + resolver, + options, + ) } } diff --git a/src/core/handlers/GraphQLHandler.ts b/src/core/handlers/GraphQLHandler.ts index d6dd7c3f7..4a405a842 100644 --- a/src/core/handlers/GraphQLHandler.ts +++ b/src/core/handlers/GraphQLHandler.ts @@ -3,6 +3,7 @@ import { DefaultBodyType, RequestHandler, RequestHandlerDefaultInfo, + RequestHandlerOptions, ResponseResolver, } from './RequestHandler' import { getTimestamp } from '../utils/logging/getTimestamp' @@ -73,6 +74,7 @@ export class GraphQLHandler extends RequestHandler< operationName: GraphQLHandlerNameSelector, endpoint: Path, resolver: ResponseResolver, any, any>, + options?: RequestHandlerOptions, ) { let resolvedOperationName = operationName @@ -106,6 +108,7 @@ export class GraphQLHandler extends RequestHandler< operationName: resolvedOperationName, }, resolver, + options, }) this.endpoint = endpoint diff --git a/src/core/handlers/HttpHandler.ts b/src/core/handlers/HttpHandler.ts index 53e2a97ec..cfb3700f9 100644 --- a/src/core/handlers/HttpHandler.ts +++ b/src/core/handlers/HttpHandler.ts @@ -6,8 +6,8 @@ import { getTimestamp } from '../utils/logging/getTimestamp' import { serializeRequest } from '../utils/logging/serializeRequest' import { serializeResponse } from '../utils/logging/serializeResponse' import { - Match, matchRequestUrl, + Match, Path, PathParams, } from '../utils/matching/matchRequestUrl' @@ -17,7 +17,7 @@ import { cleanUrl, getSearchParams } from '../utils/url/cleanUrl' import { RequestHandler, RequestHandlerDefaultInfo, - RequestHandlerPublicOptions, + RequestHandlerOptions, ResponseResolver, } from './RequestHandler' @@ -65,7 +65,7 @@ export class HttpHandler extends RequestHandler< method: HttpHandlerMethod, path: Path, resolver: ResponseResolver, any, any>, - options?: RequestHandlerPublicOptions, + options?: RequestHandlerOptions, ) { super({ info: { @@ -74,7 +74,7 @@ export class HttpHandler extends RequestHandler< method, }, resolver, - once: options?.once, + options, }) this.checkRedundantQueryParameters() diff --git a/src/core/handlers/RequestHandler.ts b/src/core/handlers/RequestHandler.ts index bf2ce0cd2..f3d6269ca 100644 --- a/src/core/handlers/RequestHandler.ts +++ b/src/core/handlers/RequestHandler.ts @@ -61,13 +61,16 @@ export type ResponseResolver< info: ResponseResolverInfo, ) => AsyncResponseResolverReturnType -export interface RequestHandlerOptions - extends RequestHandlerPublicOptions { +export interface RequestHandlerArgs< + HandlerInfo, + HandlerOptions extends RequestHandlerOptions, +> { info: HandlerInfo resolver: ResponseResolver + options?: HandlerOptions } -export interface RequestHandlerPublicOptions { +export interface RequestHandlerOptions { once?: boolean } @@ -84,6 +87,7 @@ export abstract class RequestHandler< HandlerInfo extends RequestHandlerDefaultInfo = RequestHandlerDefaultInfo, ParsedResult extends Record | undefined = any, ResolverExtras extends Record = any, + HandlerOptions extends RequestHandlerOptions = RequestHandlerOptions, > { public info: HandlerInfo & RequestHandlerInternalInfo /** @@ -99,16 +103,16 @@ export abstract class RequestHandler< MaybeAsyncResponseResolverReturnType > private resolverGeneratorResult?: Response | StrictResponse - private once: boolean + private options?: HandlerOptions - constructor(options: RequestHandlerOptions) { - this.resolver = options.resolver - this.once = options.once || false + constructor(args: RequestHandlerArgs) { + this.resolver = args.resolver + this.options = args.options const callFrame = getCallFrame(new Error()) this.info = { - ...options.info, + ...args.info, callFrame, } @@ -173,7 +177,7 @@ export abstract class RequestHandler< request: StrictRequest, resolutionContext?: ResponseResolutionContext, ): Promise | null> { - if (this.isUsed && this.once) { + if (this.isUsed && this.options?.once) { return null } diff --git a/src/core/http.ts b/src/core/http.ts index 7423ae1c3..f268c3105 100644 --- a/src/core/http.ts +++ b/src/core/http.ts @@ -1,6 +1,6 @@ import { DefaultBodyType, - RequestHandlerPublicOptions, + RequestHandlerOptions, ResponseResolver, } from './handlers/RequestHandler' import { @@ -24,7 +24,7 @@ function createHttpHandler( RequestBodyType, ResponseBodyType >, - options: RequestHandlerPublicOptions = {}, + options: RequestHandlerOptions = {}, ) => { return new HttpHandler(method, path, resolver, options) } From 91989dfaaf708cf084e165d59683185127250d4a Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 16 Sep 2023 15:43:16 +0200 Subject: [PATCH 172/210] feat(worker): move exception handling from the worker (#1734) --- src/mockServiceWorker.js | 15 +------- .../scenarios/errors/network-error.test.ts | 38 +++++-------------- 2 files changed, 10 insertions(+), 43 deletions(-) diff --git a/src/mockServiceWorker.js b/src/mockServiceWorker.js index a0634ad6d..41ee9a29d 100644 --- a/src/mockServiceWorker.js +++ b/src/mockServiceWorker.js @@ -87,7 +87,6 @@ self.addEventListener('message', async function (event) { self.addEventListener('fetch', function (event) { const { request } = event - const accept = request.headers.get('accept') || '' // Bypass navigation requests. if (request.mode === 'navigate') { @@ -109,19 +108,7 @@ self.addEventListener('fetch', function (event) { // Generate unique request ID. const requestId = Math.random().toString(16).slice(2) - - event.respondWith( - handleRequest(event, requestId).catch((error) => { - // At this point, any exception indicates an issue with the original request/response. - console.error( - `\ -[MSW] Caught an exception from the "%s %s" request (%s). This is probably not a problem with Mock Service Worker. There is likely an additional logging output above.`, - request.method, - request.url, - `${error.name}: ${error.message}`, - ) - }), - ) + event.respondWith(handleRequest(event, requestId)) }) async function handleRequest(event, requestId) { diff --git a/test/browser/msw-api/setup-worker/scenarios/errors/network-error.test.ts b/test/browser/msw-api/setup-worker/scenarios/errors/network-error.test.ts index 8e1f43aa6..3d50d5fb7 100644 --- a/test/browser/msw-api/setup-worker/scenarios/errors/network-error.test.ts +++ b/test/browser/msw-api/setup-worker/scenarios/errors/network-error.test.ts @@ -1,23 +1,6 @@ import { until } from '@open-draft/until' -import { HttpServer } from '@open-draft/test-server/http' import { test, expect } from '../../../../playwright.extend' -let server: HttpServer - -test.beforeEach(async ({ createServer }) => { - server = await createServer((app) => { - app.use((_, res, next) => { - // Configure CORS to fail all requests issued from the test. - res.setHeader('Access-Control-Allow-Origin', 'https://mswjs.io') - next() - }) - - app.get('/resource', (req, res) => { - res.send('ok').end() - }) - }) -}) - test('propagates a mocked network error', async ({ loadExample, spyOnConsole, @@ -51,14 +34,11 @@ test('propagates a CORS violation error from a non-matching request', async ({ waitFor, }) => { const consoleSpy = spyOnConsole() - const { workerConsole } = await loadExample( - require.resolve('./network-error.mocks.ts'), - ) + await loadExample(require.resolve('./network-error.mocks.ts')) - const endpointUrl = server.http.url('/resource') - await until(() => page.evaluate((url) => fetch(url), endpointUrl)) + await until(() => page.evaluate(() => fetch('/user'))) - // Expect the default fetch error message. + // Must print the failed fetch error to the console. await waitFor(() => { expect(consoleSpy.get('error')).toEqual( expect.arrayContaining([ @@ -67,10 +47,10 @@ test('propagates a CORS violation error from a non-matching request', async ({ ) }) - // Expect the explanatory error message from the library. - await waitFor(async () => { - expect(workerConsole.messages.get('error')).toEqual([ - `[MSW] Caught an exception from the "GET ${endpointUrl}" request (TypeError: Failed to fetch). This is probably not a problem with Mock Service Worker. There is likely an additional logging output above.`, - ]) - }) + /** + * @todo Ideally, assert the Chromium warning about + * the Service Worker responding to the fetch event + * with a network error response. For some reason, + * it never appears in the console/worker console messages. + */ }) From 1b856775d27deddd604f540af6e9d8308cc0bf06 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sun, 7 Jan 2024 17:40:05 +0100 Subject: [PATCH 173/210] chore: minor adjustments --- src/core/handlers/RemoteRequestHandler.ts | 17 ++++++---- src/node/setupRemoteServer.ts | 39 +++++++++++------------ 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/core/handlers/RemoteRequestHandler.ts b/src/core/handlers/RemoteRequestHandler.ts index afb6bd85d..a5bc257b3 100644 --- a/src/core/handlers/RemoteRequestHandler.ts +++ b/src/core/handlers/RemoteRequestHandler.ts @@ -3,8 +3,8 @@ import { DeferredPromise } from '@open-draft/deferred-promise' import { HttpHandler } from './HttpHandler' import type { SyncServerEventsMap } from '../../node/setupRemoteServer' import { - deserializeResponse, serializeRequest, + deserializeResponse, } from '../utils/request/serializeUtils' export class RemoteRequestHandler extends HttpHandler { @@ -29,7 +29,10 @@ export class RemoteRequestHandler extends HttpHandler { return } - socket.emit('request', await serializeRequest(request), args.requestId) + socket.emit('request', { + requestId: args.requestId, + serializedRequest: await serializeRequest(request), + }) const responsePromise = new DeferredPromise() @@ -38,11 +41,11 @@ export class RemoteRequestHandler extends HttpHandler { * @todo Handle socket errors. */ socket.on('response', (serializedResponse) => { - responsePromise.resolve( - serializedResponse - ? deserializeResponse(serializedResponse) - : undefined, - ) + const response = serializedResponse + ? deserializeResponse(serializedResponse) + : undefined + + responsePromise.resolve(response) }) return await responsePromise diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index 4d52cd1d1..a545bf97e 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -23,6 +23,7 @@ import { deserializeEventPayload, } from '~/core/utils/internal/emitterUtils' +const syncServerSymbol = Symbol('mswSyncServer') const SYNC_SERVER_DEFAULT_PORT = 50222 const SYNC_SERVER_ENV_VARIABLE_NAME = 'MSW_INTERNAL_WEBSOCKET_PORT' const SYNC_SERVER_PORT = @@ -39,16 +40,16 @@ export function setupRemoteServer(...handlers: Array) { } export interface SetupRemoteServer { + events: LifeCycleEventEmitter listen(): Promise close(): Promise - events: LifeCycleEventEmitter } export interface SyncServerEventsMap { - request( - serializedRequest: SerializedRequest, - requestId: string, - ): Promise | void + request(args: { + serializedRequest: SerializedRequest + requestId: string + }): Promise | void response(serializedResponse?: SerializedResponse): Promise | void lifeCycleEventForward( eventName: EventName, @@ -56,9 +57,10 @@ export interface SyncServerEventsMap { ): void } -declare global { - var syncServer: WebSocketServer | undefined +interface GlobalWith extends Global { + [syncServerSymbol]: WebSocketServer | undefined } +declare var globalThis: GlobalWith export class SetupRemoteServerApi extends SetupApi @@ -78,7 +80,7 @@ export class SetupRemoteServerApi .on('SIGINT', () => closeSyncServer(server)) server.on('connection', (socket) => { - socket.on('request', async (serializedRequest, requestId) => { + socket.on('request', async ({ requestId, serializedRequest }) => { const request = deserializeRequest(serializedRequest) const response = await handleRequest( request, @@ -122,7 +124,7 @@ ${`${pragma} ${header}`} } public async close(): Promise { - const { syncServer } = globalThis + const { [syncServerSymbol]: syncServer } = globalThis invariant( syncServer, @@ -141,7 +143,7 @@ ${`${pragma} ${header}`} async function createSyncServer(): Promise< WebSocketServer > { - const existingSyncServer = globalThis.syncServer + const existingSyncServer = globalThis[syncServerSymbol] // Reuse the existing WebSocket server reference if it exists. // It persists on the global scope between hot updates. @@ -161,20 +163,16 @@ async function createSyncServer(): Promise< }, }) - httpServer.listen( - Number.parseInt(SYNC_SERVER_URL.port), - SYNC_SERVER_URL.hostname, - () => { - globalThis.syncServer = ws - serverReadyPromise.resolve(ws) - }, - ) + httpServer.listen(+SYNC_SERVER_URL.port, SYNC_SERVER_URL.hostname, () => { + globalThis[syncServerSymbol] = ws + serverReadyPromise.resolve(ws) + }) httpServer.on('error', (error: Error | NodeJS.ErrnoException) => { if ( 'code' in error && error.code === 'EADDRINUSE' && - Number.parseInt(SYNC_SERVER_URL.port) === SYNC_SERVER_DEFAULT_PORT + +SYNC_SERVER_URL.port === SYNC_SERVER_DEFAULT_PORT ) { devUtils.warn( 'The default internal WebSocket server port (%d) is in use. Please consider freeing the port or specifying a different port using the "%s" environment variable.', @@ -197,7 +195,7 @@ async function closeSyncServer(server: WebSocketServer): Promise { return serverClosePromise.reject(error) } - globalThis.syncServer = undefined + Reflect.deleteProperty(globalThis, syncServerSymbol) serverClosePromise.resolve() }) @@ -225,6 +223,7 @@ export async function createSyncClient(): Promise< extraHeaders: { // Mark all Socket.io requests with an internal header // so they are always bypassed in the remote request handler. + // This has no effect on the user's traffic. 'x-msw-request-type': 'internal-request', }, }) From d9cc36c9d4ddf34b7dcc24f8736e0269a96c366d Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 13 Jan 2024 11:24:21 +0100 Subject: [PATCH 174/210] chore(wip): continue --- src/core/handlers/RemoteRequestHandler.ts | 23 +++++---- src/node/SetupServerApi.ts | 54 +++++++++++++-------- src/node/glossary.ts | 6 ++- src/node/setupRemoteServer.ts | 57 +++++++++++------------ 4 files changed, 78 insertions(+), 62 deletions(-) diff --git a/src/core/handlers/RemoteRequestHandler.ts b/src/core/handlers/RemoteRequestHandler.ts index a5bc257b3..cf090d18b 100644 --- a/src/core/handlers/RemoteRequestHandler.ts +++ b/src/core/handlers/RemoteRequestHandler.ts @@ -10,26 +10,29 @@ import { export class RemoteRequestHandler extends HttpHandler { constructor(args: { requestId: string - socketPromise: Promise | undefined> + socket: Socket }) { super(/.+/, /.+/, async ({ request }) => { + console.log( + '[msw] RemoteRequestHandler', + request.method, + request.url, + new Date(), + ) + // Bypass the socket.io HTTP handshake so the sync WS server connection // doesn't hang forever. Check this as the first thing to unblock the handling. // Keep this predicate as a part of the resolver so that internal requests // aren't considered unhandled. if (request.headers.get('x-msw-request-type') === 'internal-request') { + console.log('[msw] INTERNAL SOCKET REQUEST, IGNORE!') return } - const socket = await args.socketPromise - - // If the sync server hasn't been started or failed to connect, - // skip this request handler altogether, it has no effect. - if (socket == null) { - return - } + console.log('[msw] regular request, continue...') - socket.emit('request', { + console.log('[msw] emitting "request" ws event') + args.socket.emit('request', { requestId: args.requestId, serializedRequest: await serializeRequest(request), }) @@ -40,7 +43,7 @@ export class RemoteRequestHandler extends HttpHandler { * @todo Handle timeouts. * @todo Handle socket errors. */ - socket.on('response', (serializedResponse) => { + args.socket.on('response', (serializedResponse) => { const response = serializedResponse ? deserializeResponse(serializedResponse) : undefined diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index c0e8c373e..76a0349f6 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -12,14 +12,13 @@ import { LifeCycleEventsMap, SharedOptions } from '~/core/sharedOptions' import { RequiredDeep } from '~/core/typeUtils' import { handleRequest } from '~/core/utils/handleRequest' import { devUtils } from '~/core/utils/internal/devUtils' -import { SetupServer } from './glossary' +import { ListenOptions, SetupServer } from './glossary' import { SyncServerEventsMap, createSyncClient } from './setupRemoteServer' import { onAnyEvent, serializeEventPayload, } from '~/core/utils/internal/emitterUtils' import { RemoteRequestHandler } from '~/core/handlers/RemoteRequestHandler' -import { isNodeExceptionLike } from './utils/isNodeExceptionLike' import { mergeRight } from '~/core/utils/internal/mergeRight' const DEFAULT_LISTEN_OPTIONS: RequiredDeep = { @@ -38,8 +37,8 @@ export class SetupServerApi Array>, HttpRequestEventMap > - private resolvedOptions: RequiredDeep - private syncSocketPromise: Promise | undefined> + private resolvedOptions: RequiredDeep + private socket: Socket | undefined constructor( interceptors: InterceptorsList, @@ -51,9 +50,7 @@ export class SetupServerApi name: 'setup-server', interceptors: interceptors.map((Interceptor) => new Interceptor()), }) - this.resolvedOptions = {} as RequiredDeep - - this.syncSocketPromise = Promise.resolve(undefined) + this.resolvedOptions = {} as RequiredDeep this.init() } @@ -63,16 +60,35 @@ export class SetupServerApi */ private init(): void { this.interceptor.on('request', async ({ request, requestId }) => { + // If in remote mode, await the WebSocket connection promise + // before handling any requests. + if (this.resolvedOptions.remotePort) { + /** + * @fixme This will never resolve. + * Playwright runs the app first (this part) and THEN it runs + * the tests (setupRemoteServer part). This causes the "/" + * request to pend forever on this line since the app has to + * load successfully before the tests run. + */ + if (typeof this.socket === 'undefined') { + this.socket = await createSyncClient(this.resolvedOptions.remotePort) + } + + if (typeof this.socket !== 'undefined') { + this.currentHandlers = [ + new RemoteRequestHandler({ + requestId, + socket: this.socket, + }), + ...this.currentHandlers, + ] + } + } + const response = await handleRequest( request, requestId, - [ - new RemoteRequestHandler({ - requestId, - socketPromise: this.syncSocketPromise, - }), - ...this.currentHandlers, - ], + this.currentHandlers, this.resolvedOptions, this.emitter, ) @@ -99,20 +115,18 @@ export class SetupServerApi ) } - public listen(options: Partial = {}): void { + public listen(options: Partial = {}): void { this.resolvedOptions = mergeRight( DEFAULT_LISTEN_OPTIONS, options, - ) as RequiredDeep - - this.syncSocketPromise = createSyncClient() + ) as RequiredDeep // Once the connection to the remote WebSocket server succeeds, // pipe any life-cycle events from this process through that socket. onAnyEvent(this.emitter, async (eventName, listenerArgs) => { - const socket = await this.syncSocketPromise + const { socket } = this - if (!socket) { + if (typeof socket === 'undefined') { return } diff --git a/src/node/glossary.ts b/src/node/glossary.ts index 0edda3ce8..7a2b91aec 100644 --- a/src/node/glossary.ts +++ b/src/node/glossary.ts @@ -9,13 +9,17 @@ import { SharedOptions, } from '~/core/sharedOptions' +export interface ListenOptions extends SharedOptions { + remotePort?: number +} + export interface SetupServer { /** * Starts requests interception based on the previously provided request handlers. * * @see {@link https://mswjs.io/docs/api/setup-server/listen `server.listen()` API reference} */ - listen(options?: PartialDeep): void + listen(options?: PartialDeep): void /** * Stops requests interception by restoring all augmented modules. diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index a545bf97e..8f8545c92 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -24,13 +24,6 @@ import { } from '~/core/utils/internal/emitterUtils' const syncServerSymbol = Symbol('mswSyncServer') -const SYNC_SERVER_DEFAULT_PORT = 50222 -const SYNC_SERVER_ENV_VARIABLE_NAME = 'MSW_INTERNAL_WEBSOCKET_PORT' -const SYNC_SERVER_PORT = - Number.parseInt(process.env[SYNC_SERVER_ENV_VARIABLE_NAME] || '') || - SYNC_SERVER_DEFAULT_PORT - -export const SYNC_SERVER_URL = new URL(`http://localhost:${SYNC_SERVER_PORT}`) /** * Enables API mocking in a remote Node.js process. @@ -39,9 +32,13 @@ export function setupRemoteServer(...handlers: Array) { return new SetupRemoteServerApi(...handlers) } +export interface SetupRemoteServerListenOptions { + port: number +} + export interface SetupRemoteServer { events: LifeCycleEventEmitter - listen(): Promise + listen(options: SetupRemoteServerListenOptions): Promise close(): Promise } @@ -70,11 +67,16 @@ export class SetupRemoteServerApi super(...handlers) } - public async listen(): Promise { + public async listen(options: SetupRemoteServerListenOptions): Promise { const placeholderEmitter = new Emitter() - const server = await createSyncServer() + + const url = createWebSocketServerUrl(options.port) + const server = await createSyncServer(url) + server.removeAllListeners() + console.log('WS server created!') + process .on('SIGTERM', () => closeSyncServer(server)) .on('SIGINT', () => closeSyncServer(server)) @@ -140,9 +142,9 @@ ${`${pragma} ${header}`} /** * Creates an internal WebSocket sync server. */ -async function createSyncServer(): Promise< - WebSocketServer -> { +async function createSyncServer( + url: URL, +): Promise> { const existingSyncServer = globalThis[syncServerSymbol] // Reuse the existing WebSocket server reference if it exists. @@ -163,24 +165,12 @@ async function createSyncServer(): Promise< }, }) - httpServer.listen(+SYNC_SERVER_URL.port, SYNC_SERVER_URL.hostname, () => { + httpServer.listen(+url.port, url.hostname, () => { globalThis[syncServerSymbol] = ws serverReadyPromise.resolve(ws) }) httpServer.on('error', (error: Error | NodeJS.ErrnoException) => { - if ( - 'code' in error && - error.code === 'EADDRINUSE' && - +SYNC_SERVER_URL.port === SYNC_SERVER_DEFAULT_PORT - ) { - devUtils.warn( - 'The default internal WebSocket server port (%d) is in use. Please consider freeing the port or specifying a different port using the "%s" environment variable.', - SYNC_SERVER_DEFAULT_PORT, - SYNC_SERVER_ENV_VARIABLE_NAME, - ) - } - serverReadyPromise.reject(error) }) @@ -202,18 +192,22 @@ async function closeSyncServer(server: WebSocketServer): Promise { return serverClosePromise } +function createWebSocketServerUrl(port: number): URL { + const url = new URL('http://localhost') + url.port = port.toString() + return url +} + /** * Creates a WebSocket client connected to the internal * WebSocket sync server of MSW. */ -export async function createSyncClient(): Promise< - Socket | undefined -> { +export async function createSyncClient(port: number) { const connectionPromise = new DeferredPromise< Socket | undefined >() - - const socket = io(SYNC_SERVER_URL.href, { + const url = createWebSocketServerUrl(port) + const socket = io(url.href, { // Keep a low timeout and no reconnection logic because // the user is expected to enable remote interception // before the actual application with "setupServer" uses @@ -229,6 +223,7 @@ export async function createSyncClient(): Promise< }) socket.on('connect', () => { + console.log('[msw] setupRemoteServer, CONNECTION!') connectionPromise.resolve(socket) }) From d23dd25c89ef548a82e0ea69a5168cbfb56694b4 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 20 Feb 2024 15:56:41 +0100 Subject: [PATCH 175/210] fix(wip): fix broken "use()" runtime handlers --- src/core/SetupApi.ts | 9 +-- src/core/handlers/RemoteRequestHandler.ts | 4 +- src/node/SetupServerApi.ts | 80 ++++++++----------- src/node/SetupServerCommonApi.ts | 10 ++- src/node/setupRemoteServer.ts | 36 +++------ .../msw-api/setup-remote-server/use.app.js | 4 +- 6 files changed, 62 insertions(+), 81 deletions(-) diff --git a/src/core/SetupApi.ts b/src/core/SetupApi.ts index dbe2c8cbc..e743500bb 100644 --- a/src/core/SetupApi.ts +++ b/src/core/SetupApi.ts @@ -1,9 +1,6 @@ import { invariant } from 'outvariant' import { EventMap, Emitter } from 'strict-event-emitter' -import { - RequestHandler, - RequestHandlerDefaultInfo, -} from './handlers/RequestHandler' +import { RequestHandler } from './handlers/RequestHandler' import { LifeCycleEventEmitter } from './sharedOptions' import { devUtils } from './utils/internal/devUtils' import { pipeEvents } from './utils/internal/pipeEvents' @@ -97,9 +94,7 @@ export abstract class SetupApi extends Disposable { this.handlersController.reset(nextHandlers) } - public listHandlers(): ReadonlyArray< - RequestHandler - > { + public listHandlers(): ReadonlyArray { return toReadonlyArray(this.handlersController.currentHandlers()) } diff --git a/src/core/handlers/RemoteRequestHandler.ts b/src/core/handlers/RemoteRequestHandler.ts index 94ad7cb16..5e596a165 100644 --- a/src/core/handlers/RemoteRequestHandler.ts +++ b/src/core/handlers/RemoteRequestHandler.ts @@ -6,6 +6,7 @@ import { serializeRequest, deserializeResponse, } from '../utils/request/serializeUtils' +import { passthrough } from '../passthrough' export class RemoteRequestHandler extends HttpHandler { constructor(args: { socket: Socket }) { @@ -25,12 +26,13 @@ export class RemoteRequestHandler extends HttpHandler { // aren't considered unhandled. if (request.headers.get('x-msw-request-type') === 'internal-request') { console.log('[msw] INTERNAL SOCKET REQUEST, IGNORE!') - return + return passthrough() } console.log('[msw] regular request, continue...') console.log('[msw] emitting "request" ws event') + socket.emit('request', { requestId, serializedRequest: await serializeRequest(request), diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 351db0072..e734ad4ad 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -4,7 +4,7 @@ import { XMLHttpRequestInterceptor } from '@mswjs/interceptors/XMLHttpRequest' import { FetchInterceptor } from '@mswjs/interceptors/fetch' import { HandlersController } from '~/core/SetupApi' import type { RequestHandler } from '~/core/handlers/RequestHandler' -import type { SetupServer } from './glossary' +import type { ListenOptions, SetupServer } from './glossary' import { SetupServerCommonApi } from './SetupServerCommonApi' import { Socket } from 'socket.io-client' import { SyncServerEventsMap, createSyncClient } from './setupRemoteServer' @@ -67,7 +67,6 @@ export class SetupServerApi ) this.handlersController = new AsyncHandlersController(handlers) - this.initRemoteServer() } public boundary) => unknown>( @@ -90,59 +89,48 @@ export class SetupServerApi store.disable() } - private async initRemoteServer() { - const { remotePort } = this.resolvedOptions + public listen(options?: Partial): void { + super.listen(options) - if (remotePort == null) { - return - } + if (this.resolvedOptions.remotePort != null) { + this.mapRequestHandlers = async (handlers) => { + const { socket } = this - const { socket } = this + if (typeof socket === 'undefined') { + this.socket = await createSyncClient(this.resolvedOptions.remotePort) + } - if (typeof socket === 'undefined') { - this.socket = await createSyncClient(remotePort) - } else { - this.handlersController.currentHandlers = new Proxy( - this.handlersController.currentHandlers, - { - get: (target, property, value) => { - const handlers = Reflect.get( - target, - property, - value, - ) as Array - - return Array.prototype.concat( - new RemoteRequestHandler({ - socket, - }), - handlers, - ) - }, - }, - ) + if (typeof socket !== 'undefined') { + return Array.prototype.concat( + new RemoteRequestHandler({ socket }), + handlers, + ) + } + + return handlers + } } + this.forwardLifeCycleEvents() + } + private async forwardLifeCycleEvents() { onAnyEvent(this.emitter, async (eventName, listenerArgs) => { const { socket } = this const { request } = listenerArgs - if (socket) { - const forwardLifeCycleEvent = async () => { - const args = await serializeEventPayload(listenerArgs) - socket.emit( - 'lifeCycleEventForward', - /** - * @todo Annotating serialized/desirialized mirror channels is tough. - */ - eventName, - args as any, - ) - } - - if (request.headers.get('x-msw-request-type') !== 'internal-request') { - forwardLifeCycleEvent() - } + if ( + socket && + request.headers.get('x-msw-request-type') !== 'internal-request' + ) { + const args = await serializeEventPayload(listenerArgs) + socket.emit( + 'lifeCycleEventForward', + /** + * @todo Annotating serialized/desirialized mirror channels is tough. + */ + eventName, + args as any, + ) } }) } diff --git a/src/node/SetupServerCommonApi.ts b/src/node/SetupServerCommonApi.ts index f8b863b47..2946769d3 100644 --- a/src/node/SetupServerCommonApi.ts +++ b/src/node/SetupServerCommonApi.ts @@ -48,6 +48,12 @@ export class SetupServerCommonApi this.init() } + protected async mapRequestHandlers( + handlers: Array, + ): Promise> { + return handlers + } + /** * Subscribe to all requests that are using the interceptor object */ @@ -56,7 +62,9 @@ export class SetupServerCommonApi const response = await handleRequest( request, requestId, - this.handlersController.currentHandlers(), + await this.mapRequestHandlers( + this.handlersController.currentHandlers(), + ), this.resolvedOptions, this.emitter, ) diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index 4f6100b27..b0d790062 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -4,19 +4,16 @@ import { Server as WebSocketServer } from 'socket.io' import { Socket, io } from 'socket.io-client' import { Emitter } from 'strict-event-emitter' import { DeferredPromise } from '@open-draft/deferred-promise' -import { - LifeCycleEventsMap, - RequestHandler, - SetupApi, - handleRequest, -} from '~/core' +import { SetupApi } from '~/core/SetupApi' +import { RequestHandler } from '~/core/handlers/RequestHandler' +import { handleRequest } from '~/core/utils/handleRequest' import { SerializedRequest, SerializedResponse, deserializeRequest, serializeResponse, } from '~/core/utils/request/serializeUtils' -import { LifeCycleEventEmitter } from '~/core/sharedOptions' +import { LifeCycleEventEmitter, LifeCycleEventsMap } from '~/core/sharedOptions' import { devUtils } from '~/core/utils/internal/devUtils' import { SerializedLifeCycleEventsMap, @@ -28,7 +25,9 @@ const kSyncServer = Symbol('kSyncServer') /** * Enables API mocking in a remote Node.js process. */ -export function setupRemoteServer(...handlers: Array) { +export function setupRemoteServer( + ...handlers: Array +): SetupRemoteServerApi { return new SetupRemoteServerApi(...handlers) } @@ -82,6 +81,8 @@ export class SetupRemoteServerApi .on('SIGINT', () => closeSyncServer(server)) server.on('connection', (socket) => { + console.log('[remote] connection!') + socket.on('request', async ({ requestId, serializedRequest }) => { const request = deserializeRequest(serializedRequest) const response = await handleRequest( @@ -108,23 +109,6 @@ export class SetupRemoteServerApi }) } - public printHandlers() { - const handlers = this.listHandlers() - - handlers.forEach((handler) => { - const { header, callFrame } = handler.info - - const pragma = handler.info.hasOwnProperty('operationType') - ? '[graphql]' - : '[rest]' - - console.log(`\ -${`${pragma} ${header}`} - Declaration: ${callFrame} -`) - }) - } - public async close(): Promise { const { [kSyncServer]: syncServer } = globalThis @@ -165,6 +149,8 @@ async function createSyncServer( }, }) + console.log('Creating a WS server...') + httpServer.listen(+url.port, url.hostname, () => { globalThis[kSyncServer] = ws serverReadyPromise.resolve(ws) diff --git a/test/node/msw-api/setup-remote-server/use.app.js b/test/node/msw-api/setup-remote-server/use.app.js index b8e38fa7b..47e4b2b88 100644 --- a/test/node/msw-api/setup-remote-server/use.app.js +++ b/test/node/msw-api/setup-remote-server/use.app.js @@ -9,7 +9,9 @@ const server = setupServer( }), ) -server.listen() +server.listen({ + remotePort: 56789, +}) // Spawn a Node.js application. const app = express() From 81969e32d030e358d3568cdca5839606880e9d95 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 5 Sep 2024 12:38:42 +0200 Subject: [PATCH 176/210] fix: client sync server handshake --- src/core/bypass.ts | 9 +- src/core/handlers/RemoteRequestHandler.ts | 23 +--- src/core/passthrough.test.ts | 6 +- src/core/passthrough.ts | 6 +- src/core/utils/handleRequest.ts | 13 +- src/core/utils/internal/emitterUtils.ts | 8 +- src/core/utils/internal/requestUtils.ts | 21 +++ src/node/SetupServerApi.ts | 69 ++++++---- src/node/SetupServerCommonApi.ts | 24 ++-- src/node/setupRemoteServer.ts | 127 ++++++++++-------- .../life-cycle-events/on.node.test.ts | 33 +++-- .../msw-api/setup-remote-server/use.app.js | 1 - .../setup-remote-server/use.node.test.ts | 4 +- .../node/msw-api/setup-remote-server/utils.ts | 2 +- 14 files changed, 189 insertions(+), 157 deletions(-) create mode 100644 src/core/utils/internal/requestUtils.ts diff --git a/src/core/bypass.ts b/src/core/bypass.ts index 26d3afb2f..9c7b3741c 100644 --- a/src/core/bypass.ts +++ b/src/core/bypass.ts @@ -1,4 +1,8 @@ import { invariant } from 'outvariant' +import { + REQUEST_INTENTION_HEADER_NAME, + RequestIntention, +} from './utils/internal/requestUtils' export type BypassRequestInput = string | URL | Request @@ -38,7 +42,10 @@ export function bypass(input: BypassRequestInput, init?: RequestInit): Request { // to bypass this request from any further request matching. // Unlike "passthrough()", bypass is meant for performing // additional requests within pending request resolution. - requestClone.headers.set('x-msw-intention', 'bypass') + requestClone.headers.set( + REQUEST_INTENTION_HEADER_NAME, + RequestIntention.bypass, + ) return requestClone } diff --git a/src/core/handlers/RemoteRequestHandler.ts b/src/core/handlers/RemoteRequestHandler.ts index 5e596a165..af92a0e69 100644 --- a/src/core/handlers/RemoteRequestHandler.ts +++ b/src/core/handlers/RemoteRequestHandler.ts @@ -6,33 +6,12 @@ import { serializeRequest, deserializeResponse, } from '../utils/request/serializeUtils' -import { passthrough } from '../passthrough' export class RemoteRequestHandler extends HttpHandler { constructor(args: { socket: Socket }) { const { socket } = args super(/.+/, /.+/, async ({ request, requestId }) => { - console.log( - '[msw] RemoteRequestHandler', - request.method, - request.url, - new Date(), - ) - - // Bypass the socket.io HTTP handshake so the sync WS server connection - // doesn't hang forever. Check this as the first thing to unblock the handling. - // Keep this predicate as a part of the resolver so that internal requests - // aren't considered unhandled. - if (request.headers.get('x-msw-request-type') === 'internal-request') { - console.log('[msw] INTERNAL SOCKET REQUEST, IGNORE!') - return passthrough() - } - - console.log('[msw] regular request, continue...') - - console.log('[msw] emitting "request" ws event') - socket.emit('request', { requestId, serializedRequest: await serializeRequest(request), @@ -44,7 +23,7 @@ export class RemoteRequestHandler extends HttpHandler { * @todo Handle timeouts. * @todo Handle socket errors. */ - socket.on('response', (serializedResponse) => { + socket.on('response', ({ serializedResponse }) => { const response = serializedResponse ? deserializeResponse(serializedResponse) : undefined diff --git a/src/core/passthrough.test.ts b/src/core/passthrough.test.ts index 06a727bd3..51df077cd 100644 --- a/src/core/passthrough.test.ts +++ b/src/core/passthrough.test.ts @@ -1,9 +1,7 @@ -/** - * @vitest-environment node - */ +// @vitest-environment node import { passthrough } from './passthrough' -it('creates a 302 response with the intention header', () => { +it('creates a 302 response with the correct request intention header', () => { const response = passthrough() expect(response).toBeInstanceOf(Response) diff --git a/src/core/passthrough.ts b/src/core/passthrough.ts index 2dbe84f67..a0701998f 100644 --- a/src/core/passthrough.ts +++ b/src/core/passthrough.ts @@ -1,4 +1,8 @@ import type { StrictResponse } from './HttpResponse' +import { + REQUEST_INTENTION_HEADER_NAME, + RequestIntention, +} from './utils/internal/requestUtils' /** * Performs the intercepted request as-is. @@ -19,7 +23,7 @@ export function passthrough(): StrictResponse { status: 302, statusText: 'Passthrough', headers: { - 'x-msw-intention': 'passthrough', + [REQUEST_INTENTION_HEADER_NAME]: RequestIntention.passthrough, }, }) as StrictResponse } diff --git a/src/core/utils/handleRequest.ts b/src/core/utils/handleRequest.ts index 766b22ce6..b00ad8fba 100644 --- a/src/core/utils/handleRequest.ts +++ b/src/core/utils/handleRequest.ts @@ -6,6 +6,10 @@ import { RequiredDeep } from '../typeUtils' import { HandlersExecutionResult, executeHandlers } from './executeHandlers' import { onUnhandledRequest } from './request/onUnhandledRequest' import { storeResponseCookies } from './request/storeResponseCookies' +import { + shouldBypassRequest, + shouldPassthroughRequest, +} from './internal/requestUtils' export interface HandleRequestOptions { /** @@ -53,7 +57,7 @@ export async function handleRequest( emitter.emit('request:start', { request, requestId }) // Perform bypassed requests (i.e. wrapped in "bypass()") as-is. - if (request.headers.get('x-msw-intention') === 'bypass') { + if (shouldBypassRequest(request)) { emitter.emit('request:end', { request, requestId }) handleRequestOptions?.onPassthroughResponse?.(request) return @@ -99,12 +103,9 @@ export async function handleRequest( return } - // Perform the request as-is when the developer explicitly returned "req.passthrough()". + // Perform the request as-is when the developer explicitly returned `passthrough()`. // This produces no warning as the request was handled. - if ( - response.status === 302 && - response.headers.get('x-msw-intention') === 'passthrough' - ) { + if (shouldPassthroughRequest(response)) { emitter.emit('request:end', { request, requestId }) handleRequestOptions?.onPassthroughResponse?.(request) return diff --git a/src/core/utils/internal/emitterUtils.ts b/src/core/utils/internal/emitterUtils.ts index 5fca382f6..14cfa03fc 100644 --- a/src/core/utils/internal/emitterUtils.ts +++ b/src/core/utils/internal/emitterUtils.ts @@ -17,13 +17,13 @@ export type SerializedLifeCycleEventListenerArgs< [Key in keyof Args]: Args[Key] extends Request ? SerializedRequest : Args[Key] extends Response - ? SerializedResponse - : Args[Key] + ? SerializedResponse + : Args[Key] } export type SerializedLifeCycleEventsMap = { - [EventName in keyof LifeCycleEventsMap]: [ - SerializedLifeCycleEventListenerArgs, + [Type in keyof LifeCycleEventsMap]: [ + SerializedLifeCycleEventListenerArgs, ] } diff --git a/src/core/utils/internal/requestUtils.ts b/src/core/utils/internal/requestUtils.ts new file mode 100644 index 000000000..cc093c524 --- /dev/null +++ b/src/core/utils/internal/requestUtils.ts @@ -0,0 +1,21 @@ +export const REQUEST_INTENTION_HEADER_NAME = 'x-msw-intention' + +export enum RequestIntention { + bypass = 'bypass', + passthrough = 'passthrough', +} + +export function shouldBypassRequest(request: Request): boolean { + return ( + request.headers.get(REQUEST_INTENTION_HEADER_NAME) === + RequestIntention.bypass + ) +} + +export function shouldPassthroughRequest(response: Response): boolean { + return ( + response.status === 302 && + response.headers.get(REQUEST_INTENTION_HEADER_NAME) === + RequestIntention.passthrough + ) +} diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index b4b1f6e80..bc9f264ea 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -1,4 +1,5 @@ import { AsyncLocalStorage } from 'node:async_hooks' +import { invariant } from 'outvariant' import { ClientRequestInterceptor } from '@mswjs/interceptors/ClientRequest' import { XMLHttpRequestInterceptor } from '@mswjs/interceptors/XMLHttpRequest' import { FetchInterceptor } from '@mswjs/interceptors/fetch' @@ -13,6 +14,7 @@ import { onAnyEvent, serializeEventPayload, } from '~/core/utils/internal/emitterUtils' +import { shouldBypassRequest } from '~/core/utils/internal/requestUtils' const store = new AsyncLocalStorage() @@ -58,7 +60,7 @@ export class SetupServerApi extends SetupServerCommonApi implements SetupServer { - private socket?: Socket + private socketPromise?: Promise> constructor(handlers: Array) { super( @@ -92,44 +94,61 @@ export class SetupServerApi public listen(options?: Partial): void { super.listen(options) + // If the "remotePort" option has been provided to the server, + // run it in a special "remote" mode. That mode ensures that + // an extraneous Node.js process can affect this process' traffic. if (this.resolvedOptions.remotePort != null) { - this.mapRequestHandlers = async (handlers) => { - const { socket } = this + invariant( + typeof this.resolvedOptions.remotePort === 'number', + 'Failed to enable request interception: expected the "remotePort" option to be a valid port number, but got "%s". Make sure it is the same port number you provide as the "port" option to "remote.listen()" in your tests.', + this.resolvedOptions.remotePort, + ) - if (typeof socket === 'undefined') { - this.socket = await createSyncClient(this.resolvedOptions.remotePort) - } + // Create the WebSocket sync client immediately when starting the interception. + this.socketPromise = createSyncClient(this.resolvedOptions.remotePort) + + // Once the sync server connection is established, prepend the + // remote request handler to be the first for this process. + // This way, the remote process' handlers take priority. + this.socketPromise.then((socket) => { + this.handlersController.currentHandlers = new Proxy( + this.handlersController.currentHandlers, + { + apply: (target, thisArg, args) => { + return Array.prototype.concat( + new RemoteRequestHandler({ socket }), + Reflect.apply(target, thisArg, args), + ) + }, + }, + ) - if (typeof socket !== 'undefined') { - return Array.prototype.concat( - new RemoteRequestHandler({ socket }), - handlers, - ) - } + return socket + }) - return handlers + // Before the first request gets handled, await the sync server connection. + // This way we ensure that all the requests go through the `RemoteRequestHandler`. + this.beforeRequest = async () => { + await this.socketPromise } + + // Forward all life-cycle events from this process to the remote. + this.forwardLifeCycleEvents() } - this.forwardLifeCycleEvents() } - private async forwardLifeCycleEvents() { - onAnyEvent(this.emitter, async (eventName, listenerArgs) => { - const { socket } = this - const { request } = listenerArgs + private forwardLifeCycleEvents() { + onAnyEvent(this.emitter, async (type, listenerArgs) => { + const socket = await this.socketPromise - if ( - socket && - request.headers.get('x-msw-request-type') !== 'internal-request' - ) { - const args = await serializeEventPayload(listenerArgs) + if (socket && !shouldBypassRequest(listenerArgs.request)) { socket.emit( 'lifeCycleEventForward', /** * @todo Annotating serialized/desirialized mirror channels is tough. */ - eventName, - args as any, + type, + (await serializeEventPayload(listenerArgs)) as any, ) } }) diff --git a/src/node/SetupServerCommonApi.ts b/src/node/SetupServerCommonApi.ts index d796e918c..c2f30bddd 100644 --- a/src/node/SetupServerCommonApi.ts +++ b/src/node/SetupServerCommonApi.ts @@ -42,29 +42,31 @@ export class SetupServerCommonApi name: 'setup-server', interceptors: interceptors.map((Interceptor) => new Interceptor()), }) - this.resolvedOptions = {} as RequiredDeep - this.init() } - protected async mapRequestHandlers( - handlers: Array, - ): Promise> { - return handlers + protected async beforeRequest( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + args: { + requestId: string + request: Request + }, + ): Promise { + return Promise.resolve() } /** * Subscribe to all requests that are using the interceptor object */ private init(): void { - this.interceptor.on('request', async ({ request, requestId }) => { + this.interceptor.on('request', async ({ requestId, request }) => { + await this.beforeRequest({ requestId, request }) + const response = await handleRequest( request, requestId, - await this.mapRequestHandlers( - this.handlersController.currentHandlers(), - ), + this.handlersController.currentHandlers(), this.resolvedOptions, this.emitter, ) @@ -72,8 +74,6 @@ export class SetupServerCommonApi if (response) { request.respondWith(response) } - - return }) this.interceptor.on('unhandledException', ({ error }) => { diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index b0d790062..39ae8dce5 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -1,26 +1,34 @@ -import * as http from 'http' +import * as http from 'node:http' import { invariant } from 'outvariant' import { Server as WebSocketServer } from 'socket.io' import { Socket, io } from 'socket.io-client' import { Emitter } from 'strict-event-emitter' import { DeferredPromise } from '@open-draft/deferred-promise' import { SetupApi } from '~/core/SetupApi' -import { RequestHandler } from '~/core/handlers/RequestHandler' +import type { RequestHandler } from '~/core/handlers/RequestHandler' import { handleRequest } from '~/core/utils/handleRequest' import { - SerializedRequest, - SerializedResponse, + type SerializedRequest, + type SerializedResponse, deserializeRequest, serializeResponse, } from '~/core/utils/request/serializeUtils' -import { LifeCycleEventEmitter, LifeCycleEventsMap } from '~/core/sharedOptions' +import type { + LifeCycleEventEmitter, + LifeCycleEventsMap, +} from '~/core/sharedOptions' import { devUtils } from '~/core/utils/internal/devUtils' import { - SerializedLifeCycleEventsMap, + type SerializedLifeCycleEventsMap, deserializeEventPayload, } from '~/core/utils/internal/emitterUtils' +import { + REQUEST_INTENTION_HEADER_NAME, + RequestIntention, +} from '~/core/utils/internal/requestUtils' const kSyncServer = Symbol('kSyncServer') +type SyncServerType = WebSocketServer | undefined /** * Enables API mocking in a remote Node.js process. @@ -37,26 +45,25 @@ export interface SetupRemoteServerListenOptions { export interface SetupRemoteServer { events: LifeCycleEventEmitter - listen(options: SetupRemoteServerListenOptions): Promise - close(): Promise + listen: (options: SetupRemoteServerListenOptions) => Promise + close: () => Promise } export interface SyncServerEventsMap { - request(args: { + request: (args: { serializedRequest: SerializedRequest requestId: string - }): Promise | void - response(serializedResponse?: SerializedResponse): Promise | void - lifeCycleEventForward( - eventName: EventName, - args: SerializedLifeCycleEventsMap[EventName], - ): void -} + }) => Promise | void + + response: (args: { + serializedResponse?: SerializedResponse + }) => Promise | void -interface GlobalWith extends Global { - [kSyncServer]: WebSocketServer | undefined + lifeCycleEventForward: ( + type: Type, + args: SerializedLifeCycleEventsMap[Type], + ) => void } -declare var globalThis: GlobalWith export class SetupRemoteServerApi extends SetupApi @@ -67,22 +74,23 @@ export class SetupRemoteServerApi } public async listen(options: SetupRemoteServerListenOptions): Promise { - const dummyEmitter = new Emitter() + invariant( + typeof options.port === 'number', + 'Failed to initialize remote server: expected the "port" option to be a valid port number but got "%s". Make sure it is the same port number you provide as the "remotePort" option to "server.listen()" in your application.', + options.port, + ) - const url = createWebSocketServerUrl(options.port) - const server = await createSyncServer(url) + const dummyEmitter = new Emitter() + const wssUrl = createWebSocketServerUrl(options.port) + const server = await createSyncServer(wssUrl) server.removeAllListeners() - console.log('WS server created!') - process - .on('SIGTERM', () => closeSyncServer(server)) - .on('SIGINT', () => closeSyncServer(server)) + .once('SIGTERM', () => closeSyncServer(server)) + .once('SIGINT', () => closeSyncServer(server)) server.on('connection', (socket) => { - console.log('[remote] connection!') - socket.on('request', async ({ requestId, serializedRequest }) => { const request = deserializeRequest(serializedRequest) const response = await handleRequest( @@ -96,21 +104,22 @@ export class SetupRemoteServerApi dummyEmitter, ) - socket.emit( - 'response', - response ? await serializeResponse(response) : undefined, - ) + socket.emit('response', { + serializedResponse: response + ? await serializeResponse(response) + : undefined, + }) }) - socket.on('lifeCycleEventForward', async (eventName, args) => { + socket.on('lifeCycleEventForward', async (type, args) => { const deserializedArgs = await deserializeEventPayload(args) - this.emitter.emit(eventName, deserializedArgs as any) + this.emitter.emit(type, deserializedArgs as any) }) }) } public async close(): Promise { - const { [kSyncServer]: syncServer } = globalThis + const syncServer = Reflect.get(globalThis, kSyncServer) as SyncServerType invariant( syncServer, @@ -129,12 +138,12 @@ export class SetupRemoteServerApi async function createSyncServer( url: URL, ): Promise> { - const existingSyncServer = globalThis[kSyncServer] + const syncServer = Reflect.get(globalThis, kSyncServer) as SyncServerType // Reuse the existing WebSocket server reference if it exists. // It persists on the global scope between hot updates. - if (existingSyncServer) { - return existingSyncServer + if (syncServer) { + return syncServer } const serverReadyPromise = new DeferredPromise< @@ -143,24 +152,27 @@ async function createSyncServer( const httpServer = http.createServer() const ws = new WebSocketServer(httpServer, { + transports: ['websocket'], cors: { origin: '*', methods: ['HEAD', 'GET', 'POST'], }, }) - console.log('Creating a WS server...') - httpServer.listen(+url.port, url.hostname, () => { - globalThis[kSyncServer] = ws serverReadyPromise.resolve(ws) }) - httpServer.on('error', (error: Error | NodeJS.ErrnoException) => { + httpServer.on('error', (error) => { serverReadyPromise.reject(error) }) - return serverReadyPromise + return serverReadyPromise.then((ws) => { + Object.defineProperty(globalThis, kSyncServer, { + value: ws, + }) + return ws + }) } async function closeSyncServer(server: WebSocketServer): Promise { @@ -170,12 +182,12 @@ async function closeSyncServer(server: WebSocketServer): Promise { if (error) { return serverClosePromise.reject(error) } - - Reflect.deleteProperty(globalThis, kSyncServer) serverClosePromise.resolve() }) - return serverClosePromise + return serverClosePromise.then(() => { + Reflect.deleteProperty(globalThis, kSyncServer) + }) } function createWebSocketServerUrl(port: number): URL { @@ -189,32 +201,29 @@ function createWebSocketServerUrl(port: number): URL { * WebSocket sync server of MSW. */ export async function createSyncClient(port: number) { - const connectionPromise = new DeferredPromise< - Socket | undefined - >() + const connectionPromise = new DeferredPromise>() const url = createWebSocketServerUrl(port) const socket = io(url.href, { - // Keep a low timeout and no reconnection logic because + transports: ['websocket'], + // Keep a low timeout and no retry logic because // the user is expected to enable remote interception - // before the actual application with "setupServer" uses - // this function to try and connect to a potentially running server. + // before the actual application with "setupServer". timeout: 200, reconnection: false, extraHeaders: { - // Mark all Socket.io requests with an internal header - // so they are always bypassed in the remote request handler. - // This has no effect on the user's traffic. - 'x-msw-request-type': 'internal-request', + // Bypass the internal WebSocket connection requests + // to exclude them from the request lookup altogether. + // This prevents MSW from treating these requests as unhandled. + [REQUEST_INTENTION_HEADER_NAME]: RequestIntention.bypass, }, }) socket.on('connect', () => { - console.log('[msw] setupRemoteServer, CONNECTION!') connectionPromise.resolve(socket) }) - socket.io.on('error', () => { - connectionPromise.resolve(undefined) + socket.io.once('error', (error) => { + connectionPromise.reject(error) }) return connectionPromise diff --git a/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts b/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts index e90f5b084..ea16d7a05 100644 --- a/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts +++ b/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts @@ -1,11 +1,8 @@ -/** - * @jest-environment node - */ -import { rest, HttpResponse, SetupApi, LifeCycleEventsMap } from 'msw' +// @vitest-environment node +import { http, HttpResponse, SetupApi, LifeCycleEventsMap } from 'msw' import { setupRemoteServer } from 'msw/node' import { DeferredPromise } from '@open-draft/deferred-promise' import { HttpServer } from '@open-draft/test-server/http' -import { waitFor } from '../../../../support/waitFor' import { TestNodeApp } from '../utils' const remote = setupRemoteServer() @@ -18,35 +15,35 @@ const httpServer = new HttpServer((app) => { }) function spyOnLifeCycleEvents(setupApi: SetupApi) { - const listener = jest.fn() + const listener = vi.fn() const requestIdPromise = new DeferredPromise() setupApi.events - .on('request:start', (request, requestId) => { + .on('request:start', ({ request, requestId }) => { requestIdPromise.resolve(requestId) listener(`[request:start] ${request.method} ${request.url} ${requestId}`) }) - .on('request:match', (request, requestId) => { + .on('request:match', ({ request, requestId }) => { listener(`[request:match] ${request.method} ${request.url} ${requestId}`) }) - .on('request:unhandled', (request, requestId) => { + .on('request:unhandled', ({ request, requestId }) => { listener( `[request:unhandled] ${request.method} ${request.url} ${requestId}`, ) }) - .on('request:end', (request, requestId) => { + .on('request:end', ({ request, requestId }) => { listener(`[request:end] ${request.method} ${request.url} ${requestId}`) }) setupApi.events - .on('response:mocked', async (response, request, requestId) => { + .on('response:mocked', async ({ response, request, requestId }) => { listener( `[response:mocked] ${request.method} ${request.url} ${requestId} ${ response.status } ${await response.clone().text()}`, ) }) - .on('response:bypass', async (response, request, requestId) => { + .on('response:bypass', async ({ response, request, requestId }) => { listener( `[response:bypass] ${request.method} ${request.url} ${requestId} ${ response.status @@ -63,7 +60,7 @@ function spyOnLifeCycleEvents(setupApi: SetupApi) { } beforeAll(async () => { - await remote.listen() + await remote.listen({ port: 56789 }) await httpServer.listen() await testApp.start() }) @@ -80,7 +77,7 @@ afterAll(async () => { it('emits correct events for the request handled in the test process', async () => { remote.use( - rest.get('https://example.com/resource', () => { + http.get('https://example.com/resource', () => { return HttpResponse.json({ mocked: true }) }), ) @@ -96,7 +93,7 @@ it('emits correct events for the request handled in the test process', async () expect(await response.json()).toEqual({ mocked: true }) // Must pipe all the relevant life-cycle events. - await waitFor(() => { + await vi.waitFor(() => { expect(listener.mock.calls).toEqual([ [`[request:start] GET https://example.com/resource ${requestId}`], [`[request:match] GET https://example.com/resource ${requestId}`], @@ -118,7 +115,7 @@ it('emits correct events for the request handled in the remote process', async ( expect(response.statusText).toBe('OK') expect(await response.json()).toEqual([1, 2, 3]) - await waitFor(() => { + await vi.waitFor(() => { expect(listener.mock.calls).toEqual([ [`[request:start] GET https://example.com/resource ${requestId}`], [`[request:match] GET https://example.com/resource ${requestId}`], @@ -130,7 +127,7 @@ it('emits correct events for the request handled in the remote process', async ( }) }) -it('emits correct events for the request unhandled by either parties', async () => { +it.only('emits correct events for the request unhandled by either parties', async () => { const { listener, waitForRequestId } = spyOnLifeCycleEvents(remote) const resourceUrl = httpServer.http.url('/greeting') @@ -147,7 +144,7 @@ it('emits correct events for the request unhandled by either parties', async () expect(response.statusText).toBe('OK') expect(await response.text()).toEqual('hello') - await waitFor(() => { + await vi.waitFor(() => { expect(listener.mock.calls).toEqual([ [`[request:start] GET ${resourceUrl} ${requestId}`], [`[request:unhandled] GET ${resourceUrl} ${requestId}`], diff --git a/test/node/msw-api/setup-remote-server/use.app.js b/test/node/msw-api/setup-remote-server/use.app.js index 47e4b2b88..a51f8f26c 100644 --- a/test/node/msw-api/setup-remote-server/use.app.js +++ b/test/node/msw-api/setup-remote-server/use.app.js @@ -20,7 +20,6 @@ app.get('/resource', async (req, res) => { const data = await fetch('https://example.com/resource').then((response) => response.json(), ) - res.set(200).json(data) }) diff --git a/test/node/msw-api/setup-remote-server/use.node.test.ts b/test/node/msw-api/setup-remote-server/use.node.test.ts index 924f3914a..c355554e1 100644 --- a/test/node/msw-api/setup-remote-server/use.node.test.ts +++ b/test/node/msw-api/setup-remote-server/use.node.test.ts @@ -1,6 +1,4 @@ -/** - * @jest-environment node - */ +// @vitest-environment node import { HttpResponse, http } from 'msw' import { setupRemoteServer } from 'msw/node' import { TestNodeApp } from './utils' diff --git a/test/node/msw-api/setup-remote-server/utils.ts b/test/node/msw-api/setup-remote-server/utils.ts index 937aed103..b6c604913 100644 --- a/test/node/msw-api/setup-remote-server/utils.ts +++ b/test/node/msw-api/setup-remote-server/utils.ts @@ -14,7 +14,7 @@ export class TestNodeApp { 'Failed to return the URL for the test Node app: the app is not running. Did you forget to call ".spawn()"?', ) - return this._url.href + return this._url } public async start(): Promise { From 46decd1bd0dc636b521bc72558eba3a6243c7976 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 5 Sep 2024 13:09:43 +0200 Subject: [PATCH 177/210] fix(RemoteRequestHandler): await response on `parse` phase --- src/core/handlers/RemoteRequestHandler.ts | 133 +++++++++++++++--- .../life-cycle-events/on.node.test.ts | 2 +- 2 files changed, 111 insertions(+), 24 deletions(-) diff --git a/src/core/handlers/RemoteRequestHandler.ts b/src/core/handlers/RemoteRequestHandler.ts index af92a0e69..049aab1fc 100644 --- a/src/core/handlers/RemoteRequestHandler.ts +++ b/src/core/handlers/RemoteRequestHandler.ts @@ -1,37 +1,124 @@ import type { Socket } from 'socket.io-client' +import { createRequestId } from '@mswjs/interceptors' import { DeferredPromise } from '@open-draft/deferred-promise' -import { HttpHandler } from './HttpHandler' import type { SyncServerEventsMap } from '../../node/setupRemoteServer' import { serializeRequest, deserializeResponse, } from '../utils/request/serializeUtils' +import type { ResponseResolutionContext } from '../utils/executeHandlers' +import { + RequestHandler, + type ResponseResolver, + type RequestHandlerDefaultInfo, +} from './RequestHandler' + +interface RemoteRequestHandlerParsedResult { + response: Response | undefined +} + +type RemoteRequestHandlerResolverExtras = { + response: Response | undefined +} + +export class RemoteRequestHandler extends RequestHandler< + RequestHandlerDefaultInfo, + RemoteRequestHandlerParsedResult, + RemoteRequestHandlerResolverExtras +> { + private socket: Socket -export class RemoteRequestHandler extends HttpHandler { constructor(args: { socket: Socket }) { - const { socket } = args - - super(/.+/, /.+/, async ({ request, requestId }) => { - socket.emit('request', { - requestId, - serializedRequest: await serializeRequest(request), - }) - - const responsePromise = new DeferredPromise() - - /** - * @todo Handle timeouts. - * @todo Handle socket errors. - */ - socket.on('response', ({ serializedResponse }) => { - const response = serializedResponse - ? deserializeResponse(serializedResponse) - : undefined + super({ + info: { + header: 'RemoteRequestHandler', + }, + resolver() {}, + }) + + this.socket = args.socket + } - responsePromise.resolve(response) - }) + async parse(args: { + request: Request + resolutionContext?: ResponseResolutionContext + }): Promise { + const parsedResult = await super.parse(args) + const responsePromise = new DeferredPromise() - return await responsePromise + /** + * @note Remote request handler is special. + * It cannot await the mocked response from the remote process in + * the resolver because that would mark it is matching, preventing + * MSW from treating unhandled requests as unhandled. + * + * Instead, the remote handler await the mocked response during the + * parsing phase since that's the only async phase before predicate. + */ + this.socket.emit('request', { + requestId: createRequestId(), + serializedRequest: await serializeRequest(args.request), }) + + /** + * @todo Handle timeouts. + * @todo Handle socket errors. + */ + this.socket.on('response', ({ serializedResponse }) => { + responsePromise.resolve( + serializedResponse + ? deserializeResponse(serializedResponse) + : undefined, + ) + }) + + return { + ...parsedResult, + // Set the received mocked response on the parsed result so it + // can be accessed in the predicate and response resolver functions. + response: await responsePromise, + } + } + + predicate(args: { + request: Request + parsedResult: RemoteRequestHandlerParsedResult + }): boolean { + // The remote handler is considered matching if the remote process + // returned any mocked response for the intercepted request. + return typeof args.parsedResult.response !== 'undefined' + } + + protected extendResolverArgs(args: { + request: Request + parsedResult: RemoteRequestHandlerParsedResult + }): RemoteRequestHandlerResolverExtras { + const resolverInfo = super.extendResolverArgs(args) + + return { + ...resolverInfo, + // Propagate the mocked response returned from the remote server + // onto the resolver function. + response: args.parsedResult.response, + } + } + + protected resolver: ResponseResolver< + RemoteRequestHandlerResolverExtras, + any, + any + > = ({ response }) => { + // Return the mocked response received from the remote process as-is. + return response + } + + log(_args: { + request: Request + response: Response + parsedResult: RemoteRequestHandlerParsedResult + }): void { + // Intentionally skip logging the remote request handler. + // This is an internal handler so let's not confuse the developer. + return } } diff --git a/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts b/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts index ea16d7a05..1b4f28a20 100644 --- a/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts +++ b/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts @@ -127,7 +127,7 @@ it('emits correct events for the request handled in the remote process', async ( }) }) -it.only('emits correct events for the request unhandled by either parties', async () => { +it('emits correct events for the request unhandled by either parties', async () => { const { listener, waitForRequestId } = spyOnLifeCycleEvents(remote) const resourceUrl = httpServer.http.url('/greeting') From 661113defc2a3180aaa247d4312a1c764447d77a Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 5 Sep 2024 17:00:07 +0200 Subject: [PATCH 178/210] test: add response type tests --- .../setup-remote-server/response.body.test.ts | 110 ++++++++++++++++++ .../msw-api/setup-remote-server/use.app.js | 8 +- .../setup-remote-server/use.node.test.ts | 1 - 3 files changed, 114 insertions(+), 5 deletions(-) create mode 100644 test/node/msw-api/setup-remote-server/response.body.test.ts diff --git a/test/node/msw-api/setup-remote-server/response.body.test.ts b/test/node/msw-api/setup-remote-server/response.body.test.ts new file mode 100644 index 000000000..2c2bfb1b7 --- /dev/null +++ b/test/node/msw-api/setup-remote-server/response.body.test.ts @@ -0,0 +1,110 @@ +// @vitest-environment node +import { http, HttpResponse } from 'msw' +import { setupRemoteServer } from 'msw/node' +import { TestNodeApp } from './utils' + +const remote = setupRemoteServer() +const testApp = new TestNodeApp(require.resolve('./use.app.js')) + +beforeAll(async () => { + await remote.listen({ port: 56789 }) + await testApp.start() +}) + +afterEach(() => { + remote.resetHandlers() +}) + +afterAll(async () => { + await remote.close() + await testApp.close() +}) + +it('supports responding to a remote request with text', async () => { + remote.use( + http.get('https://example.com/resource', () => { + return HttpResponse.text('hello world') + }), + ) + + const response = await fetch(new URL('/resource', testApp.url)) + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + await expect(response.text()).resolves.toBe('hello world') +}) + +it('supports responding to a remote request with JSON', async () => { + remote.use( + http.get('https://example.com/resource', () => { + return HttpResponse.json({ hello: 'world' }) + }), + ) + + const response = await fetch(new URL('/resource', testApp.url)) + expect(response.status).toBe(200) + await expect(response.json()).resolves.toEqual({ hello: 'world' }) +}) + +it('supports responding to a remote request with ArrayBuffer', async () => { + remote.use( + http.get('https://example.com/resource', () => { + return HttpResponse.arrayBuffer(new TextEncoder().encode('hello world')) + }), + ) + + const response = await fetch(new URL('/resource', testApp.url)) + const buffer = await response.arrayBuffer() + + expect(response.status).toBe(200) + expect(new TextDecoder().decode(buffer)).toBe('hello world') +}) + +it('supports responding to a remote request with Blob', async () => { + remote.use( + http.get('https://example.com/resource', () => { + return new Response(new Blob(['hello world'])) + }), + ) + + const response = await fetch(new URL('/resource', testApp.url)) + expect(response.status).toBe(200) + await expect(response.blob()).resolves.toEqual(new Blob(['hello world'])) +}) + +it('supports responding to a remote request with FormData', async () => { + remote.use( + http.get('https://example.com/resource', () => { + const formData = new FormData() + formData.append('hello', 'world') + return HttpResponse.formData(formData) + }), + ) + + const response = await fetch(new URL('/resource', testApp.url)) + expect(response.status).toBe(200) + + await expect(response.text()).resolves.toMatch( + /^------formdata-undici-\d{12}\r\nContent-Disposition: form-data; name="hello"\r\n\r\nworld\r\n------formdata-undici-\d{12}--$/, + ) +}) + +it('supports responding to a remote request with ReadableStream', async () => { + const encoder = new TextEncoder() + remote.use( + http.get('https://example.com/resource', () => { + const stream = new ReadableStream({ + start(controller) { + controller.enqueue(encoder.encode('hello')) + controller.enqueue(encoder.encode(' ')) + controller.enqueue(encoder.encode('world')) + controller.close() + }, + }) + return new Response(stream, { headers: { 'Content-Type': 'text/plain' } }) + }), + ) + + const response = await fetch(new URL('/resource', testApp.url)) + expect(response.status).toBe(200) + await expect(response.text()).resolves.toBe('hello world') +}) diff --git a/test/node/msw-api/setup-remote-server/use.app.js b/test/node/msw-api/setup-remote-server/use.app.js index a51f8f26c..598cd16ee 100644 --- a/test/node/msw-api/setup-remote-server/use.app.js +++ b/test/node/msw-api/setup-remote-server/use.app.js @@ -1,3 +1,4 @@ +const { Readable } = require('node:stream') const express = require('express') const { http, HttpResponse } = require('msw') const { setupServer } = require('msw/node') @@ -17,10 +18,9 @@ server.listen({ const app = express() app.get('/resource', async (req, res) => { - const data = await fetch('https://example.com/resource').then((response) => - response.json(), - ) - res.set(200).json(data) + const response = await fetch('https://example.com/resource') + res.writeHead(response.status, response.statusText) + Readable.fromWeb(response.body).pipe(res) }) app.use('/proxy', async (req, res) => { diff --git a/test/node/msw-api/setup-remote-server/use.node.test.ts b/test/node/msw-api/setup-remote-server/use.node.test.ts index c355554e1..571ddbe0d 100644 --- a/test/node/msw-api/setup-remote-server/use.node.test.ts +++ b/test/node/msw-api/setup-remote-server/use.node.test.ts @@ -4,7 +4,6 @@ import { setupRemoteServer } from 'msw/node' import { TestNodeApp } from './utils' const remote = setupRemoteServer() - const testApp = new TestNodeApp(require.resolve('./use.app.js')) beforeAll(async () => { From cb50d9a63d2d225be0504f0160688fd2668d6dcc Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 5 Sep 2024 19:48:54 +0200 Subject: [PATCH 179/210] fix: use default remote port number --- src/node/SetupServerApi.ts | 19 ++++++++++++++----- src/node/glossary.ts | 6 +++++- src/node/setupRemoteServer.ts | 16 +++++++++++----- .../life-cycle-events/on.node.test.ts | 2 +- .../setup-remote-server/response.body.test.ts | 2 +- .../msw-api/setup-remote-server/use.app.js | 2 +- .../setup-remote-server/use.node.test.ts | 4 +--- 7 files changed, 34 insertions(+), 17 deletions(-) diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index bc9f264ea..3153c5ef4 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -8,7 +8,11 @@ import type { RequestHandler } from '~/core/handlers/RequestHandler' import type { ListenOptions, SetupServer } from './glossary' import { SetupServerCommonApi } from './SetupServerCommonApi' import { Socket } from 'socket.io-client' -import { SyncServerEventsMap, createSyncClient } from './setupRemoteServer' +import { + MSW_REMOTE_SERVER_PORT, + SyncServerEventsMap, + createSyncClient, +} from './setupRemoteServer' import { RemoteRequestHandler } from '~/core/handlers/RemoteRequestHandler' import { onAnyEvent, @@ -97,15 +101,20 @@ export class SetupServerApi // If the "remotePort" option has been provided to the server, // run it in a special "remote" mode. That mode ensures that // an extraneous Node.js process can affect this process' traffic. - if (this.resolvedOptions.remotePort != null) { + if (typeof this.resolvedOptions.remote !== 'undefined') { + const remotePort = + typeof this.resolvedOptions.remote === 'object' + ? this.resolvedOptions.remote.port || MSW_REMOTE_SERVER_PORT + : MSW_REMOTE_SERVER_PORT + invariant( - typeof this.resolvedOptions.remotePort === 'number', + typeof remotePort === 'number', 'Failed to enable request interception: expected the "remotePort" option to be a valid port number, but got "%s". Make sure it is the same port number you provide as the "port" option to "remote.listen()" in your tests.', - this.resolvedOptions.remotePort, + remotePort, ) // Create the WebSocket sync client immediately when starting the interception. - this.socketPromise = createSyncClient(this.resolvedOptions.remotePort) + this.socketPromise = createSyncClient(remotePort) // Once the sync server connection is established, prepend the // remote request handler to be the first for this process. diff --git a/src/node/glossary.ts b/src/node/glossary.ts index b4d933233..31157ffa8 100644 --- a/src/node/glossary.ts +++ b/src/node/glossary.ts @@ -10,7 +10,11 @@ import type { } from '~/core/sharedOptions' export interface ListenOptions extends SharedOptions { - remotePort?: number + remote?: + | boolean + | { + port?: number + } } export interface SetupServerCommon { diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index 39ae8dce5..600cdc365 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -27,6 +27,8 @@ import { RequestIntention, } from '~/core/utils/internal/requestUtils' +export const MSW_REMOTE_SERVER_PORT = 56957 + const kSyncServer = Symbol('kSyncServer') type SyncServerType = WebSocketServer | undefined @@ -40,7 +42,7 @@ export function setupRemoteServer( } export interface SetupRemoteServerListenOptions { - port: number + port?: number } export interface SetupRemoteServer { @@ -73,15 +75,19 @@ export class SetupRemoteServerApi super(...handlers) } - public async listen(options: SetupRemoteServerListenOptions): Promise { + public async listen( + options: SetupRemoteServerListenOptions = {}, + ): Promise { + const port = options.port || MSW_REMOTE_SERVER_PORT + invariant( - typeof options.port === 'number', + typeof port === 'number', 'Failed to initialize remote server: expected the "port" option to be a valid port number but got "%s". Make sure it is the same port number you provide as the "remotePort" option to "server.listen()" in your application.', - options.port, + port, ) const dummyEmitter = new Emitter() - const wssUrl = createWebSocketServerUrl(options.port) + const wssUrl = createWebSocketServerUrl(port) const server = await createSyncServer(wssUrl) server.removeAllListeners() diff --git a/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts b/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts index 1b4f28a20..cc35fb490 100644 --- a/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts +++ b/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts @@ -60,7 +60,7 @@ function spyOnLifeCycleEvents(setupApi: SetupApi) { } beforeAll(async () => { - await remote.listen({ port: 56789 }) + await remote.listen() await httpServer.listen() await testApp.start() }) diff --git a/test/node/msw-api/setup-remote-server/response.body.test.ts b/test/node/msw-api/setup-remote-server/response.body.test.ts index 2c2bfb1b7..302a8a8de 100644 --- a/test/node/msw-api/setup-remote-server/response.body.test.ts +++ b/test/node/msw-api/setup-remote-server/response.body.test.ts @@ -7,7 +7,7 @@ const remote = setupRemoteServer() const testApp = new TestNodeApp(require.resolve('./use.app.js')) beforeAll(async () => { - await remote.listen({ port: 56789 }) + await remote.listen() await testApp.start() }) diff --git a/test/node/msw-api/setup-remote-server/use.app.js b/test/node/msw-api/setup-remote-server/use.app.js index 598cd16ee..c20677e61 100644 --- a/test/node/msw-api/setup-remote-server/use.app.js +++ b/test/node/msw-api/setup-remote-server/use.app.js @@ -11,7 +11,7 @@ const server = setupServer( ) server.listen({ - remotePort: 56789, + remote: true, }) // Spawn a Node.js application. diff --git a/test/node/msw-api/setup-remote-server/use.node.test.ts b/test/node/msw-api/setup-remote-server/use.node.test.ts index 571ddbe0d..60b2c155e 100644 --- a/test/node/msw-api/setup-remote-server/use.node.test.ts +++ b/test/node/msw-api/setup-remote-server/use.node.test.ts @@ -7,9 +7,7 @@ const remote = setupRemoteServer() const testApp = new TestNodeApp(require.resolve('./use.app.js')) beforeAll(async () => { - await remote.listen({ - port: 56789, - }) + await remote.listen() await testApp.start() }) From 38b0e27b67af827d9394ccf93307ca09ab913e1c Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 5 Sep 2024 19:55:20 +0200 Subject: [PATCH 180/210] docs: add jsdoc to listen options --- src/node/glossary.ts | 13 +++++++++++++ src/node/setupRemoteServer.ts | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/src/node/glossary.ts b/src/node/glossary.ts index 31157ffa8..903b3e613 100644 --- a/src/node/glossary.ts +++ b/src/node/glossary.ts @@ -10,9 +10,22 @@ import type { } from '~/core/sharedOptions' export interface ListenOptions extends SharedOptions { + /** + * Enable remote request resolution. + * + * With `remote` set to `true`, all the outgoing requests in this process + * will be forwarded to a remote process where `setupRemoteServer` was + * created to handle. If the remote process hasn't handled the request, + * it will be handled by whichever request handlers you have in this process. + */ remote?: | boolean | { + /** + * Custom port number to synchronize this `setupServer` with + * the remote `setupRemoteServer`. + * @default 56957 + */ port?: number } } diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index 600cdc365..327f6d630 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -42,6 +42,11 @@ export function setupRemoteServer( } export interface SetupRemoteServerListenOptions { + /** + * Custom port number to synchronize this this `setupRemoteServer` + * with the regular `setupServer`. + * @default 56957 + */ port?: number } From 6e2ee96f133c92c23895244002ae02e20e91f1d0 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 29 Nov 2024 13:39:38 +0100 Subject: [PATCH 181/210] feat: add `remote.boundary()` --- src/node/SetupServerApi.ts | 48 +++++++++++++++++++--------- src/node/glossary.ts | 21 +++++++------ src/node/setupRemoteServer.ts | 59 ++++++++++++++++++++++++++++++++--- 3 files changed, 99 insertions(+), 29 deletions(-) diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 3153c5ef4..a1f88e407 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -32,15 +32,23 @@ type RequestHandlersContext = { * to prevent the request handlers list from being a shared state * across mutliple tests. */ -class AsyncHandlersController implements HandlersController { +export class AsyncHandlersController implements HandlersController { + private store: AsyncLocalStorage private rootContext: RequestHandlersContext - constructor(initialHandlers: Array) { - this.rootContext = { initialHandlers, handlers: [] } + constructor(args: { + store: AsyncLocalStorage + initialHandlers: Array + }) { + this.store = args.store + this.rootContext = { + initialHandlers: args.initialHandlers, + handlers: [], + } } get context(): RequestHandlersContext { - return store.getStore() || this.rootContext + return this.store.getStore() || this.rootContext } public prepend(runtimeHandlers: Array) { @@ -72,7 +80,10 @@ export class SetupServerApi handlers, ) - this.handlersController = new AsyncHandlersController(handlers) + this.handlersController = new AsyncHandlersController({ + store, + initialHandlers: handlers, + }) } public boundary, R>( @@ -90,6 +101,17 @@ export class SetupServerApi } } + protected async beforeRequest(_args: { + requestId: string + request: Request + }): Promise { + // Before the first request gets handled, await the sync server connection. + // This way we ensure that all the requests go through the `RemoteRequestHandler`. + if (this.socketPromise) { + await this.socketPromise + } + } + public close(): void { super.close() store.disable() @@ -101,7 +123,7 @@ export class SetupServerApi // If the "remotePort" option has been provided to the server, // run it in a special "remote" mode. That mode ensures that // an extraneous Node.js process can affect this process' traffic. - if (typeof this.resolvedOptions.remote !== 'undefined') { + if (this.resolvedOptions.remote?.enabled) { const remotePort = typeof this.resolvedOptions.remote === 'object' ? this.resolvedOptions.remote.port || MSW_REMOTE_SERVER_PORT @@ -114,7 +136,9 @@ export class SetupServerApi ) // Create the WebSocket sync client immediately when starting the interception. - this.socketPromise = createSyncClient(remotePort) + this.socketPromise = createSyncClient({ + port: remotePort, + }) // Once the sync server connection is established, prepend the // remote request handler to be the first for this process. @@ -125,7 +149,9 @@ export class SetupServerApi { apply: (target, thisArg, args) => { return Array.prototype.concat( - new RemoteRequestHandler({ socket }), + new RemoteRequestHandler({ + socket, + }), Reflect.apply(target, thisArg, args), ) }, @@ -135,12 +161,6 @@ export class SetupServerApi return socket }) - // Before the first request gets handled, await the sync server connection. - // This way we ensure that all the requests go through the `RemoteRequestHandler`. - this.beforeRequest = async () => { - await this.socketPromise - } - // Forward all life-cycle events from this process to the remote. this.forwardLifeCycleEvents() } diff --git a/src/node/glossary.ts b/src/node/glossary.ts index 903b3e613..7889e7d14 100644 --- a/src/node/glossary.ts +++ b/src/node/glossary.ts @@ -18,16 +18,17 @@ export interface ListenOptions extends SharedOptions { * created to handle. If the remote process hasn't handled the request, * it will be handled by whichever request handlers you have in this process. */ - remote?: - | boolean - | { - /** - * Custom port number to synchronize this `setupServer` with - * the remote `setupRemoteServer`. - * @default 56957 - */ - port?: number - } + remote?: { + enabled: boolean + contextId?: string + + /** + * Custom port number to synchronize this `setupServer` with + * the remote `setupRemoteServer`. + * @default 56957 + */ + port?: number + } } export interface SetupServerCommon { diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index 327f6d630..a91244169 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -1,8 +1,10 @@ import * as http from 'node:http' +import { AsyncLocalStorage } from 'node:async_hooks' import { invariant } from 'outvariant' import { Server as WebSocketServer } from 'socket.io' import { Socket, io } from 'socket.io-client' import { Emitter } from 'strict-event-emitter' +import { createRequestId } from '@mswjs/interceptors' import { DeferredPromise } from '@open-draft/deferred-promise' import { SetupApi } from '~/core/SetupApi' import type { RequestHandler } from '~/core/handlers/RequestHandler' @@ -26,9 +28,16 @@ import { REQUEST_INTENTION_HEADER_NAME, RequestIntention, } from '~/core/utils/internal/requestUtils' +import { AsyncHandlersController } from './SetupServerApi' export const MSW_REMOTE_SERVER_PORT = 56957 +const store = new AsyncLocalStorage<{ + contextId: string + initialHandlers: Array + handlers: Array +}>() + const kSyncServer = Symbol('kSyncServer') type SyncServerType = WebSocketServer | undefined @@ -38,7 +47,7 @@ type SyncServerType = WebSocketServer | undefined export function setupRemoteServer( ...handlers: Array ): SetupRemoteServerApi { - return new SetupRemoteServerApi(...handlers) + return new SetupRemoteServerApi(handlers) } export interface SetupRemoteServerListenOptions { @@ -53,6 +62,10 @@ export interface SetupRemoteServerListenOptions { export interface SetupRemoteServer { events: LifeCycleEventEmitter listen: (options: SetupRemoteServerListenOptions) => Promise + boundary: , R>( + callback: (...args: Args) => R, + ) => (...args: Args) => R + get contextId(): string close: () => Promise } @@ -76,8 +89,24 @@ export class SetupRemoteServerApi extends SetupApi implements SetupRemoteServer { - constructor(...handlers: Array) { + constructor(handlers: Array) { super(...handlers) + + this.handlersController = new AsyncHandlersController({ + store, + initialHandlers: handlers, + }) + } + + get contextId(): string { + const context = store.getStore() + + invariant( + context != null, + 'Failed to get "contextId" on "SetupRemoteServerApi": no context found. Did you forget to wrap this closure in `remote.boundary()`?', + ) + + return context.contextId } public async listen( @@ -101,7 +130,7 @@ export class SetupRemoteServerApi .once('SIGTERM', () => closeSyncServer(server)) .once('SIGINT', () => closeSyncServer(server)) - server.on('connection', (socket) => { + server.on('connection', async (socket) => { socket.on('request', async ({ requestId, serializedRequest }) => { const request = deserializeRequest(serializedRequest) const response = await handleRequest( @@ -129,7 +158,27 @@ export class SetupRemoteServerApi }) } + public boundary, R>( + callback: (...args: Args) => R, + ): (...args: Args) => R { + const contextId = createRequestId() + + return (...args: Args): R => { + return store.run( + { + contextId, + initialHandlers: this.handlersController.currentHandlers(), + handlers: [], + }, + callback, + ...args, + ) + } + } + public async close(): Promise { + store.disable() + const syncServer = Reflect.get(globalThis, kSyncServer) as SyncServerType invariant( @@ -211,9 +260,9 @@ function createWebSocketServerUrl(port: number): URL { * Creates a WebSocket client connected to the internal * WebSocket sync server of MSW. */ -export async function createSyncClient(port: number) { +export async function createSyncClient(args: { port: number }) { const connectionPromise = new DeferredPromise>() - const url = createWebSocketServerUrl(port) + const url = createWebSocketServerUrl(args.port) const socket = io(url.href, { transports: ['websocket'], // Keep a low timeout and no retry logic because From 49357ed75186156d090b348b33bef85b84a34976 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sun, 1 Dec 2024 15:26:35 +0100 Subject: [PATCH 182/210] chore(wip): debugging --- src/core/utils/handleRequest.ts | 4 ++ src/core/utils/internal/requestUtils.ts | 1 - src/node/SetupServerApi.ts | 42 ++++++++++++------- src/node/SetupServerCommonApi.ts | 6 +++ src/node/setupRemoteServer.ts | 20 +++++---- .../msw-api/setup-remote-server/use.app.js | 5 ++- .../setup-remote-server/use.node.test.ts | 2 +- .../node/msw-api/setup-remote-server/utils.ts | 5 ++- 8 files changed, 60 insertions(+), 25 deletions(-) diff --git a/src/core/utils/handleRequest.ts b/src/core/utils/handleRequest.ts index e35ddb1f5..8b2aa58ee 100644 --- a/src/core/utils/handleRequest.ts +++ b/src/core/utils/handleRequest.ts @@ -50,8 +50,12 @@ export async function handleRequest( ): Promise { emitter.emit('request:start', { request, requestId }) + console.log('[handleRequest]', request.method, request.url) + // Perform bypassed requests (i.e. wrapped in "bypass()") as-is. if (shouldBypassRequest(request)) { + console.log('REQUEST IS PASSTHROUGH!') + emitter.emit('request:end', { request, requestId }) handleRequestOptions?.onPassthroughResponse?.(request) return diff --git a/src/core/utils/internal/requestUtils.ts b/src/core/utils/internal/requestUtils.ts index fe7ae929f..9930129f6 100644 --- a/src/core/utils/internal/requestUtils.ts +++ b/src/core/utils/internal/requestUtils.ts @@ -1,7 +1,6 @@ export const REQUEST_INTENTION_HEADER_NAME = 'x-msw-intention' export enum RequestIntention { - bypass = 'bypass', passthrough = 'passthrough', } diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index edab19e3b..2104f24b0 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -102,17 +102,6 @@ export class SetupServerApi } } - protected async beforeRequest(_args: { - requestId: string - request: Request - }): Promise { - // Before the first request gets handled, await the sync server connection. - // This way we ensure that all the requests go through the `RemoteRequestHandler`. - if (this.socketPromise) { - await this.socketPromise - } - } - public close(): void { super.close() store.disable() @@ -121,6 +110,8 @@ export class SetupServerApi public listen(options?: Partial): void { super.listen(options) + console.log('[setupServer] listen()') + // If the "remotePort" option has been provided to the server, // run it in a special "remote" mode. That mode ensures that // an extraneous Node.js process can affect this process' traffic. @@ -136,6 +127,8 @@ export class SetupServerApi remotePort, ) + console.log('SETUPSERVER IN REMOTE MODE!') + // Create the WebSocket sync client immediately when starting the interception. this.socketPromise = createSyncClient({ port: remotePort, @@ -145,14 +138,14 @@ export class SetupServerApi // remote request handler to be the first for this process. // This way, the remote process' handlers take priority. this.socketPromise.then((socket) => { + console.log('[setupServer] socketPromise resolved!') + this.handlersController.currentHandlers = new Proxy( this.handlersController.currentHandlers, { apply: (target, thisArg, args) => { return Array.prototype.concat( - new RemoteRequestHandler({ - socket, - }), + new RemoteRequestHandler({ socket }), Reflect.apply(target, thisArg, args), ) }, @@ -162,6 +155,27 @@ export class SetupServerApi return socket }) + this.beforeRequest = async ({ request }) => { + console.log( + 'beforeRequest', + request.method, + request.url, + Array.from(request.headers.entries()), + ) + + /** + * @todo This technically shouldn't trigger but it does. + */ + if (request.url.includes('/socket.io/')) { + console.log('allow ws request passthrough...') + return + } + + // Before the first request gets handled, await the sync server connection. + // This way we ensure that all the requests go through the `RemoteRequestHandler`. + await this.socketPromise + } + // Forward all life-cycle events from this process to the remote. this.forwardLifeCycleEvents() } diff --git a/src/node/SetupServerCommonApi.ts b/src/node/SetupServerCommonApi.ts index eaea0a331..b41ae5989 100644 --- a/src/node/SetupServerCommonApi.ts +++ b/src/node/SetupServerCommonApi.ts @@ -106,6 +106,12 @@ export class SetupServerCommonApi controller.respondWith(response) } + console.log( + '[setupServerCommonApi] performing request as-is...', + request.method, + request.url, + ) + return }, ) diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index 4a648a41d..33ceda7c2 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -26,10 +26,6 @@ import { type SerializedLifeCycleEventsMap, deserializeEventPayload, } from '~/core/utils/internal/emitterUtils' -import { - REQUEST_INTENTION_HEADER_NAME, - RequestIntention, -} from '~/core/utils/internal/requestUtils' import { AsyncHandlersController } from './SetupServerApi' export const MSW_REMOTE_SERVER_PORT = 56957 @@ -126,6 +122,8 @@ export class SetupRemoteServerApi const wssUrl = createWebSocketServerUrl(port) const server = await createSyncServer(wssUrl) + console.log('[remote] created ws server!', wssUrl.href) + server.removeAllListeners() process @@ -133,6 +131,8 @@ export class SetupRemoteServerApi .once('SIGINT', () => closeSyncServer(server)) server.on('connection', async (socket) => { + console.log('[remote] socket CONNECTED!') + socket.on('request', async ({ requestId, serializedRequest }) => { const request = deserializeRequest(serializedRequest) const response = await handleRequest( @@ -272,21 +272,27 @@ export async function createSyncClient(args: { port: number }) { // Keep a low timeout and no retry logic because // the user is expected to enable remote interception // before the actual application with "setupServer". - timeout: 200, - reconnection: false, + timeout: 1000, + reconnection: true, extraHeaders: { // Bypass the internal WebSocket connection requests // to exclude them from the request lookup altogether. // This prevents MSW from treating these requests as unhandled. - [REQUEST_INTENTION_HEADER_NAME]: RequestIntention.bypass, + accept: 'msw/passthrough', }, }) + console.log('created ws client!') + socket.on('connect', () => { + console.log('ws client CONNECT!') + connectionPromise.resolve(socket) }) socket.io.once('error', (error) => { + console.log('ws client ERROR!', error) + connectionPromise.reject(error) }) diff --git a/test/node/msw-api/setup-remote-server/use.app.js b/test/node/msw-api/setup-remote-server/use.app.js index c20677e61..a0820e9a3 100644 --- a/test/node/msw-api/setup-remote-server/use.app.js +++ b/test/node/msw-api/setup-remote-server/use.app.js @@ -11,7 +11,10 @@ const server = setupServer( ) server.listen({ - remote: true, + // Start MSW in the remote mode. + remote: { + enabled: true, + }, }) // Spawn a Node.js application. diff --git a/test/node/msw-api/setup-remote-server/use.node.test.ts b/test/node/msw-api/setup-remote-server/use.node.test.ts index 60b2c155e..f7c73fafa 100644 --- a/test/node/msw-api/setup-remote-server/use.node.test.ts +++ b/test/node/msw-api/setup-remote-server/use.node.test.ts @@ -29,7 +29,7 @@ it('returns a mocked response defined in the app by default', async () => { expect(json).toEqual([1, 2, 3]) }) -it('returns a mocked response from the matching runtime request handler', async () => { +it.only('returns a mocked response from the matching runtime request handler', async () => { remote.use( http.get('https://example.com/resource', () => { return HttpResponse.json({ mocked: true }) diff --git a/test/node/msw-api/setup-remote-server/utils.ts b/test/node/msw-api/setup-remote-server/utils.ts index b6c604913..04be42573 100644 --- a/test/node/msw-api/setup-remote-server/utils.ts +++ b/test/node/msw-api/setup-remote-server/utils.ts @@ -25,9 +25,12 @@ export class TestNodeApp { // This IPC is not required for the remote interception to work. // This IPC is required for the test app to be spawned at a random port // and be able to communicate the port back to the test. - stdio: ['inherit', 'inherit', 'inherit', 'ipc'], + stdio: ['pipe', 'pipe', 'pipe', 'ipc'], }) + this.io.stdout?.on('data', (c) => console.log(c.toString())) + this.io.stderr?.on('data', (c) => console.error(c.toString())) + this.io .on('message', (message) => { try { From a6c6f6f4430c77a8728571b1fa87a22c2e22ce0e Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 4 Dec 2024 15:32:03 +0100 Subject: [PATCH 183/210] fix: fix ws passthrough, adjust remote tests --- package.json | 2 +- pnpm-lock.yaml | 11752 +++++++++------- src/core/utils/request/serializeUtils.ts | 16 +- src/node/SetupServerApi.ts | 36 +- src/node/SetupServerCommonApi.ts | 6 - src/node/setupRemoteServer.ts | 28 +- .../life-cycle-events/on.node.test.ts | 12 + .../msw-api/setup-remote-server/use.app.js | 1 - .../setup-remote-server/use.node.test.ts | 2 +- 9 files changed, 6510 insertions(+), 5345 deletions(-) diff --git a/package.json b/package.json index 93655a22c..441771a3c 100644 --- a/package.json +++ b/package.json @@ -143,7 +143,7 @@ "@bundled-es-modules/statuses": "^1.0.1", "@bundled-es-modules/tough-cookie": "^0.1.6", "@inquirer/confirm": "^5.0.0", - "@mswjs/interceptors": "^0.37.0", + "@mswjs/interceptors": "^0.37.3", "@open-draft/deferred-promise": "^2.2.0", "@open-draft/until": "^2.1.0", "@types/cookie": "^0.6.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9d8ea6adb..601bc66c0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,1796 +1,1057 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@bundled-es-modules/cookie': - specifier: ^2.0.1 - version: 2.0.1 - '@bundled-es-modules/statuses': - specifier: ^1.0.1 - version: 1.0.1 - '@bundled-es-modules/tough-cookie': - specifier: ^0.1.6 - version: 0.1.6 - '@inquirer/confirm': - specifier: ^5.0.0 - version: 5.0.2(@types/node@18.19.28) - '@mswjs/interceptors': - specifier: ^0.37.0 - version: 0.37.1 - '@open-draft/deferred-promise': - specifier: ^2.2.0 - version: 2.2.0 - '@open-draft/until': - specifier: ^2.1.0 - version: 2.1.0 - '@types/cookie': - specifier: ^0.6.0 - version: 0.6.0 - '@types/statuses': - specifier: ^2.0.4 - version: 2.0.5 - chalk: - specifier: ^4.1.2 - version: 4.1.2 - graphql: - specifier: ^16.8.1 - version: 16.8.2 - headers-polyfill: - specifier: ^4.0.2 - version: 4.0.3 - is-node-process: - specifier: ^1.2.0 - version: 1.2.0 - outvariant: - specifier: ^1.4.3 - version: 1.4.3 - path-to-regexp: - specifier: ^6.3.0 - version: 6.3.0 - socket.io: - specifier: ^4.6.1 - version: 4.7.5 - socket.io-client: - specifier: ^4.6.1 - version: 4.7.5 - strict-event-emitter: - specifier: ^0.5.1 - version: 0.5.1 - type-fest: - specifier: ^4.26.1 - version: 4.29.0 - yargs: - specifier: ^17.7.2 - version: 17.7.2 - -devDependencies: - '@commitlint/cli': - specifier: ^18.4.4 - version: 18.6.1(@types/node@18.19.28)(typescript@5.5.2) - '@commitlint/config-conventional': - specifier: ^18.4.4 - version: 18.6.3 - '@fastify/websocket': - specifier: ^8.3.1 - version: 8.3.1 - '@open-draft/test-server': - specifier: ^0.4.2 - version: 0.4.2 - '@ossjs/release': - specifier: ^0.8.1 - version: 0.8.1 - '@playwright/test': - specifier: ^1.48.0 - version: 1.49.0 - '@types/express': - specifier: ^4.17.21 - version: 4.17.21 - '@types/fs-extra': - specifier: ^11.0.4 - version: 11.0.4 - '@types/glob': - specifier: ^8.1.0 - version: 8.1.0 - '@types/json-bigint': - specifier: ^1.0.4 - version: 1.0.4 - '@types/node': - specifier: 18.x - version: 18.19.28 - '@typescript-eslint/eslint-plugin': - specifier: ^8.8.1 - version: 8.16.0(@typescript-eslint/parser@8.16.0)(eslint@8.57.0)(typescript@5.5.2) - '@typescript-eslint/parser': - specifier: ^8.8.1 - version: 8.16.0(eslint@8.57.0)(typescript@5.5.2) - '@web/dev-server': - specifier: ^0.4.6 - version: 0.4.6 - axios: - specifier: ^1.7.7 - version: 1.7.8 - babel-minify: - specifier: ^0.5.1 - version: 0.5.2 - commitizen: - specifier: ^4.3.1 - version: 4.3.1(@types/node@18.19.28)(typescript@5.5.2) - cross-env: - specifier: ^7.0.3 - version: 7.0.3 - cross-fetch: - specifier: ^4.0.0 - version: 4.0.0 - cz-conventional-changelog: - specifier: 3.3.0 - version: 3.3.0(@types/node@18.19.28)(typescript@5.5.2) - esbuild: - specifier: ^0.24.0 - version: 0.24.0 - esbuild-loader: - specifier: ^4.2.2 - version: 4.2.2(webpack@5.96.1) - eslint: - specifier: ^8.57.0 - version: 8.57.0 - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@8.57.0) - eslint-plugin-prettier: - specifier: ^5.2.1 - version: 5.2.1(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.4.1) - express: - specifier: ^5.0.0 - version: 5.0.1 - fastify: - specifier: ^4.26.0 - version: 4.28.1 - fs-extra: - specifier: ^11.2.0 - version: 11.2.0 - fs-teardown: - specifier: ^0.3.0 - version: 0.3.2 - glob: - specifier: ^11.0.0 - version: 11.0.0 - jsdom: - specifier: ^25.0.1 - version: 25.0.1 - json-bigint: - specifier: ^1.0.0 - version: 1.0.0 - lint-staged: - specifier: ^15.2.10 - version: 15.2.10 - page-with: - specifier: ^0.6.1 - version: 0.6.1(esbuild@0.24.0) - prettier: - specifier: ^3.3.3 - version: 3.4.1 - regenerator-runtime: - specifier: ^0.14.1 - version: 0.14.1 - rimraf: - specifier: ^6.0.1 - version: 6.0.1 - simple-git-hooks: - specifier: ^2.9.0 - version: 2.11.1 - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@types/node@18.19.28)(typescript@5.5.2) - tsup: - specifier: ^8.3.0 - version: 8.3.5(typescript@5.5.2) - typescript: - specifier: ^5.5.2 - version: 5.5.2 - undici: - specifier: ^6.20.0 - version: 6.21.0 - url-loader: - specifier: ^4.1.1 - version: 4.1.1(webpack@5.96.1) - vitest: - specifier: ^1.2.2 - version: 1.4.0(@types/node@18.19.28)(jsdom@25.0.1) - vitest-environment-miniflare: - specifier: ^2.14.4 - version: 2.14.4(vitest@1.4.0) - webpack: - specifier: ^5.95.0 - version: 5.96.1(esbuild@0.24.0) - webpack-http-server: - specifier: ^0.5.0 - version: 0.5.0(esbuild@0.24.0) +importers: + + .: + dependencies: + '@bundled-es-modules/cookie': + specifier: ^2.0.1 + version: 2.0.1 + '@bundled-es-modules/statuses': + specifier: ^1.0.1 + version: 1.0.1 + '@bundled-es-modules/tough-cookie': + specifier: ^0.1.6 + version: 0.1.6 + '@inquirer/confirm': + specifier: ^5.0.0 + version: 5.0.2(@types/node@18.19.28) + '@mswjs/interceptors': + specifier: ^0.37.3 + version: 0.37.3 + '@open-draft/deferred-promise': + specifier: ^2.2.0 + version: 2.2.0 + '@open-draft/until': + specifier: ^2.1.0 + version: 2.1.0 + '@types/cookie': + specifier: ^0.6.0 + version: 0.6.0 + '@types/statuses': + specifier: ^2.0.4 + version: 2.0.5 + chalk: + specifier: ^4.1.2 + version: 4.1.2 + graphql: + specifier: ^16.8.1 + version: 16.8.2 + headers-polyfill: + specifier: ^4.0.2 + version: 4.0.3 + is-node-process: + specifier: ^1.2.0 + version: 1.2.0 + outvariant: + specifier: ^1.4.3 + version: 1.4.3 + path-to-regexp: + specifier: ^6.3.0 + version: 6.3.0 + socket.io: + specifier: ^4.6.1 + version: 4.7.5 + socket.io-client: + specifier: ^4.6.1 + version: 4.7.5 + strict-event-emitter: + specifier: ^0.5.1 + version: 0.5.1 + type-fest: + specifier: ^4.26.1 + version: 4.29.0 + yargs: + specifier: ^17.7.2 + version: 17.7.2 + devDependencies: + '@commitlint/cli': + specifier: ^18.4.4 + version: 18.6.1(@types/node@18.19.28)(typescript@5.5.2) + '@commitlint/config-conventional': + specifier: ^18.4.4 + version: 18.6.3 + '@fastify/websocket': + specifier: ^8.3.1 + version: 8.3.1 + '@open-draft/test-server': + specifier: ^0.4.2 + version: 0.4.2 + '@ossjs/release': + specifier: ^0.8.1 + version: 0.8.1 + '@playwright/test': + specifier: ^1.48.0 + version: 1.49.0 + '@types/express': + specifier: ^4.17.21 + version: 4.17.21 + '@types/fs-extra': + specifier: ^11.0.4 + version: 11.0.4 + '@types/glob': + specifier: ^8.1.0 + version: 8.1.0 + '@types/json-bigint': + specifier: ^1.0.4 + version: 1.0.4 + '@types/node': + specifier: 18.x + version: 18.19.28 + '@typescript-eslint/eslint-plugin': + specifier: ^8.8.1 + version: 8.16.0(@typescript-eslint/parser@8.16.0(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(typescript@5.5.2) + '@typescript-eslint/parser': + specifier: ^8.8.1 + version: 8.16.0(eslint@8.57.0)(typescript@5.5.2) + '@web/dev-server': + specifier: ^0.4.6 + version: 0.4.6 + axios: + specifier: ^1.7.7 + version: 1.7.8 + babel-minify: + specifier: ^0.5.1 + version: 0.5.2 + commitizen: + specifier: ^4.3.1 + version: 4.3.1(@types/node@18.19.28)(typescript@5.5.2) + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + cross-fetch: + specifier: ^4.0.0 + version: 4.0.0 + cz-conventional-changelog: + specifier: 3.3.0 + version: 3.3.0(@types/node@18.19.28)(typescript@5.5.2) + esbuild: + specifier: ^0.24.0 + version: 0.24.0 + esbuild-loader: + specifier: ^4.2.2 + version: 4.2.2(webpack@5.96.1(esbuild@0.24.0)) + eslint: + specifier: ^8.57.0 + version: 8.57.0 + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.57.0) + eslint-plugin-prettier: + specifier: ^5.2.1 + version: 5.2.1(@types/eslint@8.56.7)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.4.1) + express: + specifier: ^5.0.0 + version: 5.0.1 + fastify: + specifier: ^4.26.0 + version: 4.28.1 + fs-extra: + specifier: ^11.2.0 + version: 11.2.0 + fs-teardown: + specifier: ^0.3.0 + version: 0.3.2 + glob: + specifier: ^11.0.0 + version: 11.0.0 + jsdom: + specifier: ^25.0.1 + version: 25.0.1 + json-bigint: + specifier: ^1.0.0 + version: 1.0.0 + lint-staged: + specifier: ^15.2.10 + version: 15.2.10 + page-with: + specifier: ^0.6.1 + version: 0.6.1(esbuild@0.24.0) + prettier: + specifier: ^3.3.3 + version: 3.4.1 + regenerator-runtime: + specifier: ^0.14.1 + version: 0.14.1 + rimraf: + specifier: ^6.0.1 + version: 6.0.1 + simple-git-hooks: + specifier: ^2.9.0 + version: 2.11.1 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@18.19.28)(typescript@5.5.2) + tsup: + specifier: ^8.3.0 + version: 8.3.5(jiti@1.21.0)(postcss@8.4.38)(typescript@5.5.2)(yaml@2.5.1) + typescript: + specifier: ^5.5.2 + version: 5.5.2 + undici: + specifier: ^6.20.0 + version: 6.21.0 + url-loader: + specifier: ^4.1.1 + version: 4.1.1(webpack@5.96.1(esbuild@0.24.0)) + vitest: + specifier: ^1.2.2 + version: 1.4.0(@types/node@18.19.28)(jsdom@25.0.1)(terser@5.30.1) + vitest-environment-miniflare: + specifier: ^2.14.4 + version: 2.14.4(vitest@1.4.0(@types/node@18.19.28)(jsdom@25.0.1)(terser@5.30.1)) + webpack: + specifier: ^5.95.0 + version: 5.96.1(esbuild@0.24.0) + webpack-http-server: + specifier: ^0.5.0 + version: 0.5.0(esbuild@0.24.0) packages: - /@75lb/deep-merge@1.1.1: + '@75lb/deep-merge@1.1.1': resolution: {integrity: sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw==} engines: {node: '>=12.17'} - dependencies: - lodash.assignwith: 4.2.0 - typical: 7.1.1 - dev: true - /@aashutoshrathi/word-wrap@1.2.6: + '@aashutoshrathi/word-wrap@1.2.6': resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} - dev: true - /@ampproject/remapping@2.3.0: + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - dev: true - /@babel/code-frame@7.24.2: + '@babel/code-frame@7.24.2': resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.24.2 - picocolors: 1.0.0 - dev: true - /@babel/compat-data@7.24.1: + '@babel/compat-data@7.24.1': resolution: {integrity: sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==} engines: {node: '>=6.9.0'} - dev: true - /@babel/core@7.24.3: + '@babel/core@7.24.3': resolution: {integrity: sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==} engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.1 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.3) - '@babel/helpers': 7.24.1 - '@babel/parser': 7.24.1 - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 - '@babel/types': 7.24.0 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/generator@7.24.1: + '@babel/generator@7.24.1': resolution: {integrity: sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - dev: true - /@babel/helper-compilation-targets@7.23.6: + '@babel/helper-compilation-targets@7.23.6': resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.24.1 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.23.0 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: true - /@babel/helper-environment-visitor@7.22.20: + '@babel/helper-environment-visitor@7.22.20': resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-function-name@7.23.0: + '@babel/helper-function-name@7.23.0': resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.0 - dev: true - /@babel/helper-hoist-variables@7.22.5: + '@babel/helper-hoist-variables@7.22.5': resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - dev: true - /@babel/helper-module-imports@7.24.3: + '@babel/helper-module-imports@7.24.3': resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - dev: true - /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.3): + '@babel/helper-module-transforms@7.23.3': resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.3 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - dev: true - /@babel/helper-simple-access@7.22.5: + '@babel/helper-simple-access@7.22.5': resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - dev: true - /@babel/helper-split-export-declaration@7.22.6: + '@babel/helper-split-export-declaration@7.22.6': resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - dev: true - /@babel/helper-string-parser@7.24.1: + '@babel/helper-string-parser@7.24.1': resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-validator-identifier@7.22.20: + '@babel/helper-validator-identifier@7.22.20': resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-validator-option@7.23.5: + '@babel/helper-validator-option@7.23.5': resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helpers@7.24.1: + '@babel/helpers@7.24.1': resolution: {integrity: sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 - '@babel/types': 7.24.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/highlight@7.24.2: + '@babel/highlight@7.24.2': resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.0 - dev: true - /@babel/parser@7.24.1: + '@babel/parser@7.24.1': resolution: {integrity: sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==} engines: {node: '>=6.0.0'} hasBin: true - dependencies: - '@babel/types': 7.24.0 - dev: true - /@babel/template@7.24.0: + '@babel/template@7.24.0': resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.1 - '@babel/types': 7.24.0 - dev: true - /@babel/traverse@7.24.1: + '@babel/traverse@7.24.1': resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.1 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.1 - '@babel/types': 7.24.0 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/types@7.24.0: + '@babel/types@7.24.0': resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - dev: true - /@bundled-es-modules/cookie@2.0.1: + '@bundled-es-modules/cookie@2.0.1': resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} - dependencies: - cookie: 0.7.2 - dev: false - /@bundled-es-modules/statuses@1.0.1: + '@bundled-es-modules/statuses@1.0.1': resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} - dependencies: - statuses: 2.0.1 - dev: false - /@bundled-es-modules/tough-cookie@0.1.6: + '@bundled-es-modules/tough-cookie@0.1.6': resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} - dependencies: - '@types/tough-cookie': 4.0.5 - tough-cookie: 4.1.4 - dev: false - /@cloudflare/workers-types@4.20240329.0: + '@cloudflare/workers-types@4.20240329.0': resolution: {integrity: sha512-AbzgvSQjG8Nci4xxQEcjTTVjiWXgOQnFIbIHtEZXteHiMGDXMWGegjWBo5JHGsZCq+U5V/SD5EnlypQnUQEoig==} - dev: true - /@commitlint/cli@18.6.1(@types/node@18.19.28)(typescript@5.5.2): + '@commitlint/cli@18.6.1': resolution: {integrity: sha512-5IDE0a+lWGdkOvKH892HHAZgbAjcj1mT5QrfA/SVbLJV/BbBMGyKN0W5mhgjekPJJwEQdVNvhl9PwUacY58Usw==} engines: {node: '>=v18'} hasBin: true - dependencies: - '@commitlint/format': 18.6.1 - '@commitlint/lint': 18.6.1 - '@commitlint/load': 18.6.1(@types/node@18.19.28)(typescript@5.5.2) - '@commitlint/read': 18.6.1 - '@commitlint/types': 18.6.1 - execa: 5.1.1 - lodash.isfunction: 3.0.9 - resolve-from: 5.0.0 - resolve-global: 1.0.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - typescript - dev: true - /@commitlint/config-conventional@18.6.3: + '@commitlint/config-conventional@18.6.3': resolution: {integrity: sha512-8ZrRHqF6je+TRaFoJVwszwnOXb/VeYrPmTwPhf0WxpzpGTcYy1p0SPyZ2eRn/sRi/obnWAcobtDAq6+gJQQNhQ==} engines: {node: '>=v18'} - dependencies: - '@commitlint/types': 18.6.1 - conventional-changelog-conventionalcommits: 7.0.2 - dev: true - /@commitlint/config-validator@18.6.1: + '@commitlint/config-validator@18.6.1': resolution: {integrity: sha512-05uiToBVfPhepcQWE1ZQBR/Io3+tb3gEotZjnI4tTzzPk16NffN6YABgwFQCLmzZefbDcmwWqJWc2XT47q7Znw==} engines: {node: '>=v18'} - dependencies: - '@commitlint/types': 18.6.1 - ajv: 8.12.0 - dev: true - /@commitlint/config-validator@19.0.3: + '@commitlint/config-validator@19.0.3': resolution: {integrity: sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==} engines: {node: '>=v18'} - requiresBuild: true - dependencies: - '@commitlint/types': 19.0.3 - ajv: 8.12.0 - dev: true - optional: true - /@commitlint/ensure@18.6.1: + '@commitlint/ensure@18.6.1': resolution: {integrity: sha512-BPm6+SspyxQ7ZTsZwXc7TRQL5kh5YWt3euKmEIBZnocMFkJevqs3fbLRb8+8I/cfbVcAo4mxRlpTPfz8zX7SnQ==} engines: {node: '>=v18'} - dependencies: - '@commitlint/types': 18.6.1 - lodash.camelcase: 4.3.0 - lodash.kebabcase: 4.1.1 - lodash.snakecase: 4.1.1 - lodash.startcase: 4.4.0 - lodash.upperfirst: 4.3.1 - dev: true - /@commitlint/execute-rule@18.6.1: + '@commitlint/execute-rule@18.6.1': resolution: {integrity: sha512-7s37a+iWyJiGUeMFF6qBlyZciUkF8odSAnHijbD36YDctLhGKoYltdvuJ/AFfRm6cBLRtRk9cCVPdsEFtt/2rg==} engines: {node: '>=v18'} - dev: true - /@commitlint/execute-rule@19.0.0: + '@commitlint/execute-rule@19.0.0': resolution: {integrity: sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==} engines: {node: '>=v18'} - requiresBuild: true - dev: true - optional: true - /@commitlint/format@18.6.1: + '@commitlint/format@18.6.1': resolution: {integrity: sha512-K8mNcfU/JEFCharj2xVjxGSF+My+FbUHoqR+4GqPGrHNqXOGNio47ziiR4HQUPKtiNs05o8/WyLBoIpMVOP7wg==} engines: {node: '>=v18'} - dependencies: - '@commitlint/types': 18.6.1 - chalk: 4.1.2 - dev: true - /@commitlint/is-ignored@18.6.1: + '@commitlint/is-ignored@18.6.1': resolution: {integrity: sha512-MOfJjkEJj/wOaPBw5jFjTtfnx72RGwqYIROABudOtJKW7isVjFe9j0t8xhceA02QebtYf4P/zea4HIwnXg8rvA==} engines: {node: '>=v18'} - dependencies: - '@commitlint/types': 18.6.1 - semver: 7.6.0 - dev: true - /@commitlint/lint@18.6.1: + '@commitlint/lint@18.6.1': resolution: {integrity: sha512-8WwIFo3jAuU+h1PkYe5SfnIOzp+TtBHpFr4S8oJWhu44IWKuVx6GOPux3+9H1iHOan/rGBaiacicZkMZuluhfQ==} engines: {node: '>=v18'} - dependencies: - '@commitlint/is-ignored': 18.6.1 - '@commitlint/parse': 18.6.1 - '@commitlint/rules': 18.6.1 - '@commitlint/types': 18.6.1 - dev: true - /@commitlint/load@18.6.1(@types/node@18.19.28)(typescript@5.5.2): + '@commitlint/load@18.6.1': resolution: {integrity: sha512-p26x8734tSXUHoAw0ERIiHyW4RaI4Bj99D8YgUlVV9SedLf8hlWAfyIFhHRIhfPngLlCe0QYOdRKYFt8gy56TA==} engines: {node: '>=v18'} - dependencies: - '@commitlint/config-validator': 18.6.1 - '@commitlint/execute-rule': 18.6.1 - '@commitlint/resolve-extends': 18.6.1 - '@commitlint/types': 18.6.1 - chalk: 4.1.2 - cosmiconfig: 8.3.6(typescript@5.5.2) - cosmiconfig-typescript-loader: 5.0.0(@types/node@18.19.28)(cosmiconfig@8.3.6)(typescript@5.5.2) - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - lodash.uniq: 4.5.0 - resolve-from: 5.0.0 - transitivePeerDependencies: - - '@types/node' - - typescript - dev: true - /@commitlint/load@19.2.0(@types/node@18.19.28)(typescript@5.5.2): + '@commitlint/load@19.2.0': resolution: {integrity: sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==} engines: {node: '>=v18'} - requiresBuild: true - dependencies: - '@commitlint/config-validator': 19.0.3 - '@commitlint/execute-rule': 19.0.0 - '@commitlint/resolve-extends': 19.1.0 - '@commitlint/types': 19.0.3 - chalk: 5.3.0 - cosmiconfig: 9.0.0(typescript@5.5.2) - cosmiconfig-typescript-loader: 5.0.0(@types/node@18.19.28)(cosmiconfig@9.0.0)(typescript@5.5.2) - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - lodash.uniq: 4.5.0 - transitivePeerDependencies: - - '@types/node' - - typescript - dev: true - optional: true - /@commitlint/message@18.6.1: + '@commitlint/message@18.6.1': resolution: {integrity: sha512-VKC10UTMLcpVjMIaHHsY1KwhuTQtdIKPkIdVEwWV+YuzKkzhlI3aNy6oo1eAN6b/D2LTtZkJe2enHmX0corYRw==} engines: {node: '>=v18'} - dev: true - /@commitlint/parse@18.6.1: + '@commitlint/parse@18.6.1': resolution: {integrity: sha512-eS/3GREtvVJqGZrwAGRwR9Gdno3YcZ6Xvuaa+vUF8j++wsmxrA2En3n0ccfVO2qVOLJC41ni7jSZhQiJpMPGOQ==} engines: {node: '>=v18'} - dependencies: - '@commitlint/types': 18.6.1 - conventional-changelog-angular: 7.0.0 - conventional-commits-parser: 5.0.0 - dev: true - /@commitlint/read@18.6.1: + '@commitlint/read@18.6.1': resolution: {integrity: sha512-ia6ODaQFzXrVul07ffSgbZGFajpe8xhnDeLIprLeyfz3ivQU1dIoHp7yz0QIorZ6yuf4nlzg4ZUkluDrGN/J/w==} engines: {node: '>=v18'} - dependencies: - '@commitlint/top-level': 18.6.1 - '@commitlint/types': 18.6.1 - git-raw-commits: 2.0.11 - minimist: 1.2.8 - dev: true - /@commitlint/resolve-extends@18.6.1: + '@commitlint/resolve-extends@18.6.1': resolution: {integrity: sha512-ifRAQtHwK+Gj3Bxj/5chhc4L2LIc3s30lpsyW67yyjsETR6ctHAHRu1FSpt0KqahK5xESqoJ92v6XxoDRtjwEQ==} engines: {node: '>=v18'} - dependencies: - '@commitlint/config-validator': 18.6.1 - '@commitlint/types': 18.6.1 - import-fresh: 3.3.0 - lodash.mergewith: 4.6.2 - resolve-from: 5.0.0 - resolve-global: 1.0.0 - dev: true - /@commitlint/resolve-extends@19.1.0: + '@commitlint/resolve-extends@19.1.0': resolution: {integrity: sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==} engines: {node: '>=v18'} - requiresBuild: true - dependencies: - '@commitlint/config-validator': 19.0.3 - '@commitlint/types': 19.0.3 - global-directory: 4.0.1 - import-meta-resolve: 4.0.0 - lodash.mergewith: 4.6.2 - resolve-from: 5.0.0 - dev: true - optional: true - /@commitlint/rules@18.6.1: + '@commitlint/rules@18.6.1': resolution: {integrity: sha512-kguM6HxZDtz60v/zQYOe0voAtTdGybWXefA1iidjWYmyUUspO1zBPQEmJZ05/plIAqCVyNUTAiRPWIBKLCrGew==} engines: {node: '>=v18'} - dependencies: - '@commitlint/ensure': 18.6.1 - '@commitlint/message': 18.6.1 - '@commitlint/to-lines': 18.6.1 - '@commitlint/types': 18.6.1 - execa: 5.1.1 - dev: true - /@commitlint/to-lines@18.6.1: + '@commitlint/to-lines@18.6.1': resolution: {integrity: sha512-Gl+orGBxYSNphx1+83GYeNy5N0dQsHBQ9PJMriaLQDB51UQHCVLBT/HBdOx5VaYksivSf5Os55TLePbRLlW50Q==} engines: {node: '>=v18'} - dev: true - /@commitlint/top-level@18.6.1: + '@commitlint/top-level@18.6.1': resolution: {integrity: sha512-HyiHQZUTf0+r0goTCDs/bbVv/LiiQ7AVtz6KIar+8ZrseB9+YJAIo8HQ2IC2QT1y3N1lbW6OqVEsTHjbT6hGSw==} engines: {node: '>=v18'} - dependencies: - find-up: 5.0.0 - dev: true - /@commitlint/types@18.6.1: + '@commitlint/types@18.6.1': resolution: {integrity: sha512-gwRLBLra/Dozj2OywopeuHj2ac26gjGkz2cZ+86cTJOdtWfiRRr4+e77ZDAGc6MDWxaWheI+mAV5TLWWRwqrFg==} engines: {node: '>=v18'} - dependencies: - chalk: 4.1.2 - dev: true - /@commitlint/types@19.0.3: + '@commitlint/types@19.0.3': resolution: {integrity: sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==} engines: {node: '>=v18'} - requiresBuild: true - dependencies: - '@types/conventional-commits-parser': 5.0.0 - chalk: 5.3.0 - dev: true - optional: true - /@cspotcode/source-map-support@0.8.1: + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: true - /@esbuild/aix-ppc64@0.20.2: + '@esbuild/aix-ppc64@0.20.2': resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] - requiresBuild: true - dev: true - optional: true - /@esbuild/aix-ppc64@0.21.5: + '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] - requiresBuild: true - dev: true - optional: true - /@esbuild/aix-ppc64@0.24.0: + '@esbuild/aix-ppc64@0.24.0': resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm64@0.20.2: + '@esbuild/android-arm64@0.20.2': resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} engines: {node: '>=12'} cpu: [arm64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm64@0.21.5: + '@esbuild/android-arm64@0.21.5': resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm64@0.24.0: + '@esbuild/android-arm64@0.24.0': resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} engines: {node: '>=18'} cpu: [arm64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.20.2: + '@esbuild/android-arm@0.20.2': resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} engines: {node: '>=12'} cpu: [arm] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.21.5: + '@esbuild/android-arm@0.21.5': resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.24.0: + '@esbuild/android-arm@0.24.0': resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} engines: {node: '>=18'} cpu: [arm] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.20.2: + '@esbuild/android-x64@0.20.2': resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} engines: {node: '>=12'} cpu: [x64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.21.5: + '@esbuild/android-x64@0.21.5': resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.24.0: + '@esbuild/android-x64@0.24.0': resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} engines: {node: '>=18'} cpu: [x64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.20.2: + '@esbuild/darwin-arm64@0.20.2': resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.21.5: + '@esbuild/darwin-arm64@0.21.5': resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.24.0: + '@esbuild/darwin-arm64@0.24.0': resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.20.2: + '@esbuild/darwin-x64@0.20.2': resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.21.5: + '@esbuild/darwin-x64@0.21.5': resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.24.0: + '@esbuild/darwin-x64@0.24.0': resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.20.2: + '@esbuild/freebsd-arm64@0.20.2': resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.21.5: + '@esbuild/freebsd-arm64@0.21.5': resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.24.0: + '@esbuild/freebsd-arm64@0.24.0': resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.20.2: + '@esbuild/freebsd-x64@0.20.2': resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.21.5: + '@esbuild/freebsd-x64@0.21.5': resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.24.0: + '@esbuild/freebsd-x64@0.24.0': resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.20.2: + '@esbuild/linux-arm64@0.20.2': resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.21.5: + '@esbuild/linux-arm64@0.21.5': resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.24.0: + '@esbuild/linux-arm64@0.24.0': resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.20.2: + '@esbuild/linux-arm@0.20.2': resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} engines: {node: '>=12'} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.21.5: + '@esbuild/linux-arm@0.21.5': resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.24.0: + '@esbuild/linux-arm@0.24.0': resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.20.2: + '@esbuild/linux-ia32@0.20.2': resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} engines: {node: '>=12'} cpu: [ia32] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.21.5: + '@esbuild/linux-ia32@0.21.5': resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.24.0: + '@esbuild/linux-ia32@0.24.0': resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.20.2: + '@esbuild/linux-loong64@0.20.2': resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.21.5: + '@esbuild/linux-loong64@0.21.5': resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.24.0: + '@esbuild/linux-loong64@0.24.0': resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.20.2: + '@esbuild/linux-mips64el@0.20.2': resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.21.5: + '@esbuild/linux-mips64el@0.21.5': resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.24.0: + '@esbuild/linux-mips64el@0.24.0': resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.20.2: + '@esbuild/linux-ppc64@0.20.2': resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.21.5: + '@esbuild/linux-ppc64@0.21.5': resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.24.0: + '@esbuild/linux-ppc64@0.24.0': resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.20.2: + '@esbuild/linux-riscv64@0.20.2': resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.21.5: + '@esbuild/linux-riscv64@0.21.5': resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.24.0: + '@esbuild/linux-riscv64@0.24.0': resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.20.2: + '@esbuild/linux-s390x@0.20.2': resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.21.5: + '@esbuild/linux-s390x@0.21.5': resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.24.0: + '@esbuild/linux-s390x@0.24.0': resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.20.2: + '@esbuild/linux-x64@0.20.2': resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.21.5: + '@esbuild/linux-x64@0.21.5': resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.24.0: + '@esbuild/linux-x64@0.24.0': resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.20.2: + '@esbuild/netbsd-x64@0.20.2': resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.21.5: + '@esbuild/netbsd-x64@0.21.5': resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.24.0: + '@esbuild/netbsd-x64@0.24.0': resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-arm64@0.24.0: + '@esbuild/openbsd-arm64@0.24.0': resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.20.2: + '@esbuild/openbsd-x64@0.20.2': resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.21.5: + '@esbuild/openbsd-x64@0.21.5': resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.24.0: + '@esbuild/openbsd-x64@0.24.0': resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.20.2: + '@esbuild/sunos-x64@0.20.2': resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.21.5: + '@esbuild/sunos-x64@0.21.5': resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.24.0: + '@esbuild/sunos-x64@0.24.0': resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.20.2: + '@esbuild/win32-arm64@0.20.2': resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.21.5: + '@esbuild/win32-arm64@0.21.5': resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.24.0: + '@esbuild/win32-arm64@0.24.0': resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.20.2: + '@esbuild/win32-ia32@0.20.2': resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.21.5: + '@esbuild/win32-ia32@0.21.5': resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.24.0: + '@esbuild/win32-ia32@0.24.0': resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.20.2: + '@esbuild/win32-x64@0.20.2': resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.21.5: + '@esbuild/win32-x64@0.21.5': resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.24.0: + '@esbuild/win32-x64@0.24.0': resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} engines: {node: '>=18'} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 - dev: true - /@eslint-community/regexpp@4.11.0: + '@eslint-community/regexpp@4.11.0': resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - /@eslint/eslintrc@2.1.4: + '@eslint/eslintrc@2.1.4': resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - /@eslint/js@8.57.0: + '@eslint/js@8.57.0': resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - /@fastify/ajv-compiler@3.6.0: + '@fastify/ajv-compiler@3.6.0': resolution: {integrity: sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==} - dependencies: - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - fast-uri: 2.4.0 - dev: true - /@fastify/busboy@2.1.1: + '@fastify/busboy@2.1.1': resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} - dev: true - /@fastify/error@3.4.1: + '@fastify/error@3.4.1': resolution: {integrity: sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==} - dev: true - /@fastify/fast-json-stringify-compiler@4.3.0: + '@fastify/fast-json-stringify-compiler@4.3.0': resolution: {integrity: sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==} - dependencies: - fast-json-stringify: 5.16.1 - dev: true - /@fastify/merge-json-schemas@0.1.1: + '@fastify/merge-json-schemas@0.1.1': resolution: {integrity: sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==} - dependencies: - fast-deep-equal: 3.1.3 - dev: true - /@fastify/websocket@8.3.1: + '@fastify/websocket@8.3.1': resolution: {integrity: sha512-hsQYHHJme/kvP3ZS4v/WMUznPBVeeQHHwAoMy1LiN6m/HuPfbdXq1MBJ4Nt8qX1YI+eVbog4MnOsU7MTozkwYA==} - dependencies: - fastify-plugin: 4.5.1 - ws: 8.17.1 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: true - /@humanwhocodes/config-array@0.11.14: + '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} deprecated: Use @eslint/config-array instead - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - /@humanwhocodes/module-importer@1.0.1: + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - dev: true - /@humanwhocodes/object-schema@2.0.3: + '@humanwhocodes/object-schema@2.0.3': resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - dev: true - /@iarna/toml@2.2.5: + '@iarna/toml@2.2.5': resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} - dev: true - /@inquirer/confirm@5.0.2(@types/node@18.19.28): + '@inquirer/confirm@5.0.2': resolution: {integrity: sha512-KJLUHOaKnNCYzwVbryj3TNBxyZIrr56fR5N45v6K9IPrbT6B7DcudBMfylkV1A8PUdJE15mybkEQyp2/ZUpxUA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' - dependencies: - '@inquirer/core': 10.1.0(@types/node@18.19.28) - '@inquirer/type': 3.0.1(@types/node@18.19.28) - '@types/node': 18.19.28 - dev: false - /@inquirer/core@10.1.0(@types/node@18.19.28): + '@inquirer/core@10.1.0': resolution: {integrity: sha512-I+ETk2AL+yAVbvuKx5AJpQmoaWhpiTFOg/UJb7ZkMAK4blmtG8ATh5ct+T/8xNld0CZG/2UhtkdMwpgvld92XQ==} engines: {node: '>=18'} - dependencies: - '@inquirer/figures': 1.0.8 - '@inquirer/type': 3.0.1(@types/node@18.19.28) - ansi-escapes: 4.3.2 - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.2 - transitivePeerDependencies: - - '@types/node' - dev: false - /@inquirer/figures@1.0.8: + '@inquirer/figures@1.0.8': resolution: {integrity: sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg==} engines: {node: '>=18'} - dev: false - /@inquirer/type@3.0.1(@types/node@18.19.28): + '@inquirer/type@3.0.1': resolution: {integrity: sha512-+ksJMIy92sOAiAccGpcKZUc3bYO07cADnscIxHBknEm3uNts3movSmBofc1908BNy5edKscxYeAdaX1NXkHS6A==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' - dependencies: - '@types/node': 18.19.28 - dev: false - /@isaacs/cliui@8.0.2: + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - dependencies: - string-width: 5.1.2 - string-width-cjs: /string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: /strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi@7.0.0 - dev: true - /@jest/schemas@29.6.3: + '@jest/schemas@29.6.3': resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@sinclair/typebox': 0.27.8 - dev: true - /@jridgewell/gen-mapping@0.3.5: + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.25 - dev: true - /@jridgewell/resolve-uri@3.1.2: + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - dev: true - /@jridgewell/set-array@1.2.1: + '@jridgewell/set-array@1.2.1': resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - dev: true - /@jridgewell/source-map@0.3.6: + '@jridgewell/source-map@0.3.6': resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - dev: true - /@jridgewell/sourcemap-codec@1.4.15: + '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true - /@jridgewell/trace-mapping@0.3.25: + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /@jridgewell/trace-mapping@0.3.9: + '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /@miniflare/cache@2.14.4: + '@miniflare/cache@2.14.4': resolution: {integrity: sha512-ayzdjhcj+4mjydbNK7ZGDpIXNliDbQY4GPcY2KrYw0v1OSUdj5kZUkygD09fqoGRfAks0d91VelkyRsAXX8FQA==} engines: {node: '>=16.13'} - dependencies: - '@miniflare/core': 2.14.4 - '@miniflare/shared': 2.14.4 - http-cache-semantics: 4.1.1 - undici: 5.28.4 - dev: true - /@miniflare/core@2.14.4: + '@miniflare/core@2.14.4': resolution: {integrity: sha512-FMmZcC1f54YpF4pDWPtdQPIO8NXfgUxCoR9uyrhxKJdZu7M6n8QKopPVNuaxR40jcsdxb7yKoQoFWnHfzJD9GQ==} engines: {node: '>=16.13'} - dependencies: - '@iarna/toml': 2.2.5 - '@miniflare/queues': 2.14.4 - '@miniflare/shared': 2.14.4 - '@miniflare/watcher': 2.14.4 - busboy: 1.6.0 - dotenv: 10.0.0 - kleur: 4.1.5 - set-cookie-parser: 2.6.0 - undici: 5.28.4 - urlpattern-polyfill: 4.0.3 - dev: true - /@miniflare/d1@2.14.4: + '@miniflare/d1@2.14.4': resolution: {integrity: sha512-pMBVq9XWxTDdm+RRCkfXZP+bREjPg1JC8s8C0JTovA9OGmLQXqGTnFxIaS9vf1d8k3uSUGhDzPTzHr0/AUW1gA==} engines: {node: '>=16.7'} - dependencies: - '@miniflare/core': 2.14.4 - '@miniflare/shared': 2.14.4 - dev: true - /@miniflare/durable-objects@2.14.4: + '@miniflare/durable-objects@2.14.4': resolution: {integrity: sha512-+JrmHP6gHHrjxV8S3axVw5lGHLgqmAGdcO/1HJUPswAyJEd3Ah2YnKhpo+bNmV4RKJCtEq9A2hbtVjBTD2YzwA==} engines: {node: '>=16.13'} - dependencies: - '@miniflare/core': 2.14.4 - '@miniflare/shared': 2.14.4 - '@miniflare/storage-memory': 2.14.4 - undici: 5.28.4 - dev: true - /@miniflare/html-rewriter@2.14.4: + '@miniflare/html-rewriter@2.14.4': resolution: {integrity: sha512-GB/vZn7oLbnhw+815SGF+HU5EZqSxbhIa3mu2L5MzZ2q5VOD5NHC833qG8c2GzDPhIaZ99ITY+ZJmbR4d+4aNQ==} engines: {node: '>=16.13'} - dependencies: - '@miniflare/core': 2.14.4 - '@miniflare/shared': 2.14.4 - html-rewriter-wasm: 0.4.1 - undici: 5.28.4 - dev: true - /@miniflare/kv@2.14.4: + '@miniflare/kv@2.14.4': resolution: {integrity: sha512-QlERH0Z+klwLg0xw+/gm2yC34Nnr/I0GcQ+ASYqXeIXBwjqOtMBa3YVQnocaD+BPy/6TUtSpOAShHsEj76R2uw==} engines: {node: '>=16.13'} - dependencies: - '@miniflare/shared': 2.14.4 - dev: true - /@miniflare/queues@2.14.4: + '@miniflare/queues@2.14.4': resolution: {integrity: sha512-aXQ5Ik8Iq1KGMBzGenmd6Js/jJgqyYvjom95/N9GptCGpiVWE5F0XqC1SL5rCwURbHN+aWY191o8XOFyY2nCUA==} engines: {node: '>=16.7'} - dependencies: - '@miniflare/shared': 2.14.4 - dev: true - /@miniflare/r2@2.14.4: + '@miniflare/r2@2.14.4': resolution: {integrity: sha512-4ctiZWh7Ty7LB3brUjmbRiGMqwyDZgABYaczDtUidblo2DxX4JZPnJ/ZAyxMPNJif32kOJhcg6arC2hEthR9Sw==} engines: {node: '>=16.13'} - dependencies: - '@miniflare/core': 2.14.4 - '@miniflare/shared': 2.14.4 - undici: 5.28.4 - dev: true - /@miniflare/runner-vm@2.14.4: + '@miniflare/runner-vm@2.14.4': resolution: {integrity: sha512-Nog0bB9SVhPbZAkTWfO4lpLAUsBXKEjlb4y+y66FJw77mPlmPlVdpjElCvmf8T3VN/pqh83kvELGM+/fucMf4g==} engines: {node: '>=16.13'} - dependencies: - '@miniflare/shared': 2.14.4 - dev: true - /@miniflare/shared-test-environment@2.14.4: + '@miniflare/shared-test-environment@2.14.4': resolution: {integrity: sha512-FdU2/8wEd00vIu+MfofLiHcfZWz+uCbE2VTL85KpyYfBsNGAbgRtzFMpOXdoXLqQfRu6MBiRwWpb2FbMrBzi7g==} engines: {node: '>=16.13'} - dependencies: - '@cloudflare/workers-types': 4.20240329.0 - '@miniflare/cache': 2.14.4 - '@miniflare/core': 2.14.4 - '@miniflare/d1': 2.14.4 - '@miniflare/durable-objects': 2.14.4 - '@miniflare/html-rewriter': 2.14.4 - '@miniflare/kv': 2.14.4 - '@miniflare/queues': 2.14.4 - '@miniflare/r2': 2.14.4 - '@miniflare/shared': 2.14.4 - '@miniflare/sites': 2.14.4 - '@miniflare/storage-memory': 2.14.4 - '@miniflare/web-sockets': 2.14.4 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: true - /@miniflare/shared@2.14.4: + '@miniflare/shared@2.14.4': resolution: {integrity: sha512-upl4RSB3hyCnITOFmRZjJj4A72GmkVrtfZTilkdq5Qe5TTlzsjVeDJp7AuNUM9bM8vswRo+N5jOiot6O4PVwwQ==} engines: {node: '>=16.13'} - dependencies: - '@types/better-sqlite3': 7.6.9 - kleur: 4.1.5 - npx-import: 1.1.4 - picomatch: 2.3.1 - dev: true - /@miniflare/sites@2.14.4: + '@miniflare/sites@2.14.4': resolution: {integrity: sha512-O5npWopi+fw9W9Ki0gy99nuBbgDva/iXy8PDC4dAXDB/pz45nISDqldabk0rL2t4W2+lY6LXKzdOw+qJO1GQTA==} engines: {node: '>=16.13'} - dependencies: - '@miniflare/kv': 2.14.4 - '@miniflare/shared': 2.14.4 - '@miniflare/storage-file': 2.14.4 - dev: true - /@miniflare/storage-file@2.14.4: + '@miniflare/storage-file@2.14.4': resolution: {integrity: sha512-JxcmX0hXf4cB0cC9+s6ZsgYCq+rpyUKRPCGzaFwymWWplrO3EjPVxKCcMxG44jsdgsII6EZihYUN2J14wwCT7A==} engines: {node: '>=16.13'} - dependencies: - '@miniflare/shared': 2.14.4 - '@miniflare/storage-memory': 2.14.4 - dev: true - /@miniflare/storage-memory@2.14.4: + '@miniflare/storage-memory@2.14.4': resolution: {integrity: sha512-9jB5BqNkMZ3SFjbPFeiVkLi1BuSahMhc/W1Y9H0W89qFDrrD+z7EgRgDtHTG1ZRyi9gIlNtt9qhkO1B6W2qb2A==} engines: {node: '>=16.13'} - dependencies: - '@miniflare/shared': 2.14.4 - dev: true - /@miniflare/watcher@2.14.4: + '@miniflare/watcher@2.14.4': resolution: {integrity: sha512-PYn05ET2USfBAeXF6NZfWl0O32KVyE8ncQ/ngysrh3hoIV7l3qGGH7ubeFx+D8VWQ682qYhwGygUzQv2j1tGGg==} engines: {node: '>=16.13'} - dependencies: - '@miniflare/shared': 2.14.4 - dev: true - /@miniflare/web-sockets@2.14.4: + '@miniflare/web-sockets@2.14.4': resolution: {integrity: sha512-stTxvLdJ2IcGOs76AnvGYAzGvx8JvQPRxC5DW0P5zdAAnhL33noqb5LKdPt3P37BKp9FzBKZHuihQI9oVqwm0g==} engines: {node: '>=16.13'} - dependencies: - '@miniflare/core': 2.14.4 - '@miniflare/shared': 2.14.4 - undici: 5.28.4 - ws: 8.17.1 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: true - /@mswjs/interceptors@0.37.1: - resolution: {integrity: sha512-SvE+tSpcX884RJrPCskXxoS965Ky/pYABDEhWW6oeSRhpUDLrS5nTvT5n1LLSDVDYvty4imVmXsy+3/ROVuknA==} + '@mswjs/interceptors@0.37.3': + resolution: {integrity: sha512-USvgCL/uOGFtVa6SVyRrC8kIAedzRohxIXN5LISlg5C5vLZCn7dgMFVSNhSF9cuBEFrm/O2spDWEZeMnw4ZXYg==} engines: {node: '>=18'} - dependencies: - '@open-draft/deferred-promise': 2.2.0 - '@open-draft/logger': 0.3.0 - '@open-draft/until': 2.1.0 - is-node-process: 1.2.0 - outvariant: 1.4.3 - strict-event-emitter: 0.5.1 - dev: false - /@nodelib/fs.scandir@2.1.5: + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: + '@nodelib/fs.stat@2.0.5': resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - dev: true - /@nodelib/fs.walk@1.2.8: + '@nodelib/fs.walk@1.2.8': resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 - dev: true - /@open-draft/deferred-promise@2.2.0: + '@open-draft/deferred-promise@2.2.0': resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} - /@open-draft/logger@0.3.0: + '@open-draft/logger@0.3.0': resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} - dependencies: - is-node-process: 1.2.0 - outvariant: 1.4.3 - dev: false - /@open-draft/test-server@0.4.2: + '@open-draft/test-server@0.4.2': resolution: {integrity: sha512-J9wbdQkPx5WKcDNtgfnXsx5ew4UJd6BZyGr89YlHeaUkOShkO2iO5QIyCCsG4qpjIvr2ZTkEYJA9ujOXXyO6Pg==} - dependencies: - '@types/body-parser': 1.19.5 - '@types/cors': 2.8.17 - '@types/express': 4.17.21 - cors: 2.8.5 - express: 4.19.2 - outvariant: 1.4.3 - socket.io: 4.7.5 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - /@open-draft/until@2.1.0: + '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - /@ossjs/release@0.8.1: + '@ossjs/release@0.8.1': resolution: {integrity: sha512-gApVH7M47Mkh9GNMpd/LJi72KlCUcl/t0lbTP082APlHIQUzyQObcMyfLOjEwRdxyyYJtKlbTMzoDf/+NNIIiQ==} hasBin: true - dependencies: - '@open-draft/deferred-promise': 2.2.0 - '@open-draft/until': 2.1.0 - '@types/conventional-commits-parser': 3.0.6 - '@types/issue-parser': 3.0.5 - '@types/node': 16.18.93 - '@types/node-fetch': 2.6.11 - '@types/rc': 1.2.4 - '@types/registry-auth-token': 4.2.4 - '@types/semver': 7.5.8 - '@types/yargs': 17.0.32 - conventional-commits-parser: 5.0.0 - get-stream: 6.0.1 - git-log-parser: 1.2.0 - issue-parser: 6.0.0 - node-fetch: 2.6.7 - outvariant: 1.4.3 - pino: 7.11.0 - pino-pretty: 7.6.1 - rc: 1.2.8 - registry-auth-token: 4.2.2 - semver: 7.6.0 - yargs: 17.7.2 - transitivePeerDependencies: - - encoding - dev: true - /@pkgjs/parseargs@0.11.0: + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - requiresBuild: true - dev: true - optional: true - /@pkgr/core@0.1.1: + '@pkgr/core@0.1.1': resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - dev: true - /@playwright/test@1.49.0: + '@playwright/test@1.49.0': resolution: {integrity: sha512-DMulbwQURa8rNIQrf94+jPJQ4FmOVdpE5ZppRNvWVjvhC+6sOeo28r8MgIpQRYouXRtt/FCCXU7zn20jnHR4Qw==} engines: {node: '>=18'} hasBin: true - dependencies: - playwright: 1.49.0 - dev: true - /@rollup/plugin-node-resolve@15.3.0(rollup@4.13.2): + '@rollup/plugin-node-resolve@15.3.0': resolution: {integrity: sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1798,16 +1059,8 @@ packages: peerDependenciesMeta: rollup: optional: true - dependencies: - '@rollup/pluginutils': 5.1.3(rollup@4.13.2) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.8 - rollup: 4.13.2 - dev: true - /@rollup/pluginutils@5.1.3(rollup@4.13.2): + '@rollup/pluginutils@5.1.3': resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1815,466 +1068,5248 @@ packages: peerDependenciesMeta: rollup: optional: true - dependencies: - '@types/estree': 1.0.5 - estree-walker: 2.0.2 - picomatch: 4.0.2 - rollup: 4.13.2 - dev: true - /@rollup/rollup-android-arm-eabi@4.13.2: + '@rollup/rollup-android-arm-eabi@4.13.2': resolution: {integrity: sha512-3XFIDKWMFZrMnao1mJhnOT1h2g0169Os848NhhmGweEcfJ4rCi+3yMCOLG4zA61rbJdkcrM/DjVZm9Hg5p5w7g==} cpu: [arm] os: [android] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-android-arm-eabi@4.27.4: + '@rollup/rollup-android-arm-eabi@4.27.4': resolution: {integrity: sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==} cpu: [arm] os: [android] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-android-arm64@4.13.2: + '@rollup/rollup-android-arm64@4.13.2': resolution: {integrity: sha512-GdxxXbAuM7Y/YQM9/TwwP+L0omeE/lJAR1J+olu36c3LqqZEBdsIWeQ91KBe6nxwOnb06Xh7JS2U5ooWU5/LgQ==} cpu: [arm64] os: [android] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-android-arm64@4.27.4: + '@rollup/rollup-android-arm64@4.27.4': resolution: {integrity: sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==} cpu: [arm64] os: [android] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-darwin-arm64@4.13.2: + '@rollup/rollup-darwin-arm64@4.13.2': resolution: {integrity: sha512-mCMlpzlBgOTdaFs83I4XRr8wNPveJiJX1RLfv4hggyIVhfB5mJfN4P8Z6yKh+oE4Luz+qq1P3kVdWrCKcMYrrA==} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-darwin-arm64@4.27.4: + '@rollup/rollup-darwin-arm64@4.27.4': resolution: {integrity: sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-darwin-x64@4.13.2: + '@rollup/rollup-darwin-x64@4.13.2': resolution: {integrity: sha512-yUoEvnH0FBef/NbB1u6d3HNGyruAKnN74LrPAfDQL3O32e3k3OSfLrPgSJmgb3PJrBZWfPyt6m4ZhAFa2nZp2A==} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-darwin-x64@4.27.4: + '@rollup/rollup-darwin-x64@4.27.4': resolution: {integrity: sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-freebsd-arm64@4.27.4: + '@rollup/rollup-freebsd-arm64@4.27.4': resolution: {integrity: sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==} cpu: [arm64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-freebsd-x64@4.27.4: + '@rollup/rollup-freebsd-x64@4.27.4': resolution: {integrity: sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==} cpu: [x64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.13.2: + '@rollup/rollup-linux-arm-gnueabihf@4.13.2': resolution: {integrity: sha512-GYbLs5ErswU/Xs7aGXqzc3RrdEjKdmoCrgzhJWyFL0r5fL3qd1NPcDKDowDnmcoSiGJeU68/Vy+OMUluRxPiLQ==} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.27.4: + '@rollup/rollup-linux-arm-gnueabihf@4.27.4': resolution: {integrity: sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-linux-arm-musleabihf@4.27.4: + '@rollup/rollup-linux-arm-musleabihf@4.27.4': resolution: {integrity: sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-linux-arm64-gnu@4.13.2: + '@rollup/rollup-linux-arm64-gnu@4.13.2': resolution: {integrity: sha512-L1+D8/wqGnKQIlh4Zre9i4R4b4noxzH5DDciyahX4oOz62CphY7WDWqJoQ66zNR4oScLNOqQJfNSIAe/6TPUmQ==} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-linux-arm64-gnu@4.27.4: + '@rollup/rollup-linux-arm64-gnu@4.27.4': resolution: {integrity: sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-linux-arm64-musl@4.13.2: + '@rollup/rollup-linux-arm64-musl@4.13.2': resolution: {integrity: sha512-tK5eoKFkXdz6vjfkSTCupUzCo40xueTOiOO6PeEIadlNBkadH1wNOH8ILCPIl8by/Gmb5AGAeQOFeLev7iZDOA==} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true + + '@rollup/rollup-linux-arm64-musl@4.27.4': + resolution: {integrity: sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.13.2': + resolution: {integrity: sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ==} + cpu: [ppc64le] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.27.4': + resolution: {integrity: sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.13.2': + resolution: {integrity: sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.27.4': + resolution: {integrity: sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.13.2': + resolution: {integrity: sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.27.4': + resolution: {integrity: sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.13.2': + resolution: {integrity: sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.27.4': + resolution: {integrity: sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.13.2': + resolution: {integrity: sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.27.4': + resolution: {integrity: sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.13.2': + resolution: {integrity: sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-arm64-msvc@4.27.4': + resolution: {integrity: sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.13.2': + resolution: {integrity: sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.27.4': + resolution: {integrity: sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.13.2': + resolution: {integrity: sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.27.4': + resolution: {integrity: sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==} + cpu: [x64] + os: [win32] + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@socket.io/component-emitter@3.1.0': + resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/accepts@1.3.7': + resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} + + '@types/better-sqlite3@7.6.9': + resolution: {integrity: sha512-FvktcujPDj9XKMJQWFcl2vVl7OdRIqsSRX9b0acWwTmwLK9CF2eqo/FRcmMLNpugKoX/avA6pb7TorDLmpgTnQ==} + + '@types/body-parser@1.19.5': + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + + '@types/command-line-args@5.2.3': + resolution: {integrity: sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/content-disposition@0.5.8': + resolution: {integrity: sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==} + + '@types/conventional-commits-parser@3.0.6': + resolution: {integrity: sha512-z4crlplLzL9uA5kbE4ZghAf5RbrEr1UL/uNGGgxYbJjI0jRBjuYKuasbo13ANZsSapLTM2DLZk6LDcjemow4qQ==} + + '@types/conventional-commits-parser@5.0.0': + resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==} + + '@types/cookie@0.4.1': + resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} + + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + + '@types/cookies@0.9.0': + resolution: {integrity: sha512-40Zk8qR147RABiQ7NQnBzWzDcjKzNrntB5BAmeGCb2p/MIyOE+4BVvc17wumsUqUw00bJYqoXFHYygQnEFh4/Q==} + + '@types/cors@2.8.17': + resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@8.56.7': + resolution: {integrity: sha512-SjDvI/x3zsZnOkYZ3lCt9lOZWZLB2jIlNKz+LBgCtDurK0JZcwucxYHn1w2BJkD34dgX9Tjnak0txtq4WTggEA==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/express-serve-static-core@4.17.43': + resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==} + + '@types/express@4.17.21': + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + + '@types/fs-extra@11.0.4': + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + + '@types/glob@8.1.0': + resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} + + '@types/http-assert@1.5.5': + resolution: {integrity: sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g==} + + '@types/http-errors@2.0.4': + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + + '@types/issue-parser@3.0.5': + resolution: {integrity: sha512-fvOrnb7uS6qRme16tfyxy9SjOgx47Krkt/ilLS7axP3SWtJb9GZlduWX2bAsJOnr1HuCwJh88rCidzCZ1LwuZg==} + + '@types/json-bigint@1.0.4': + resolution: {integrity: sha512-ydHooXLbOmxBbubnA7Eh+RpBzuaIiQjh8WGJYQB50JFGFrdxW7JzVlyEV7fAXw0T2sqJ1ysTneJbiyNLqZRAag==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/jsonfile@6.1.4': + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + + '@types/keygrip@1.0.6': + resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==} + + '@types/koa-compose@3.2.8': + resolution: {integrity: sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==} + + '@types/koa@2.15.0': + resolution: {integrity: sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==} + + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + '@types/mime@4.0.0': + resolution: {integrity: sha512-5eEkJZ/BLvTE3vXGKkWlyTSUVZuzj23Wj8PoyOq2lt5I3CYbiLBOPb3XmCW6QcuOibIUE6emHXHt9E/F/rCa6w==} + deprecated: This is a stub types definition. mime provides its own type definitions, so you do not need this installed. + + '@types/minimatch@5.1.2': + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + + '@types/minimist@1.2.5': + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + + '@types/ms@0.7.34': + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + + '@types/mustache@4.2.5': + resolution: {integrity: sha512-PLwiVvTBg59tGFL/8VpcGvqOu3L4OuveNvPi0EYbWchRdEVP++yRUXJPFl+CApKEq13017/4Nf7aQ5lTtHUNsA==} + + '@types/node-fetch@2.6.11': + resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} + + '@types/node@16.18.93': + resolution: {integrity: sha512-epWuohp6c0bQt0j3RYCiP9x52axHVn+CjS1Rx1VjPwF+ySg8lrigH3yXGs88XqnA+jGM2qnSMuFTsBxft+hO1Q==} + + '@types/node@18.19.28': + resolution: {integrity: sha512-J5cOGD9n4x3YGgVuaND6khm5x07MMdAKkRyXnjVR6KFhLMNh2yONGiP7Z+4+tBOt5mK+GvDTiacTOVGGpqiecw==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/parse5@6.0.3': + resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} + + '@types/qs@6.9.14': + resolution: {integrity: sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/rc@1.2.4': + resolution: {integrity: sha512-xD6+epQoMH79A1uwmJIq25D+XZ57jUzCQ1DGSvs3tGKdx7QDYOOaMh6m5KBkEIW4+Cy5++bZ7NLDfdpNiYVKYA==} + + '@types/registry-auth-token@4.2.4': + resolution: {integrity: sha512-NsLrPRVZBHXXcDa/3vB3Aqla9xZ0bY8GRcD0UlhpMPeNcht540agdE6mOjYB2BZi/tIHxWD5qtRZ6YDZ4hTiqg==} + + '@types/resolve@1.20.2': + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + + '@types/send@0.17.4': + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + + '@types/serve-static@1.15.5': + resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} + + '@types/statuses@2.0.5': + resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + + '@types/uuid@8.3.4': + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.32': + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + + '@typescript-eslint/eslint-plugin@8.16.0': + resolution: {integrity: sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@8.16.0': + resolution: {integrity: sha512-D7DbgGFtsqIPIFMPJwCad9Gfi/hC0PWErRRHFnaCWoEDYi5tQUDiJCTmGUbBiLzjqAck4KcXt9Ayj0CNlIrF+w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@8.16.0': + resolution: {integrity: sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.16.0': + resolution: {integrity: sha512-IqZHGG+g1XCWX9NyqnI/0CX5LL8/18awQqmkZSl2ynn8F76j579dByc0jhfVSnSnhf7zv76mKBQv9HQFKvDCgg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@8.16.0': + resolution: {integrity: sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.16.0': + resolution: {integrity: sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@8.16.0': + resolution: {integrity: sha512-C1zRy/mOL8Pj157GiX4kaw7iyRLKfJXBR3L82hk5kS/GyHcOFmy4YUq/zfZti72I9wnuQtA/+xzft4wCC8PJdA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/visitor-keys@8.16.0': + resolution: {integrity: sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + '@vitest/expect@1.4.0': + resolution: {integrity: sha512-Jths0sWCJZ8BxjKe+p+eKsoqev1/T8lYcrjavEaz8auEJ4jAVY0GwW3JKmdVU4mmNPLPHixh4GNXP7GFtAiDHA==} + + '@vitest/runner@1.4.0': + resolution: {integrity: sha512-EDYVSmesqlQ4RD2VvWo3hQgTJ7ZrFQ2VSJdfiJiArkCerDAGeyF1i6dHkmySqk573jLp6d/cfqCN+7wUB5tLgg==} + + '@vitest/snapshot@1.4.0': + resolution: {integrity: sha512-saAFnt5pPIA5qDGxOHxJ/XxhMFKkUSBJmVt5VgDsAqPTX6JP326r5C/c9UuCMPoXNzuudTPsYDZCoJ5ilpqG2A==} + + '@vitest/spy@1.4.0': + resolution: {integrity: sha512-Ywau/Qs1DzM/8Uc+yA77CwSegizMlcgTJuYGAi0jujOteJOUf1ujunHThYo243KG9nAyWT3L9ifPYZ5+As/+6Q==} + + '@vitest/utils@1.4.0': + resolution: {integrity: sha512-mx3Yd1/6e2Vt/PUC98DcqTirtfxUyAZ32uK82r8rZzbtBeBo+nqgnjx/LvqQdWsrvNtm14VmurNgcf4nqY5gJg==} + + '@web/config-loader@0.3.2': + resolution: {integrity: sha512-Vrjv/FexBGmAdnCYpJKLHX1dfT1UaUdvHmX1JRaWos9OvDf/tFznYJ5SpJwww3Rl87/ewvLSYG7kfsMqEAsizQ==} + engines: {node: '>=18.0.0'} + + '@web/dev-server-core@0.7.4': + resolution: {integrity: sha512-nHSNrJ1J9GjmSceKNHpWRMjvpfE2NTV9EYUffPIr7j0sIV59gK7NI/4+9slotJ/ODXw0+e1gSeJshTOhjjVNxQ==} + engines: {node: '>=18.0.0'} + + '@web/dev-server-rollup@0.6.4': + resolution: {integrity: sha512-sJZfTGCCrdku5xYnQQG51odGI092hKY9YFM0X3Z0tRY3iXKXcYRaLZrErw5KfCxr6g0JRuhe4BBhqXTA5Q2I3Q==} + engines: {node: '>=18.0.0'} + + '@web/dev-server@0.4.6': + resolution: {integrity: sha512-jj/1bcElAy5EZet8m2CcUdzxT+CRvUjIXGh8Lt7vxtthkN9PzY9wlhWx/9WOs5iwlnG1oj0VGo6f/zvbPO0s9w==} + engines: {node: '>=18.0.0'} + hasBin: true + + '@web/parse5-utils@2.1.0': + resolution: {integrity: sha512-GzfK5disEJ6wEjoPwx8AVNwUe9gYIiwc+x//QYxYDAFKUp4Xb1OJAGLc2l2gVrSQmtPGLKrTRcW90Hv4pEq1qA==} + engines: {node: '>=18.0.0'} + + '@webassemblyjs/ast@1.12.1': + resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + + '@webassemblyjs/floating-point-hex-parser@1.11.6': + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + + '@webassemblyjs/helper-api-error@1.11.6': + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + + '@webassemblyjs/helper-buffer@1.12.1': + resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + + '@webassemblyjs/helper-numbers@1.11.6': + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + + '@webassemblyjs/helper-wasm-bytecode@1.11.6': + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + + '@webassemblyjs/helper-wasm-section@1.12.1': + resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + + '@webassemblyjs/ieee754@1.11.6': + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + + '@webassemblyjs/leb128@1.11.6': + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + + '@webassemblyjs/utf8@1.11.6': + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + + '@webassemblyjs/wasm-edit@1.12.1': + resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + + '@webassemblyjs/wasm-gen@1.12.1': + resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + + '@webassemblyjs/wasm-opt@1.12.1': + resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + + '@webassemblyjs/wasm-parser@1.12.1': + resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + + '@webassemblyjs/wast-printer@1.12.1': + resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + abstract-logging@2.0.1: + resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + + acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + args@5.0.3: + resolution: {integrity: sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==} + engines: {node: '>= 6.0.0'} + + argv-formatter@1.0.0: + resolution: {integrity: sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==} + + array-back@3.1.0: + resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} + engines: {node: '>=6'} + + array-back@6.2.2: + resolution: {integrity: sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==} + engines: {node: '>=12.17'} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + array-flatten@3.0.0: + resolution: {integrity: sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==} + + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + + array.prototype.reduce@1.0.7: + resolution: {integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + async@2.6.4: + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + avvio@8.4.0: + resolution: {integrity: sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==} + + axios@1.7.8: + resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} + + babel-helper-evaluate-path@0.5.0: + resolution: {integrity: sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==} + + babel-helper-flip-expressions@0.4.3: + resolution: {integrity: sha512-rSrkRW4YQ2ETCWww9gbsWk4N0x1BOtln349Tk0dlCS90oT68WMLyGR7WvaMp3eAnsVrCqdUtC19lo1avyGPejA==} + + babel-helper-is-nodes-equiv@0.0.1: + resolution: {integrity: sha512-ri/nsMFVRqXn7IyT5qW4/hIAGQxuYUFHa3qsxmPtbk6spZQcYlyDogfVpNm2XYOslH/ULS4VEJGUqQX5u7ACQw==} + + babel-helper-is-void-0@0.4.3: + resolution: {integrity: sha512-07rBV0xPRM3TM5NVJEOQEkECX3qnHDjaIbFvWYPv+T1ajpUiVLiqTfC+MmiZxY5KOL/Ec08vJdJD9kZiP9UkUg==} + + babel-helper-mark-eval-scopes@0.4.3: + resolution: {integrity: sha512-+d/mXPP33bhgHkdVOiPkmYoeXJ+rXRWi7OdhwpyseIqOS8CmzHQXHUp/+/Qr8baXsT0kjGpMHHofHs6C3cskdA==} + + babel-helper-remove-or-void@0.4.3: + resolution: {integrity: sha512-eYNceYtcGKpifHDir62gHJadVXdg9fAhuZEXiRQnJJ4Yi4oUTpqpNY//1pM4nVyjjDMPYaC2xSf0I+9IqVzwdA==} + + babel-helper-to-multiple-sequence-expressions@0.5.0: + resolution: {integrity: sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==} + + babel-minify@0.5.2: + resolution: {integrity: sha512-H1ExfmvTxKWQZYcty1My6XRhoZm04/5MNb2DdZsC08r7y/rowipC0s9sszKA7jgW9mYYDdFnU68XohB+zP35qQ==} + hasBin: true + + babel-plugin-minify-builtins@0.5.0: + resolution: {integrity: sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==} + + babel-plugin-minify-constant-folding@0.5.0: + resolution: {integrity: sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==} + + babel-plugin-minify-dead-code-elimination@0.5.2: + resolution: {integrity: sha512-krq9Lwi0QIzyAlcNBXTL4usqUvevB4BzktdEsb8srcXC1AaYqRJiAQw6vdKdJSaXbz6snBvziGr6ch/aoRCfpA==} + + babel-plugin-minify-flip-comparisons@0.4.3: + resolution: {integrity: sha512-8hNwgLVeJzpeLVOVArag2DfTkbKodzOHU7+gAZ8mGBFGPQHK6uXVpg3jh5I/F6gfi5Q5usWU2OKcstn1YbAV7A==} + + babel-plugin-minify-guarded-expressions@0.4.4: + resolution: {integrity: sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==} + + babel-plugin-minify-infinity@0.4.3: + resolution: {integrity: sha512-X0ictxCk8y+NvIf+bZ1HJPbVZKMlPku3lgYxPmIp62Dp8wdtbMLSekczty3MzvUOlrk5xzWYpBpQprXUjDRyMA==} + + babel-plugin-minify-mangle-names@0.5.1: + resolution: {integrity: sha512-8KMichAOae2FHlipjNDTo2wz97MdEb2Q0jrn4NIRXzHH7SJ3c5TaNNBkeTHbk9WUsMnqpNUx949ugM9NFWewzw==} + + babel-plugin-minify-numeric-literals@0.4.3: + resolution: {integrity: sha512-5D54hvs9YVuCknfWywq0eaYDt7qYxlNwCqW9Ipm/kYeS9gYhJd0Rr/Pm2WhHKJ8DC6aIlDdqSBODSthabLSX3A==} + + babel-plugin-minify-replace@0.5.0: + resolution: {integrity: sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==} + + babel-plugin-minify-simplify@0.5.1: + resolution: {integrity: sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==} + + babel-plugin-minify-type-constructors@0.4.3: + resolution: {integrity: sha512-4ADB0irJ/6BeXWHubjCJmrPbzhxDgjphBMjIjxCc25n4NGJ00NsYqwYt+F/OvE9RXx8KaSW7cJvp+iZX436tnQ==} + + babel-plugin-transform-inline-consecutive-adds@0.4.3: + resolution: {integrity: sha512-8D104wbzzI5RlxeVPYeQb9QsUyepiH1rAO5hpPpQ6NPRgQLpIVwkS/Nbx944pm4K8Z+rx7CgjPsFACz/VCBN0Q==} + + babel-plugin-transform-member-expression-literals@6.9.4: + resolution: {integrity: sha512-Xq9/Rarpj+bjOZSl1nBbZYETsNEDDJSrb6Plb1sS3/36FukWFLLRysgecva5KZECjUJTrJoQqjJgtWToaflk5Q==} + + babel-plugin-transform-merge-sibling-variables@6.9.5: + resolution: {integrity: sha512-xj/KrWi6/uP+DrD844h66Qh2cZN++iugEIgH8QcIxhmZZPNP6VpOE9b4gP2FFW39xDAY43kCmYMM6U0QNKN8fw==} + + babel-plugin-transform-minify-booleans@6.9.4: + resolution: {integrity: sha512-9pW9ePng6DZpzGPalcrULuhSCcauGAbn8AeU3bE34HcDkGm8Ldt0ysjGkyb64f0K3T5ilV4mriayOVv5fg0ASA==} + + babel-plugin-transform-property-literals@6.9.4: + resolution: {integrity: sha512-Pf8JHTjTPxecqVyL6KSwD/hxGpoTZjiEgV7nCx0KFQsJYM0nuuoCajbg09KRmZWeZbJ5NGTySABYv8b/hY1eEA==} + + babel-plugin-transform-regexp-constructors@0.4.3: + resolution: {integrity: sha512-JjymDyEyRNhAoNFp09y/xGwYVYzT2nWTGrBrWaL6eCg2m+B24qH2jR0AA8V8GzKJTgC8NW6joJmc6nabvWBD/g==} + + babel-plugin-transform-remove-console@6.9.4: + resolution: {integrity: sha512-88blrUrMX3SPiGkT1GnvVY8E/7A+k6oj3MNvUtTIxJflFzXTw1bHkuJ/y039ouhFMp2prRn5cQGzokViYi1dsg==} + + babel-plugin-transform-remove-debugger@6.9.4: + resolution: {integrity: sha512-Kd+eTBYlXfwoFzisburVwrngsrz4xh9I0ppoJnU/qlLysxVBRgI4Pj+dk3X8F5tDiehp3hhP8oarRMT9v2Z3lw==} + + babel-plugin-transform-remove-undefined@0.5.0: + resolution: {integrity: sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==} + + babel-plugin-transform-simplify-comparison-operators@6.9.4: + resolution: {integrity: sha512-GLInxhGAQWJ9YIdjwF6dAFlmh4U+kN8pL6Big7nkDzHoZcaDQOtBm28atEhQJq6m9GpAovbiGEShKqXv4BSp0A==} + + babel-plugin-transform-undefined-to-void@6.9.4: + resolution: {integrity: sha512-D2UbwxawEY1xVc9svYAUZQM2xarwSNXue2qDIx6CeV2EuMGaes/0su78zlIDIAgE7BvnMw4UpmSo9fDy+znghg==} + + babel-preset-minify@0.5.2: + resolution: {integrity: sha512-v4GL+kk0TfovbRIKZnC3HPbu2cAGmPAby7BsOmuPdMJfHV+4FVdsGXTH/OOGQRKYdjemBuL1+MsE6mobobhe9w==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + base64id@2.0.0: + resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} + engines: {node: ^4.5.0 || >= 5.9} + + big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + body-parser@1.20.2: + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + body-parser@2.0.2: + resolution: {integrity: sha512-SNMk0OONlQ01uk8EPeiBvTW7W4ovpL5b1O3t1sjpPgfxOQ6BqQJ6XjxinDPR79Z6HdcD5zBBwr5ssiTlgdNztQ==} + engines: {node: '>=18'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + builtins@5.0.1: + resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} + + bundle-require@5.0.0: + resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.18' + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + cache-content-type@1.0.1: + resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} + engines: {node: '>= 6.0.0'} + + cachedir@2.3.0: + resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==} + engines: {node: '>=6'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + + camelcase@4.1.0: + resolution: {integrity: sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==} + engines: {node: '>=4'} + + camelcase@5.0.0: + resolution: {integrity: sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==} + engines: {node: '>=6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001605: + resolution: {integrity: sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==} + + caniuse-lite@1.0.30001684: + resolution: {integrity: sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==} + + chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + + chalk-template@0.4.0: + resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} + engines: {node: '>=12'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@4.0.1: + resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} + engines: {node: '>= 14.16.0'} + + chrome-trace-event@1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + command-line-args@5.2.1: + resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} + engines: {node: '>=4.0.0'} + + command-line-usage@7.0.1: + resolution: {integrity: sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==} + engines: {node: '>=12.20.0'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + commitizen@4.3.1: + resolution: {integrity: sha512-gwAPAVTy/j5YcOOebcCRIijn+mSjWJC+IYKivTu6aG8Ei/scoXgfsMRnuAk6b0GRste2J4NGxVdMN3ZpfNaVaw==} + engines: {node: '>= 12'} + hasBin: true + + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-disposition@1.0.0: + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + conventional-changelog-angular@7.0.0: + resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} + engines: {node: '>=16'} + + conventional-changelog-conventionalcommits@7.0.2: + resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} + engines: {node: '>=16'} + + conventional-commit-types@3.0.0: + resolution: {integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==} + + conventional-commits-parser@5.0.0: + resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} + engines: {node: '>=16'} + hasBin: true + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + + cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + + cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + cookies@0.9.1: + resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} + engines: {node: '>= 0.8'} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + cosmiconfig-typescript-loader@5.0.0: + resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} + engines: {node: '>=v16'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=8.2' + typescript: '>=4' + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + + cross-fetch@4.0.0: + resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + cssstyle@4.1.0: + resolution: {integrity: sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==} + engines: {node: '>=18'} + + cz-conventional-changelog@3.3.0: + resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==} + engines: {node: '>= 10'} + + dargs@7.0.0: + resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} + engines: {node: '>=8'} + + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + dateformat@4.6.3: + resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + + debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@3.1.0: + resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + + dedent@0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + + deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + + deep-equal@1.0.1: + resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + default-gateway@6.0.3: + resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} + engines: {node: '>= 10'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-file@1.0.0: + resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} + engines: {node: '>=0.10.0'} + + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + + dotenv@10.0.0: + resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} + engines: {node: '>=10'} + + duplexer2@0.1.4: + resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} + + duplexify@4.1.3: + resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.4.723: + resolution: {integrity: sha512-rxFVtrMGMFROr4qqU6n95rUi9IlfIm+lIAt+hOToy/9r6CDv0XiEcQdC3VP71y1pE5CFTzKV0RvxOGYCPWWHPw==} + + electron-to-chromium@1.5.67: + resolution: {integrity: sha512-nz88NNBsD7kQSAGGJyp8hS6xSPtWwqNogA0mjtc2nUYeEf3nURK9qpV18TuBdDmEDgVWotS8Wkzf+V52dSQ/LQ==} + + emoji-regex@10.3.0: + resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + engine.io-client@6.5.4: + resolution: {integrity: sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==} + + engine.io-parser@5.2.2: + resolution: {integrity: sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==} + engines: {node: '>=10.0.0'} + + engine.io@6.5.4: + resolution: {integrity: sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==} + engines: {node: '>=10.2.0'} + + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + engines: {node: '>=10.13.0'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-array-method-boxes-properly@1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.5.0: + resolution: {integrity: sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + esbuild-loader@4.2.2: + resolution: {integrity: sha512-Mdq/A1L8p37hkibp8jGFwuQTDSWhDmlueAefsrCPRwNWThEOlQmIglV7Gd6GE2mO5bt7ksfxKOMwkuY7jjVTXg==} + peerDependencies: + webpack: ^4.40.0 || ^5.0.0 + + esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.24.0: + resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-prettier@5.2.1: + resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} + engines: {node: ^14.18.0 || >=16.0.0} + 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 + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@6.1.0: + resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + expand-tilde@2.0.2: + resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} + engines: {node: '>=0.10.0'} + + express@4.19.2: + resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} + engines: {node: '>= 0.10.0'} + + express@5.0.1: + resolution: {integrity: sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==} + engines: {node: '>= 18'} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + fast-content-type-parse@1.1.0: + resolution: {integrity: sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==} + + fast-decode-uri-component@1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-json-stringify@5.16.1: + resolution: {integrity: sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-querystring@1.1.2: + resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + + fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + + fast-uri@2.4.0: + resolution: {integrity: sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==} + + fastify-plugin@4.5.1: + resolution: {integrity: sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==} + + fastify@4.28.1: + resolution: {integrity: sha512-kFWUtpNr4i7t5vY2EJPCN2KgMVpuqfU4NjnJNCgiNB900oiDeYqaNDRcAfeBbOF5hGixixxcKnOU4KN9z6QncQ==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + fdir@6.4.2: + resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + + finalhandler@2.0.0: + resolution: {integrity: sha512-MX6Zo2adDViYh+GcxxB1dpO43eypOGUOL12rLCOTMQv/DfIbpSJUy4oQIIZhVZkH9e+bZWKMon0XHFEju16tkQ==} + engines: {node: '>= 0.8'} + + find-my-way@8.2.2: + resolution: {integrity: sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==} + engines: {node: '>=14'} + + find-node-modules@2.1.3: + resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==} + + find-replace@3.0.0: + resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} + engines: {node: '>=4.0.0'} + + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + findup-sync@4.0.0: + resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==} + engines: {node: '>= 8'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs-monkey@1.0.5: + resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} + + fs-readdir-recursive@1.1.0: + resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} + + fs-teardown@0.3.2: + resolution: {integrity: sha512-5xJQGMsGjHdZJ5yw/eyZEkAIHYwQQA6T34PfXUCl5JOeizfLWnz3gBEVfEidgrnnYZKTBW3L7aPrB3aI8f0Vqw==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + engines: {node: '>=18'} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.7.3: + resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + + git-log-parser@1.2.0: + resolution: {integrity: sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==} + + git-raw-commits@2.0.11: + resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} + engines: {node: '>=10'} + hasBin: true + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.3.12: + resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + glob@11.0.0: + resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==} + engines: {node: 20 || >=22} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} + + global-dirs@0.1.1: + resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} + engines: {node: '>=4'} + + global-modules@1.0.0: + resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} + engines: {node: '>=0.10.0'} + + global-prefix@1.0.2: + resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} + engines: {node: '>=0.10.0'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + graphql@16.8.2: + resolution: {integrity: sha512-cvVIBILwuoSyD54U4cF/UXDh5yAobhNV/tPygI4lZhgOIJQE/WLWC4waBRb4I6bDVYb3OVx3lfHbaQOEoUD5sg==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + headers-polyfill@3.3.0: + resolution: {integrity: sha512-5e57etwBpNcDc0b6KCVWEh/Ro063OxPvzVimUdM0/tsYM/T7Hfy3kknIGj78SFTOhNd8AZY41U8mOHoO4LzmIQ==} + + headers-polyfill@4.0.3: + resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + + homedir-polyfill@1.0.3: + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} + + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + + html-rewriter-wasm@0.4.1: + resolution: {integrity: sha512-lNovG8CMCCmcVB1Q7xggMSf7tqPCijZXaH4gL6iE8BFghdQCbaY5Met9i1x2Ex8m/cZHDUtXK9H6/znKamRP8Q==} + + http-assert@1.5.0: + resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} + engines: {node: '>= 0.8'} + + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + http-errors@1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + + http-errors@1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + engines: {node: '>= 14'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@3.0.1: + resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==} + engines: {node: '>=12.20.0'} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.5.2: + resolution: {integrity: sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + import-meta-resolve@4.0.0: + resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + inflight@1.0.6: + resolution: {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. + + inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + inquirer@8.2.5: + resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} + engines: {node: '>=12.0.0'} + + internal-ip@6.2.0: + resolution: {integrity: sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==} + engines: {node: '>=10'} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + ip-regex@4.3.0: + resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} + engines: {node: '>=8'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-ip@3.1.0: + resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} + engines: {node: '>=8'} + + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-node-process@1.2.0: + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-text-path@2.0.0: + resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} + engines: {node: '>=8'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-utf8@0.2.1: + resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isbinaryfile@5.0.2: + resolution: {integrity: sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg==} + engines: {node: '>= 18.0.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + issue-parser@6.0.0: + resolution: {integrity: sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==} + engines: {node: '>=10.13'} + + jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + + jackspeak@4.0.2: + resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==} + engines: {node: 20 || >=22} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-tokens@9.0.0: + resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsdom@25.0.1: + resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^2.11.2 + peerDependenciesMeta: + canvas: + optional: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-ref-resolver@1.0.1: + resolution: {integrity: sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.2.1: + resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + keygrip@1.1.0: + resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} + engines: {node: '>= 0.6'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + koa-compose@4.1.0: + resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} + + koa-convert@2.0.0: + resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} + engines: {node: '>= 10'} + + koa-etag@4.0.0: + resolution: {integrity: sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==} + + koa-send@5.0.1: + resolution: {integrity: sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==} + engines: {node: '>= 8'} + + koa-static@5.0.0: + resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==} + engines: {node: '>= 7.6.0'} + + koa@2.15.2: + resolution: {integrity: sha512-MXTeZH3M6AJ8ukW2QZ8wqO3Dcdfh2WRRmjCBkEP+NhKNCiqlO5RDqHmSnsyNrbRJrdjyvIGSJho4vQiWgQJSVA==} + engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} + + leven@2.1.0: + resolution: {integrity: sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==} + engines: {node: '>=0.10.0'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + light-my-request@5.14.0: + resolution: {integrity: sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==} + + lilconfig@3.1.1: + resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} + engines: {node: '>=14'} + + lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lint-staged@15.2.10: + resolution: {integrity: sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==} + engines: {node: '>=18.12.0'} + hasBin: true + + listr2@8.2.5: + resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} + engines: {node: '>=18.0.0'} + + load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + + local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.assignwith@4.2.0: + resolution: {integrity: sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.capitalize@4.2.1: + resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} + + lodash.escaperegexp@4.1.2: + resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} + + lodash.isfunction@3.0.9: + resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + + lodash.map@4.6.0: + resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash.uniqby@4.7.0: + resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} + + lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + + longest@2.0.1: + resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==} + engines: {node: '>=0.10.0'} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + engines: {node: 14 || >=16.14} + + lru-cache@11.0.2: + resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} + engines: {node: 20 || >=22} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lru-cache@8.0.5: + resolution: {integrity: sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==} + engines: {node: '>=16.14'} + + magic-string@0.30.8: + resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} + engines: {node: '>=12'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + + map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + + memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} + + meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} + engines: {node: '>=16.10'} + + meow@8.1.2: + resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} + engines: {node: '>=10'} + + merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + merge@2.1.1: + resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.53.0: + resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime-types@3.0.0: + resolution: {integrity: sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mime@4.0.1: + resolution: {integrity: sha512-5lZ5tyrIfliMXzFtkYyekWbtRXObT9OWa8IwQ5uxTBDHucNNwniRqo0yInflj+iYi5CBa6qxadGzGarDfuEOxA==} + engines: {node: '>=16'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + + minimist@1.2.7: + resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mlly@1.6.1: + resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} + + mri@1.1.4: + resolution: {integrity: sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==} + engines: {node: '>=4'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanocolors@0.2.13: + resolution: {integrity: sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + normalize-package-data@3.0.3: + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + npx-import@1.1.4: + resolution: {integrity: sha512-3ShymTWOgqGyNlh5lMJAejLuIv3W1K3fbI5Ewc6YErZU3Sp0PqsNs8UIU1O8z5+KVl/Du5ag56Gza9vdorGEoA==} + + nwsapi@2.2.14: + resolution: {integrity: sha512-5XcFrl8snuCQTJC2SYIW9yhhMnILdMw9dlGT+At11P7jqDuTafp6/uc3lAXsMOmftER3Ntb+T3cHiupOtj7Lgw==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + object.getownpropertydescriptors@2.1.8: + resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} + engines: {node: '>= 0.8'} + + on-exit-leak-free@0.2.0: + resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} + + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + only@0.0.2: + resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + outvariant@1.4.3: + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + + p-event@4.2.0: + resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} + engines: {node: '>=8'} + + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-limit@5.0.0: + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + engines: {node: '>=18'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + page-with@0.6.1: + resolution: {integrity: sha512-5J58fSpc8CKonUWCPsh8b2LctFrNSOpXQ8O3tB+/iJvixOQf1qHp4+cDLiIVsl/WiuheXdZTzMcuR0KLQMaWcg==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-package-name@1.0.0: + resolution: {integrity: sha512-kBeTUtcj+SkyfaW4+KBe0HtsloBJ/mKTPoxpVdA57GZiPerREsUWJOhVj9anXweFiJkm5y8FG1sxFZkZ0SN6wg==} + + parse-passwd@1.0.0: + resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} + engines: {node: '>=0.10.0'} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + + parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.10.2: + resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} + engines: {node: '>=16 || 14 >=14.17'} + + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + + path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + + path-to-regexp@8.2.0: + resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} + engines: {node: '>=16'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + pino-abstract-transport@0.5.0: + resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} + + pino-abstract-transport@2.0.0: + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + + pino-pretty@7.6.1: + resolution: {integrity: sha512-H7N6ZYkiyrfwBGW9CSjx0uyO9Q2Lyt73881+OTYk8v3TiTdgN92QHrWlEq/LeWw5XtDP64jeSk3mnc6T+xX9/w==} + hasBin: true + + pino-std-serializers@4.0.0: + resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} + + pino-std-serializers@7.0.0: + resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + + pino@7.11.0: + resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} + hasBin: true + + pino@9.5.0: + resolution: {integrity: sha512-xSEmD4pLnV54t0NOUN16yCl7RIB1c5UUOse5HSyEXtBp+FgFQyPeDutc+Q2ZO7/22vImV7VfEjH/1zV2QuqvYw==} + hasBin: true + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + + playwright-core@1.42.1: + resolution: {integrity: sha512-mxz6zclokgrke9p1vtdy/COWBH+eOZgYUVVU34C73M+4j4HLlQJHtfcqiqqxpP0o8HhMkflvfbquLX5dg6wlfA==} + engines: {node: '>=16'} + hasBin: true + + playwright-core@1.49.0: + resolution: {integrity: sha512-R+3KKTQF3npy5GTiKH/T+kdhoJfJojjHESR1YEWhYuEKRVfVaxH3+4+GvXE5xyCngCxhxnykk0Vlah9v8fs3jA==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.42.1: + resolution: {integrity: sha512-PgwB03s2DZBcNRoW+1w9E+VkLBxweib6KTXM0M3tkiT4jVxKSi6PmVJ591J+0u10LUrgxB7dLRbiJqO5s2QPMg==} + engines: {node: '>=16'} + hasBin: true + + playwright@1.49.0: + resolution: {integrity: sha512-eKpmys0UFDnfNb3vfsf8Vx2LEOtflgRebl0Im2eQQnYMA4Aqd+Zw8bEOB+7ZKvN76901mRnqdsiOGKxzVTbi7A==} + engines: {node: '>=18'} + hasBin: true + + portfinder@1.0.32: + resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} + engines: {node: '>= 0.12.0'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + + postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier@3.4.1: + resolution: {integrity: sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==} + engines: {node: '>=14'} + hasBin: true + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process-warning@1.0.0: + resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} + + process-warning@3.0.0: + resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} + + process-warning@4.0.0: + resolution: {integrity: sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + + pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + + quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + raw-body@3.0.0: + resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} + engines: {node: '>= 0.8'} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + + read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + + read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@4.0.2: + resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} + engines: {node: '>= 14.16.0'} + + real-require@0.1.0: + resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} + engines: {node: '>= 12.13.0'} + + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + + registry-auth-token@4.2.2: + resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==} + engines: {node: '>=6.0.0'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resolve-dir@1.0.1: + resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-global@1.0.0: + resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} + engines: {node: '>=8'} + + resolve-path@1.4.0: + resolution: {integrity: sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==} + engines: {node: '>= 0.8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + ret@0.4.3: + resolution: {integrity: sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==} + engines: {node: '>=10'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.3.1: + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@6.0.1: + resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} + engines: {node: 20 || >=22} + hasBin: true + + rollup@4.13.2: + resolution: {integrity: sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + rollup@4.27.4: + resolution: {integrity: sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + router@2.0.0: + resolution: {integrity: sha512-dIM5zVoG8xhC6rnSN8uoAgFARwTE7BQs8YwHEvK0VCmfxQXMaOuA1uiR1IPwsW7JyK5iTt7Od/TC9StasS2NPQ==} + engines: {node: '>= 0.10'} + + rrweb-cssom@0.7.1: + resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} + + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + safe-regex2@3.1.0: + resolution: {integrity: sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==} + + safe-stable-stringify@2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + engines: {node: '>=10'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + + secure-json-parse@2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} + hasBin: true + + send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + + send@1.1.0: + resolution: {integrity: sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==} + engines: {node: '>= 18'} + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + + serve-static@2.1.0: + resolution: {integrity: sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA==} + engines: {node: '>= 18'} + + set-cookie-parser@2.6.0: + resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-git-hooks@2.11.1: + resolution: {integrity: sha512-tgqwPUMDcNDhuf1Xf6KTUsyeqGdgKMhzaH4PAZZuzguOgTl5uuyeYe/8mWgAr6IBxB5V06uqEf6Dy37gIWDtDg==} + hasBin: true + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + + socket.io-adapter@2.5.4: + resolution: {integrity: sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg==} + + socket.io-client@4.7.5: + resolution: {integrity: sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==} + engines: {node: '>=10.0.0'} + + socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + + socket.io@4.7.5: + resolution: {integrity: sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==} + engines: {node: '>=10.2.0'} + + sonic-boom@2.8.0: + resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} + + sonic-boom@4.2.0: + resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} + + source-list-map@2.0.1: + resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} + + source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + + spawn-error-forwarder@1.0.0: + resolution: {integrity: sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.17: + resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} + + split2@1.0.0: + resolution: {integrity: sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==} + + split2@3.2.2: + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + + stream-combiner2@1.1.1: + resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} + + stream-read-all@3.0.1: + resolution: {integrity: sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==} + engines: {node: '>=10'} + + stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + strict-event-emitter@0.5.1: + resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@7.1.0: + resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} + engines: {node: '>=18'} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strip-literal@2.1.0: + resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} + engines: {node: ^14.18.0 || >=16.0.0} + + table-layout@3.0.2: + resolution: {integrity: sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==} + engines: {node: '>=12.17'} + hasBin: true + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + terser-webpack-plugin@5.3.10: + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.30.1: + resolution: {integrity: sha512-PJhOnRttZqqmIujxOQOMu4QuFGvh43lR7Youln3k6OJvmxwZ5FxK5rbCEh8XABRCpLf7ZnhrZuclCNCASsScnA==} + engines: {node: '>=10'} + hasBin: true + + text-extensions@2.4.0: + resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} + engines: {node: '>=8'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + thread-stream@0.15.2: + resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} + + thread-stream@3.1.0: + resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + + through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + + through2@4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tinybench@2.6.0: + resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} + + tinyexec@0.3.1: + resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} + + tinyglobby@0.2.10: + resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} + engines: {node: '>=12.0.0'} + + tinypool@0.8.3: + resolution: {integrity: sha512-Ud7uepAklqRH1bvwy22ynrliC7Dljz7Tm8M/0RBUW+YRa4YHhZ6e4PpgE+fu1zr/WqB1kbeuVrdfeuyIBpy4tw==} + engines: {node: '>=14.0.0'} + + tinyspy@2.2.1: + resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} + engines: {node: '>=14.0.0'} + + tldts-core@6.1.64: + resolution: {integrity: sha512-uqnl8vGV16KsyflHOzqrYjjArjfXaU6rMPXYy2/ZWoRKCkXtghgB4VwTDXUG+t0OTGeSewNAG31/x1gCTfLt+Q==} + + tldts@6.1.64: + resolution: {integrity: sha512-ph4AE5BXWIOsSy9stpoeo7bYe/Cy7VfpciIH4RhVZUPItCJmhqWCN0EVzxd8BOHiyNb42vuJc6NWTjJkg91Tuw==} + hasBin: true + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toad-cache@3.7.0: + resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==} + engines: {node: '>=12'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + + tough-cookie@5.0.0: + resolution: {integrity: sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==} + engines: {node: '>=16'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + + tr46@5.0.0: + resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} + engines: {node: '>=18'} + + traverse@0.6.8: + resolution: {integrity: sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==} + engines: {node: '>= 0.4'} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + trim-newlines@3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} + + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + tsscmp@1.0.6: + resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} + engines: {node: '>=0.6.x'} + + tsup@8.3.5: + resolution: {integrity: sha512-Tunf6r6m6tnZsG9GYWndg0z8dEV7fD733VBFzFJ5Vcm1FtlXB8xBD/rtrBi2a3YKEV7hHtxiZtW5EAVADoe1pA==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.5.0' + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.18.1: + resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} + engines: {node: '>=10'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + + type-fest@4.29.0: + resolution: {integrity: sha512-RPYt6dKyemXJe7I6oNstcH24myUGSReicxcHTvCLgzm4e0n8y05dGvcGB15/SoPRBmhlMthWQ9pvKyL81ko8nQ==} + engines: {node: '>=16'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + type-is@2.0.0: + resolution: {integrity: sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw==} + engines: {node: '>= 0.6'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + typescript@5.5.2: + resolution: {integrity: sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==} + engines: {node: '>=14.17'} + hasBin: true + + typical@4.0.0: + resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} + engines: {node: '>=8'} + + typical@7.1.1: + resolution: {integrity: sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==} + engines: {node: '>=12.17'} + + ufo@1.5.3: + resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + undici@5.28.4: + resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + engines: {node: '>=14.0'} + + undici@6.21.0: + resolution: {integrity: sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==} + engines: {node: '>=18.17'} + + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + update-browserslist-db@1.0.13: + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-loader@4.1.1: + resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + file-loader: '*' + webpack: ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + file-loader: + optional: true + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + urlpattern-polyfill@4.0.3: + resolution: {integrity: sha512-DOE84vZT2fEcl9gqCUTcnAw5ZY5Id55ikUcziSUntuEFL3pRvavg5kwDmTEUJkeCHInTlV/HexFomgYnzO5kdQ==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + util.promisify@1.1.2: + resolution: {integrity: sha512-PBdZ03m1kBnQ5cjjO0ZvJMJS+QsbyIcFwi4hY4U76OQsCO9JrOYjbCFgIF76ccFg9xnJo7ZHPkqyj1GqmdS7MA==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validate-npm-package-name@4.0.0: + resolution: {integrity: sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vite-node@1.4.0: + resolution: {integrity: sha512-VZDAseqjrHgNd4Kh8icYHWzTKSCZMhia7GyHfhtzLW33fZlG9SwsB6CEhgyVOWkJfJ2pFLrp/Gj1FSfAiqH9Lw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + + vite@5.2.7: + resolution: {integrity: sha512-k14PWOKLI6pMaSzAuGtT+Cf0YmIx12z9YGon39onaJNy8DLBfBJrzg9FQEmkAM5lpHBZs9wksWAsyF/HkpEwJA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitest-environment-miniflare@2.14.4: + resolution: {integrity: sha512-DzwQWdY42sVYR6aUndw9FdCtl/i0oh3NkbkQpw+xq5aYQw5eiJn5kwnKaKQEWaoBe8Cso71X2i1EJGvi1jZ2xw==} + engines: {node: '>=16.13'} + peerDependencies: + vitest: '>=0.23.0' + + vitest@1.4.0: + resolution: {integrity: sha512-gujzn0g7fmwf83/WzrDTnncZt2UiXP41mHuFYFrdwaLRVQ6JYQEiME2IfEjU3vcFL3VKa75XhI3lFgn+hfVsQw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 1.4.0 + '@vitest/ui': 1.4.0 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + + watchpack@2.4.1: + resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} + engines: {node: '>=10.13.0'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + webpack-http-server@0.5.0: + resolution: {integrity: sha512-kyewxAnzmDuZxe09fn/Bb0PeEnaDxHChYKFVsMy4oeBUs9Cyv2j1uEgzQJ7ljPFexLU8ongUS4i4O+e22CeBZQ==} + + webpack-merge@5.10.0: + resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} + engines: {node: '>=10.0.0'} + + webpack-sources@1.4.3: + resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack@5.96.1: + resolution: {integrity: sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@14.0.0: + resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} + engines: {node: '>=18'} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + + wildcard@2.0.1: + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wordwrapjs@5.1.0: + resolution: {integrity: sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==} + engines: {node: '>=12.17'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.11.0: + resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + + xmlhttprequest-ssl@2.0.0: + resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} + engines: {node: '>=0.4.0'} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@2.5.1: + resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@10.1.0: + resolution: {integrity: sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + ylru@1.4.0: + resolution: {integrity: sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==} + engines: {node: '>= 4.0.0'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + +snapshots: + + '@75lb/deep-merge@1.1.1': + dependencies: + lodash.assignwith: 4.2.0 + typical: 7.1.1 + + '@aashutoshrathi/word-wrap@1.2.6': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.24.2': + dependencies: + '@babel/highlight': 7.24.2 + picocolors: 1.0.0 + + '@babel/compat-data@7.24.1': {} + + '@babel/core@7.24.3': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.1 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.3) + '@babel/helpers': 7.24.1 + '@babel/parser': 7.24.1 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.24.1': + dependencies: + '@babel/types': 7.24.0 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/helper-compilation-targets@7.23.6': + dependencies: + '@babel/compat-data': 7.24.1 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.23.0 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-environment-visitor@7.22.20': {} + + '@babel/helper-function-name@7.23.0': + dependencies: + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 + + '@babel/helper-hoist-variables@7.22.5': + dependencies: + '@babel/types': 7.24.0 + + '@babel/helper-module-imports@7.24.3': + dependencies: + '@babel/types': 7.24.0 + + '@babel/helper-module-transforms@7.23.3(@babel/core@7.24.3)': + dependencies: + '@babel/core': 7.24.3 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.24.3 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + + '@babel/helper-simple-access@7.22.5': + dependencies: + '@babel/types': 7.24.0 + + '@babel/helper-split-export-declaration@7.22.6': + dependencies: + '@babel/types': 7.24.0 + + '@babel/helper-string-parser@7.24.1': {} + + '@babel/helper-validator-identifier@7.22.20': {} + + '@babel/helper-validator-option@7.23.5': {} + + '@babel/helpers@7.24.1': + dependencies: + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 + transitivePeerDependencies: + - supports-color + + '@babel/highlight@7.24.2': + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.0 + + '@babel/parser@7.24.1': + dependencies: + '@babel/types': 7.24.0 + + '@babel/template@7.24.0': + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/parser': 7.24.1 + '@babel/types': 7.24.0 + + '@babel/traverse@7.24.1': + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.1 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.24.1 + '@babel/types': 7.24.0 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.24.0': + dependencies: + '@babel/helper-string-parser': 7.24.1 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + + '@bundled-es-modules/cookie@2.0.1': + dependencies: + cookie: 0.7.2 + + '@bundled-es-modules/statuses@1.0.1': + dependencies: + statuses: 2.0.1 + + '@bundled-es-modules/tough-cookie@0.1.6': + dependencies: + '@types/tough-cookie': 4.0.5 + tough-cookie: 4.1.4 + + '@cloudflare/workers-types@4.20240329.0': {} + + '@commitlint/cli@18.6.1(@types/node@18.19.28)(typescript@5.5.2)': + dependencies: + '@commitlint/format': 18.6.1 + '@commitlint/lint': 18.6.1 + '@commitlint/load': 18.6.1(@types/node@18.19.28)(typescript@5.5.2) + '@commitlint/read': 18.6.1 + '@commitlint/types': 18.6.1 + execa: 5.1.1 + lodash.isfunction: 3.0.9 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/config-conventional@18.6.3': + dependencies: + '@commitlint/types': 18.6.1 + conventional-changelog-conventionalcommits: 7.0.2 + + '@commitlint/config-validator@18.6.1': + dependencies: + '@commitlint/types': 18.6.1 + ajv: 8.12.0 + + '@commitlint/config-validator@19.0.3': + dependencies: + '@commitlint/types': 19.0.3 + ajv: 8.12.0 + optional: true + + '@commitlint/ensure@18.6.1': + dependencies: + '@commitlint/types': 18.6.1 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 + + '@commitlint/execute-rule@18.6.1': {} + + '@commitlint/execute-rule@19.0.0': + optional: true + + '@commitlint/format@18.6.1': + dependencies: + '@commitlint/types': 18.6.1 + chalk: 4.1.2 + + '@commitlint/is-ignored@18.6.1': + dependencies: + '@commitlint/types': 18.6.1 + semver: 7.6.0 + + '@commitlint/lint@18.6.1': + dependencies: + '@commitlint/is-ignored': 18.6.1 + '@commitlint/parse': 18.6.1 + '@commitlint/rules': 18.6.1 + '@commitlint/types': 18.6.1 + + '@commitlint/load@18.6.1(@types/node@18.19.28)(typescript@5.5.2)': + dependencies: + '@commitlint/config-validator': 18.6.1 + '@commitlint/execute-rule': 18.6.1 + '@commitlint/resolve-extends': 18.6.1 + '@commitlint/types': 18.6.1 + chalk: 4.1.2 + cosmiconfig: 8.3.6(typescript@5.5.2) + cosmiconfig-typescript-loader: 5.0.0(@types/node@18.19.28)(cosmiconfig@8.3.6(typescript@5.5.2))(typescript@5.5.2) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + resolve-from: 5.0.0 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/load@19.2.0(@types/node@18.19.28)(typescript@5.5.2)': + dependencies: + '@commitlint/config-validator': 19.0.3 + '@commitlint/execute-rule': 19.0.0 + '@commitlint/resolve-extends': 19.1.0 + '@commitlint/types': 19.0.3 + chalk: 5.3.0 + cosmiconfig: 9.0.0(typescript@5.5.2) + cosmiconfig-typescript-loader: 5.0.0(@types/node@18.19.28)(cosmiconfig@9.0.0(typescript@5.5.2))(typescript@5.5.2) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - '@types/node' + - typescript + optional: true + + '@commitlint/message@18.6.1': {} + + '@commitlint/parse@18.6.1': + dependencies: + '@commitlint/types': 18.6.1 + conventional-changelog-angular: 7.0.0 + conventional-commits-parser: 5.0.0 + + '@commitlint/read@18.6.1': + dependencies: + '@commitlint/top-level': 18.6.1 + '@commitlint/types': 18.6.1 + git-raw-commits: 2.0.11 + minimist: 1.2.8 + + '@commitlint/resolve-extends@18.6.1': + dependencies: + '@commitlint/config-validator': 18.6.1 + '@commitlint/types': 18.6.1 + import-fresh: 3.3.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + + '@commitlint/resolve-extends@19.1.0': + dependencies: + '@commitlint/config-validator': 19.0.3 + '@commitlint/types': 19.0.3 + global-directory: 4.0.1 + import-meta-resolve: 4.0.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + optional: true + + '@commitlint/rules@18.6.1': + dependencies: + '@commitlint/ensure': 18.6.1 + '@commitlint/message': 18.6.1 + '@commitlint/to-lines': 18.6.1 + '@commitlint/types': 18.6.1 + execa: 5.1.1 + + '@commitlint/to-lines@18.6.1': {} + + '@commitlint/top-level@18.6.1': + dependencies: + find-up: 5.0.0 + + '@commitlint/types@18.6.1': + dependencies: + chalk: 4.1.2 + + '@commitlint/types@19.0.3': + dependencies: + '@types/conventional-commits-parser': 5.0.0 + chalk: 5.3.0 + optional: true + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@esbuild/aix-ppc64@0.20.2': + optional: true + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/aix-ppc64@0.24.0': + optional: true + + '@esbuild/android-arm64@0.20.2': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.24.0': + optional: true + + '@esbuild/android-arm@0.20.2': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-arm@0.24.0': + optional: true + + '@esbuild/android-x64@0.20.2': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/android-x64@0.24.0': + optional: true + + '@esbuild/darwin-arm64@0.20.2': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.24.0': + optional: true + + '@esbuild/darwin-x64@0.20.2': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.24.0': + optional: true + + '@esbuild/freebsd-arm64@0.20.2': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.24.0': + optional: true + + '@esbuild/freebsd-x64@0.20.2': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.24.0': + optional: true + + '@esbuild/linux-arm64@0.20.2': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.24.0': + optional: true + + '@esbuild/linux-arm@0.20.2': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-arm@0.24.0': + optional: true + + '@esbuild/linux-ia32@0.20.2': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.24.0': + optional: true + + '@esbuild/linux-loong64@0.20.2': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.24.0': + optional: true + + '@esbuild/linux-mips64el@0.20.2': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.24.0': + optional: true + + '@esbuild/linux-ppc64@0.20.2': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.24.0': + optional: true + + '@esbuild/linux-riscv64@0.20.2': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.24.0': + optional: true + + '@esbuild/linux-s390x@0.20.2': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.24.0': + optional: true + + '@esbuild/linux-x64@0.20.2': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/linux-x64@0.24.0': + optional: true + + '@esbuild/netbsd-x64@0.20.2': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.24.0': + optional: true + + '@esbuild/openbsd-arm64@0.24.0': + optional: true + + '@esbuild/openbsd-x64@0.20.2': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.24.0': + optional: true + + '@esbuild/sunos-x64@0.20.2': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.24.0': + optional: true + + '@esbuild/win32-arm64@0.20.2': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.24.0': + optional: true + + '@esbuild/win32-ia32@0.20.2': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.24.0': + optional: true + + '@esbuild/win32-x64@0.20.2': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@esbuild/win32-x64@0.24.0': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.11.0': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.0': {} + + '@fastify/ajv-compiler@3.6.0': + dependencies: + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + fast-uri: 2.4.0 + + '@fastify/busboy@2.1.1': {} + + '@fastify/error@3.4.1': {} + + '@fastify/fast-json-stringify-compiler@4.3.0': + dependencies: + fast-json-stringify: 5.16.1 + + '@fastify/merge-json-schemas@0.1.1': + dependencies: + fast-deep-equal: 3.1.3 + + '@fastify/websocket@8.3.1': + dependencies: + fastify-plugin: 4.5.1 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@humanwhocodes/config-array@0.11.14': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@iarna/toml@2.2.5': {} + + '@inquirer/confirm@5.0.2(@types/node@18.19.28)': + dependencies: + '@inquirer/core': 10.1.0(@types/node@18.19.28) + '@inquirer/type': 3.0.1(@types/node@18.19.28) + '@types/node': 18.19.28 + + '@inquirer/core@10.1.0(@types/node@18.19.28)': + dependencies: + '@inquirer/figures': 1.0.8 + '@inquirer/type': 3.0.1(@types/node@18.19.28) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + transitivePeerDependencies: + - '@types/node' + + '@inquirer/figures@1.0.8': {} + + '@inquirer/type@3.0.1(@types/node@18.19.28)': + dependencies: + '@types/node': 18.19.28 + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@miniflare/cache@2.14.4': + dependencies: + '@miniflare/core': 2.14.4 + '@miniflare/shared': 2.14.4 + http-cache-semantics: 4.1.1 + undici: 5.28.4 + + '@miniflare/core@2.14.4': + dependencies: + '@iarna/toml': 2.2.5 + '@miniflare/queues': 2.14.4 + '@miniflare/shared': 2.14.4 + '@miniflare/watcher': 2.14.4 + busboy: 1.6.0 + dotenv: 10.0.0 + kleur: 4.1.5 + set-cookie-parser: 2.6.0 + undici: 5.28.4 + urlpattern-polyfill: 4.0.3 + + '@miniflare/d1@2.14.4': + dependencies: + '@miniflare/core': 2.14.4 + '@miniflare/shared': 2.14.4 + + '@miniflare/durable-objects@2.14.4': + dependencies: + '@miniflare/core': 2.14.4 + '@miniflare/shared': 2.14.4 + '@miniflare/storage-memory': 2.14.4 + undici: 5.28.4 + + '@miniflare/html-rewriter@2.14.4': + dependencies: + '@miniflare/core': 2.14.4 + '@miniflare/shared': 2.14.4 + html-rewriter-wasm: 0.4.1 + undici: 5.28.4 + + '@miniflare/kv@2.14.4': + dependencies: + '@miniflare/shared': 2.14.4 + + '@miniflare/queues@2.14.4': + dependencies: + '@miniflare/shared': 2.14.4 + + '@miniflare/r2@2.14.4': + dependencies: + '@miniflare/core': 2.14.4 + '@miniflare/shared': 2.14.4 + undici: 5.28.4 + + '@miniflare/runner-vm@2.14.4': + dependencies: + '@miniflare/shared': 2.14.4 + + '@miniflare/shared-test-environment@2.14.4': + dependencies: + '@cloudflare/workers-types': 4.20240329.0 + '@miniflare/cache': 2.14.4 + '@miniflare/core': 2.14.4 + '@miniflare/d1': 2.14.4 + '@miniflare/durable-objects': 2.14.4 + '@miniflare/html-rewriter': 2.14.4 + '@miniflare/kv': 2.14.4 + '@miniflare/queues': 2.14.4 + '@miniflare/r2': 2.14.4 + '@miniflare/shared': 2.14.4 + '@miniflare/sites': 2.14.4 + '@miniflare/storage-memory': 2.14.4 + '@miniflare/web-sockets': 2.14.4 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@miniflare/shared@2.14.4': + dependencies: + '@types/better-sqlite3': 7.6.9 + kleur: 4.1.5 + npx-import: 1.1.4 + picomatch: 2.3.1 + + '@miniflare/sites@2.14.4': + dependencies: + '@miniflare/kv': 2.14.4 + '@miniflare/shared': 2.14.4 + '@miniflare/storage-file': 2.14.4 + + '@miniflare/storage-file@2.14.4': + dependencies: + '@miniflare/shared': 2.14.4 + '@miniflare/storage-memory': 2.14.4 + + '@miniflare/storage-memory@2.14.4': + dependencies: + '@miniflare/shared': 2.14.4 + + '@miniflare/watcher@2.14.4': + dependencies: + '@miniflare/shared': 2.14.4 + + '@miniflare/web-sockets@2.14.4': + dependencies: + '@miniflare/core': 2.14.4 + '@miniflare/shared': 2.14.4 + undici: 5.28.4 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@mswjs/interceptors@0.37.3': + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + strict-event-emitter: 0.5.1 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@open-draft/deferred-promise@2.2.0': {} + + '@open-draft/logger@0.3.0': + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.3 + + '@open-draft/test-server@0.4.2': + dependencies: + '@types/body-parser': 1.19.5 + '@types/cors': 2.8.17 + '@types/express': 4.17.21 + cors: 2.8.5 + express: 4.19.2 + outvariant: 1.4.3 + socket.io: 4.7.5 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@open-draft/until@2.1.0': {} + + '@ossjs/release@0.8.1': + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/until': 2.1.0 + '@types/conventional-commits-parser': 3.0.6 + '@types/issue-parser': 3.0.5 + '@types/node': 16.18.93 + '@types/node-fetch': 2.6.11 + '@types/rc': 1.2.4 + '@types/registry-auth-token': 4.2.4 + '@types/semver': 7.5.8 + '@types/yargs': 17.0.32 + conventional-commits-parser: 5.0.0 + get-stream: 6.0.1 + git-log-parser: 1.2.0 + issue-parser: 6.0.0 + node-fetch: 2.6.7 + outvariant: 1.4.3 + pino: 7.11.0 + pino-pretty: 7.6.1 + rc: 1.2.8 + registry-auth-token: 4.2.2 + semver: 7.6.0 + yargs: 17.7.2 + transitivePeerDependencies: + - encoding + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pkgr/core@0.1.1': {} + + '@playwright/test@1.49.0': + dependencies: + playwright: 1.49.0 + + '@rollup/plugin-node-resolve@15.3.0(rollup@4.13.2)': + dependencies: + '@rollup/pluginutils': 5.1.3(rollup@4.13.2) + '@types/resolve': 1.20.2 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.8 + optionalDependencies: + rollup: 4.13.2 + + '@rollup/pluginutils@5.1.3(rollup@4.13.2)': + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.13.2 + + '@rollup/rollup-android-arm-eabi@4.13.2': + optional: true + + '@rollup/rollup-android-arm-eabi@4.27.4': + optional: true + + '@rollup/rollup-android-arm64@4.13.2': + optional: true + + '@rollup/rollup-android-arm64@4.27.4': + optional: true + + '@rollup/rollup-darwin-arm64@4.13.2': + optional: true + + '@rollup/rollup-darwin-arm64@4.27.4': + optional: true + + '@rollup/rollup-darwin-x64@4.13.2': + optional: true + + '@rollup/rollup-darwin-x64@4.27.4': + optional: true + + '@rollup/rollup-freebsd-arm64@4.27.4': + optional: true + + '@rollup/rollup-freebsd-x64@4.27.4': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.13.2': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.27.4': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.27.4': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.13.2': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.27.4': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.13.2': optional: true - /@rollup/rollup-linux-arm64-musl@4.27.4: - resolution: {integrity: sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-arm64-musl@4.27.4': optional: true - /@rollup/rollup-linux-powerpc64le-gnu@4.13.2: - resolution: {integrity: sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ==} - cpu: [ppc64le] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-powerpc64le-gnu@4.13.2': optional: true - /@rollup/rollup-linux-powerpc64le-gnu@4.27.4: - resolution: {integrity: sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-powerpc64le-gnu@4.27.4': optional: true - /@rollup/rollup-linux-riscv64-gnu@4.13.2: - resolution: {integrity: sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw==} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-riscv64-gnu@4.13.2': optional: true - /@rollup/rollup-linux-riscv64-gnu@4.27.4: - resolution: {integrity: sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-riscv64-gnu@4.27.4': optional: true - /@rollup/rollup-linux-s390x-gnu@4.13.2: - resolution: {integrity: sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg==} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-s390x-gnu@4.13.2': optional: true - /@rollup/rollup-linux-s390x-gnu@4.27.4: - resolution: {integrity: sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-s390x-gnu@4.27.4': optional: true - /@rollup/rollup-linux-x64-gnu@4.13.2: - resolution: {integrity: sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-x64-gnu@4.13.2': optional: true - /@rollup/rollup-linux-x64-gnu@4.27.4: - resolution: {integrity: sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-x64-gnu@4.27.4': optional: true - /@rollup/rollup-linux-x64-musl@4.13.2: - resolution: {integrity: sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-x64-musl@4.13.2': optional: true - /@rollup/rollup-linux-x64-musl@4.27.4: - resolution: {integrity: sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-x64-musl@4.27.4': optional: true - /@rollup/rollup-win32-arm64-msvc@4.13.2: - resolution: {integrity: sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA==} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true + '@rollup/rollup-win32-arm64-msvc@4.13.2': optional: true - /@rollup/rollup-win32-arm64-msvc@4.27.4: - resolution: {integrity: sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true + '@rollup/rollup-win32-arm64-msvc@4.27.4': optional: true - /@rollup/rollup-win32-ia32-msvc@4.13.2: - resolution: {integrity: sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw==} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true + '@rollup/rollup-win32-ia32-msvc@4.13.2': optional: true - /@rollup/rollup-win32-ia32-msvc@4.27.4: - resolution: {integrity: sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true + '@rollup/rollup-win32-ia32-msvc@4.27.4': optional: true - /@rollup/rollup-win32-x64-msvc@4.13.2: - resolution: {integrity: sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ==} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + '@rollup/rollup-win32-x64-msvc@4.13.2': optional: true - /@rollup/rollup-win32-x64-msvc@4.27.4: - resolution: {integrity: sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + '@rollup/rollup-win32-x64-msvc@4.27.4': optional: true - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - dev: true + '@sinclair/typebox@0.27.8': {} - /@socket.io/component-emitter@3.1.0: - resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} + '@socket.io/component-emitter@3.1.0': {} - /@tsconfig/node10@1.0.11: - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - dev: true + '@tsconfig/node10@1.0.11': {} - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true + '@tsconfig/node12@1.0.11': {} - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true + '@tsconfig/node14@1.0.3': {} - /@tsconfig/node16@1.0.4: - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - dev: true + '@tsconfig/node16@1.0.4': {} - /@types/accepts@1.3.7: - resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} + '@types/accepts@1.3.7': dependencies: '@types/node': 18.19.28 - dev: true - /@types/better-sqlite3@7.6.9: - resolution: {integrity: sha512-FvktcujPDj9XKMJQWFcl2vVl7OdRIqsSRX9b0acWwTmwLK9CF2eqo/FRcmMLNpugKoX/avA6pb7TorDLmpgTnQ==} + '@types/better-sqlite3@7.6.9': dependencies: '@types/node': 18.19.28 - dev: true - /@types/body-parser@1.19.5: - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 '@types/node': 18.19.28 - dev: true - /@types/command-line-args@5.2.3: - resolution: {integrity: sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==} - dev: true + '@types/command-line-args@5.2.3': {} - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/connect@3.4.38': dependencies: '@types/node': 18.19.28 - dev: true - /@types/content-disposition@0.5.8: - resolution: {integrity: sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==} - dev: true + '@types/content-disposition@0.5.8': {} - /@types/conventional-commits-parser@3.0.6: - resolution: {integrity: sha512-z4crlplLzL9uA5kbE4ZghAf5RbrEr1UL/uNGGgxYbJjI0jRBjuYKuasbo13ANZsSapLTM2DLZk6LDcjemow4qQ==} + '@types/conventional-commits-parser@3.0.6': dependencies: '@types/node': 18.19.28 - dev: true - /@types/conventional-commits-parser@5.0.0: - resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==} - requiresBuild: true + '@types/conventional-commits-parser@5.0.0': dependencies: '@types/node': 18.19.28 - dev: true optional: true - /@types/cookie@0.4.1: - resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} + '@types/cookie@0.4.1': {} - /@types/cookie@0.6.0: - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - dev: false + '@types/cookie@0.6.0': {} - /@types/cookies@0.9.0: - resolution: {integrity: sha512-40Zk8qR147RABiQ7NQnBzWzDcjKzNrntB5BAmeGCb2p/MIyOE+4BVvc17wumsUqUw00bJYqoXFHYygQnEFh4/Q==} + '@types/cookies@0.9.0': dependencies: '@types/connect': 3.4.38 '@types/express': 4.17.21 '@types/keygrip': 1.0.6 '@types/node': 18.19.28 - dev: true - /@types/cors@2.8.17: - resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} + '@types/cors@2.8.17': dependencies: '@types/node': 18.19.28 - /@types/debug@4.1.12: - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/debug@4.1.12': dependencies: '@types/ms': 0.7.34 - dev: true - /@types/eslint-scope@3.7.7: - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 8.56.7 '@types/estree': 1.0.6 - dev: true - /@types/eslint@8.56.7: - resolution: {integrity: sha512-SjDvI/x3zsZnOkYZ3lCt9lOZWZLB2jIlNKz+LBgCtDurK0JZcwucxYHn1w2BJkD34dgX9Tjnak0txtq4WTggEA==} + '@types/eslint@8.56.7': dependencies: '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 - dev: true - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: true + '@types/estree@1.0.5': {} - /@types/estree@1.0.6: - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - dev: true + '@types/estree@1.0.6': {} - /@types/express-serve-static-core@4.17.43: - resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==} + '@types/express-serve-static-core@4.17.43': dependencies: '@types/node': 18.19.28 '@types/qs': 6.9.14 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 - dev: true - /@types/express@4.17.21: - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + '@types/express@4.17.21': dependencies: '@types/body-parser': 1.19.5 '@types/express-serve-static-core': 4.17.43 '@types/qs': 6.9.14 '@types/serve-static': 1.15.5 - dev: true - /@types/fs-extra@11.0.4: - resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 '@types/node': 18.19.28 - dev: true - /@types/glob@8.1.0: - resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} + '@types/glob@8.1.0': dependencies: '@types/minimatch': 5.1.2 '@types/node': 18.19.28 - dev: true - /@types/http-assert@1.5.5: - resolution: {integrity: sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g==} - dev: true + '@types/http-assert@1.5.5': {} - /@types/http-errors@2.0.4: - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - dev: true + '@types/http-errors@2.0.4': {} - /@types/issue-parser@3.0.5: - resolution: {integrity: sha512-fvOrnb7uS6qRme16tfyxy9SjOgx47Krkt/ilLS7axP3SWtJb9GZlduWX2bAsJOnr1HuCwJh88rCidzCZ1LwuZg==} - dev: true + '@types/issue-parser@3.0.5': {} - /@types/json-bigint@1.0.4: - resolution: {integrity: sha512-ydHooXLbOmxBbubnA7Eh+RpBzuaIiQjh8WGJYQB50JFGFrdxW7JzVlyEV7fAXw0T2sqJ1ysTneJbiyNLqZRAag==} - dev: true + '@types/json-bigint@1.0.4': {} - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true + '@types/json-schema@7.0.15': {} - /@types/jsonfile@6.1.4: - resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + '@types/jsonfile@6.1.4': dependencies: '@types/node': 18.19.28 - dev: true - /@types/keygrip@1.0.6: - resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==} - dev: true + '@types/keygrip@1.0.6': {} - /@types/koa-compose@3.2.8: - resolution: {integrity: sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==} + '@types/koa-compose@3.2.8': dependencies: '@types/koa': 2.15.0 - dev: true - /@types/koa@2.15.0: - resolution: {integrity: sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==} + '@types/koa@2.15.0': dependencies: '@types/accepts': 1.3.7 '@types/content-disposition': 0.5.8 @@ -2284,138 +6319,78 @@ packages: '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.8 '@types/node': 18.19.28 - dev: true - /@types/mime@1.3.5: - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - dev: true + '@types/mime@1.3.5': {} - /@types/mime@4.0.0: - resolution: {integrity: sha512-5eEkJZ/BLvTE3vXGKkWlyTSUVZuzj23Wj8PoyOq2lt5I3CYbiLBOPb3XmCW6QcuOibIUE6emHXHt9E/F/rCa6w==} - deprecated: This is a stub types definition. mime provides its own type definitions, so you do not need this installed. + '@types/mime@4.0.0': dependencies: mime: 4.0.1 - dev: true - /@types/minimatch@5.1.2: - resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - dev: true + '@types/minimatch@5.1.2': {} - /@types/minimist@1.2.5: - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - dev: true + '@types/minimist@1.2.5': {} - /@types/ms@0.7.34: - resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - dev: true + '@types/ms@0.7.34': {} - /@types/mustache@4.2.5: - resolution: {integrity: sha512-PLwiVvTBg59tGFL/8VpcGvqOu3L4OuveNvPi0EYbWchRdEVP++yRUXJPFl+CApKEq13017/4Nf7aQ5lTtHUNsA==} - dev: true + '@types/mustache@4.2.5': {} - /@types/node-fetch@2.6.11: - resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} + '@types/node-fetch@2.6.11': dependencies: '@types/node': 18.19.28 form-data: 4.0.0 - dev: true - /@types/node@16.18.93: - resolution: {integrity: sha512-epWuohp6c0bQt0j3RYCiP9x52axHVn+CjS1Rx1VjPwF+ySg8lrigH3yXGs88XqnA+jGM2qnSMuFTsBxft+hO1Q==} - dev: true + '@types/node@16.18.93': {} - /@types/node@18.19.28: - resolution: {integrity: sha512-J5cOGD9n4x3YGgVuaND6khm5x07MMdAKkRyXnjVR6KFhLMNh2yONGiP7Z+4+tBOt5mK+GvDTiacTOVGGpqiecw==} + '@types/node@18.19.28': dependencies: undici-types: 5.26.5 - /@types/normalize-package-data@2.4.4: - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - dev: true + '@types/normalize-package-data@2.4.4': {} - /@types/parse5@6.0.3: - resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} - dev: true + '@types/parse5@6.0.3': {} - /@types/qs@6.9.14: - resolution: {integrity: sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==} - dev: true + '@types/qs@6.9.14': {} - /@types/range-parser@1.2.7: - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - dev: true + '@types/range-parser@1.2.7': {} - /@types/rc@1.2.4: - resolution: {integrity: sha512-xD6+epQoMH79A1uwmJIq25D+XZ57jUzCQ1DGSvs3tGKdx7QDYOOaMh6m5KBkEIW4+Cy5++bZ7NLDfdpNiYVKYA==} + '@types/rc@1.2.4': dependencies: '@types/minimist': 1.2.5 - dev: true - /@types/registry-auth-token@4.2.4: - resolution: {integrity: sha512-NsLrPRVZBHXXcDa/3vB3Aqla9xZ0bY8GRcD0UlhpMPeNcht540agdE6mOjYB2BZi/tIHxWD5qtRZ6YDZ4hTiqg==} - dev: true + '@types/registry-auth-token@4.2.4': {} - /@types/resolve@1.20.2: - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - dev: true + '@types/resolve@1.20.2': {} - /@types/semver@7.5.8: - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - dev: true + '@types/semver@7.5.8': {} - /@types/send@0.17.4: - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 '@types/node': 18.19.28 - dev: true - /@types/serve-static@1.15.5: - resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} + '@types/serve-static@1.15.5': dependencies: '@types/http-errors': 2.0.4 '@types/mime': 4.0.0 '@types/node': 18.19.28 - dev: true - /@types/statuses@2.0.5: - resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} - dev: false + '@types/statuses@2.0.5': {} - /@types/tough-cookie@4.0.5: - resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - dev: false + '@types/tough-cookie@4.0.5': {} - /@types/uuid@8.3.4: - resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} - dev: true + '@types/uuid@8.3.4': {} - /@types/ws@7.4.7: - resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + '@types/ws@7.4.7': dependencies: '@types/node': 18.19.28 - dev: true - /@types/yargs-parser@21.0.3: - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - dev: true + '@types/yargs-parser@21.0.3': {} - /@types/yargs@17.0.32: - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + '@types/yargs@17.0.32': dependencies: '@types/yargs-parser': 21.0.3 - dev: true - /@typescript-eslint/eslint-plugin@8.16.0(@typescript-eslint/parser@8.16.0)(eslint@8.57.0)(typescript@5.5.2): - resolution: {integrity: sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/eslint-plugin@8.16.0(@typescript-eslint/parser@8.16.0(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(typescript@5.5.2)': dependencies: '@eslint-community/regexpp': 4.11.0 '@typescript-eslint/parser': 8.16.0(eslint@8.57.0)(typescript@5.5.2) @@ -2428,20 +6403,12 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 ts-api-utils: 1.3.0(typescript@5.5.2) + optionalDependencies: typescript: 5.5.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@8.16.0(eslint@8.57.0)(typescript@5.5.2): - resolution: {integrity: sha512-D7DbgGFtsqIPIFMPJwCad9Gfi/hC0PWErRRHFnaCWoEDYi5tQUDiJCTmGUbBiLzjqAck4KcXt9Ayj0CNlIrF+w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@8.16.0(eslint@8.57.0)(typescript@5.5.2)': dependencies: '@typescript-eslint/scope-manager': 8.16.0 '@typescript-eslint/types': 8.16.0 @@ -2449,52 +6416,31 @@ packages: '@typescript-eslint/visitor-keys': 8.16.0 debug: 4.3.4 eslint: 8.57.0 + optionalDependencies: typescript: 5.5.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/scope-manager@8.16.0: - resolution: {integrity: sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.16.0': dependencies: '@typescript-eslint/types': 8.16.0 '@typescript-eslint/visitor-keys': 8.16.0 - dev: true - /@typescript-eslint/type-utils@8.16.0(eslint@8.57.0)(typescript@5.5.2): - resolution: {integrity: sha512-IqZHGG+g1XCWX9NyqnI/0CX5LL8/18awQqmkZSl2ynn8F76j579dByc0jhfVSnSnhf7zv76mKBQv9HQFKvDCgg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/type-utils@8.16.0(eslint@8.57.0)(typescript@5.5.2)': dependencies: '@typescript-eslint/typescript-estree': 8.16.0(typescript@5.5.2) '@typescript-eslint/utils': 8.16.0(eslint@8.57.0)(typescript@5.5.2) debug: 4.3.4 eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.5.2) + optionalDependencies: typescript: 5.5.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/types@8.16.0: - resolution: {integrity: sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - dev: true + '@typescript-eslint/types@8.16.0': {} - /@typescript-eslint/typescript-estree@8.16.0(typescript@5.5.2): - resolution: {integrity: sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@8.16.0(typescript@5.5.2)': dependencies: '@typescript-eslint/types': 8.16.0 '@typescript-eslint/visitor-keys': 8.16.0 @@ -2504,90 +6450,62 @@ packages: minimatch: 9.0.4 semver: 7.6.0 ts-api-utils: 1.3.0(typescript@5.5.2) + optionalDependencies: typescript: 5.5.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/utils@8.16.0(eslint@8.57.0)(typescript@5.5.2): - resolution: {integrity: sha512-C1zRy/mOL8Pj157GiX4kaw7iyRLKfJXBR3L82hk5kS/GyHcOFmy4YUq/zfZti72I9wnuQtA/+xzft4wCC8PJdA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/utils@8.16.0(eslint@8.57.0)(typescript@5.5.2)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@typescript-eslint/scope-manager': 8.16.0 '@typescript-eslint/types': 8.16.0 '@typescript-eslint/typescript-estree': 8.16.0(typescript@5.5.2) eslint: 8.57.0 + optionalDependencies: typescript: 5.5.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/visitor-keys@8.16.0: - resolution: {integrity: sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.16.0': dependencies: '@typescript-eslint/types': 8.16.0 eslint-visitor-keys: 4.2.0 - dev: true - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true + '@ungap/structured-clone@1.2.0': {} - /@vitest/expect@1.4.0: - resolution: {integrity: sha512-Jths0sWCJZ8BxjKe+p+eKsoqev1/T8lYcrjavEaz8auEJ4jAVY0GwW3JKmdVU4mmNPLPHixh4GNXP7GFtAiDHA==} + '@vitest/expect@1.4.0': dependencies: '@vitest/spy': 1.4.0 '@vitest/utils': 1.4.0 chai: 4.4.1 - dev: true - /@vitest/runner@1.4.0: - resolution: {integrity: sha512-EDYVSmesqlQ4RD2VvWo3hQgTJ7ZrFQ2VSJdfiJiArkCerDAGeyF1i6dHkmySqk573jLp6d/cfqCN+7wUB5tLgg==} + '@vitest/runner@1.4.0': dependencies: '@vitest/utils': 1.4.0 p-limit: 5.0.0 pathe: 1.1.2 - dev: true - /@vitest/snapshot@1.4.0: - resolution: {integrity: sha512-saAFnt5pPIA5qDGxOHxJ/XxhMFKkUSBJmVt5VgDsAqPTX6JP326r5C/c9UuCMPoXNzuudTPsYDZCoJ5ilpqG2A==} + '@vitest/snapshot@1.4.0': dependencies: magic-string: 0.30.8 pathe: 1.1.2 pretty-format: 29.7.0 - dev: true - /@vitest/spy@1.4.0: - resolution: {integrity: sha512-Ywau/Qs1DzM/8Uc+yA77CwSegizMlcgTJuYGAi0jujOteJOUf1ujunHThYo243KG9nAyWT3L9ifPYZ5+As/+6Q==} + '@vitest/spy@1.4.0': dependencies: tinyspy: 2.2.1 - dev: true - /@vitest/utils@1.4.0: - resolution: {integrity: sha512-mx3Yd1/6e2Vt/PUC98DcqTirtfxUyAZ32uK82r8rZzbtBeBo+nqgnjx/LvqQdWsrvNtm14VmurNgcf4nqY5gJg==} + '@vitest/utils@1.4.0': dependencies: diff-sequences: 29.6.3 estree-walker: 3.0.3 loupe: 2.3.7 pretty-format: 29.7.0 - dev: true - /@web/config-loader@0.3.2: - resolution: {integrity: sha512-Vrjv/FexBGmAdnCYpJKLHX1dfT1UaUdvHmX1JRaWos9OvDf/tFznYJ5SpJwww3Rl87/ewvLSYG7kfsMqEAsizQ==} - engines: {node: '>=18.0.0'} - dev: true + '@web/config-loader@0.3.2': {} - /@web/dev-server-core@0.7.4: - resolution: {integrity: sha512-nHSNrJ1J9GjmSceKNHpWRMjvpfE2NTV9EYUffPIr7j0sIV59gK7NI/4+9slotJ/ODXw0+e1gSeJshTOhjjVNxQ==} - engines: {node: '>=18.0.0'} + '@web/dev-server-core@0.7.4': dependencies: '@types/koa': 2.15.0 '@types/ws': 7.4.7 @@ -2611,11 +6529,8 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true - /@web/dev-server-rollup@0.6.4: - resolution: {integrity: sha512-sJZfTGCCrdku5xYnQQG51odGI092hKY9YFM0X3Z0tRY3iXKXcYRaLZrErw5KfCxr6g0JRuhe4BBhqXTA5Q2I3Q==} - engines: {node: '>=18.0.0'} + '@web/dev-server-rollup@0.6.4': dependencies: '@rollup/plugin-node-resolve': 15.3.0(rollup@4.13.2) '@web/dev-server-core': 0.7.4 @@ -2627,12 +6542,8 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true - /@web/dev-server@0.4.6: - resolution: {integrity: sha512-jj/1bcElAy5EZet8m2CcUdzxT+CRvUjIXGh8Lt7vxtthkN9PzY9wlhWx/9WOs5iwlnG1oj0VGo6f/zvbPO0s9w==} - engines: {node: '>=18.0.0'} - hasBin: true + '@web/dev-server@0.4.6': dependencies: '@babel/code-frame': 7.24.2 '@types/command-line-args': 5.2.3 @@ -2652,74 +6563,49 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true - /@web/parse5-utils@2.1.0: - resolution: {integrity: sha512-GzfK5disEJ6wEjoPwx8AVNwUe9gYIiwc+x//QYxYDAFKUp4Xb1OJAGLc2l2gVrSQmtPGLKrTRcW90Hv4pEq1qA==} - engines: {node: '>=18.0.0'} + '@web/parse5-utils@2.1.0': dependencies: '@types/parse5': 6.0.3 parse5: 6.0.1 - dev: true - /@webassemblyjs/ast@1.12.1: - resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + '@webassemblyjs/ast@1.12.1': dependencies: '@webassemblyjs/helper-numbers': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - dev: true - /@webassemblyjs/floating-point-hex-parser@1.11.6: - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} - dev: true + '@webassemblyjs/floating-point-hex-parser@1.11.6': {} - /@webassemblyjs/helper-api-error@1.11.6: - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} - dev: true + '@webassemblyjs/helper-api-error@1.11.6': {} - /@webassemblyjs/helper-buffer@1.12.1: - resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} - dev: true + '@webassemblyjs/helper-buffer@1.12.1': {} - /@webassemblyjs/helper-numbers@1.11.6: - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + '@webassemblyjs/helper-numbers@1.11.6': dependencies: '@webassemblyjs/floating-point-hex-parser': 1.11.6 '@webassemblyjs/helper-api-error': 1.11.6 '@xtuc/long': 4.2.2 - dev: true - /@webassemblyjs/helper-wasm-bytecode@1.11.6: - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} - dev: true + '@webassemblyjs/helper-wasm-bytecode@1.11.6': {} - /@webassemblyjs/helper-wasm-section@1.12.1: - resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + '@webassemblyjs/helper-wasm-section@1.12.1': dependencies: '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-buffer': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/wasm-gen': 1.12.1 - dev: true - /@webassemblyjs/ieee754@1.11.6: - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + '@webassemblyjs/ieee754@1.11.6': dependencies: '@xtuc/ieee754': 1.2.0 - dev: true - /@webassemblyjs/leb128@1.11.6: - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + '@webassemblyjs/leb128@1.11.6': dependencies: '@xtuc/long': 4.2.2 - dev: true - /@webassemblyjs/utf8@1.11.6: - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} - dev: true + '@webassemblyjs/utf8@1.11.6': {} - /@webassemblyjs/wasm-edit@1.12.1: - resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + '@webassemblyjs/wasm-edit@1.12.1': dependencies: '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-buffer': 1.12.1 @@ -2729,29 +6615,23 @@ packages: '@webassemblyjs/wasm-opt': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 '@webassemblyjs/wast-printer': 1.12.1 - dev: true - /@webassemblyjs/wasm-gen@1.12.1: - resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + '@webassemblyjs/wasm-gen@1.12.1': dependencies: '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 - dev: true - /@webassemblyjs/wasm-opt@1.12.1: - resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + '@webassemblyjs/wasm-opt@1.12.1': dependencies: '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-buffer': 1.12.1 '@webassemblyjs/wasm-gen': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 - dev: true - /@webassemblyjs/wasm-parser@1.12.1: - resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + '@webassemblyjs/wasm-parser@1.12.1': dependencies: '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-api-error': 1.11.6 @@ -2759,242 +6639,132 @@ packages: '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 - dev: true - /@webassemblyjs/wast-printer@1.12.1: - resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + '@webassemblyjs/wast-printer@1.12.1': dependencies: '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 - dev: true - /@xtuc/ieee754@1.2.0: - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - dev: true + '@xtuc/ieee754@1.2.0': {} - /@xtuc/long@4.2.2: - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - dev: true + '@xtuc/long@4.2.2': {} - /JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true + JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 through: 2.3.8 - dev: true - /abstract-logging@2.0.1: - resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} - dev: true + abstract-logging@2.0.1: {} - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} + accepts@1.3.8: dependencies: mime-types: 2.1.35 negotiator: 0.6.3 - /accepts@2.0.0: - resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} - engines: {node: '>= 0.6'} + accepts@2.0.0: dependencies: mime-types: 3.0.0 negotiator: 1.0.0 - dev: true - /acorn-jsx@5.3.2(acorn@8.12.1): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-jsx@5.3.2(acorn@8.12.1): dependencies: acorn: 8.12.1 - dev: true - /acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} - engines: {node: '>=0.4.0'} - dev: true + acorn-walk@8.3.2: {} - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@8.11.3: {} - /acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@8.12.1: {} - /acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@8.14.0: {} - /agent-base@7.1.1: - resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} - engines: {node: '>= 14'} + agent-base@7.1.1: dependencies: debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true - /ajv-formats@2.1.1(ajv@8.12.0): - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: + ajv-formats@2.1.1(ajv@8.12.0): + optionalDependencies: ajv: 8.12.0 - dev: true - /ajv-formats@3.0.1(ajv@8.12.0): - resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: + ajv-formats@3.0.1(ajv@8.12.0): + optionalDependencies: ajv: 8.12.0 - dev: true - /ajv-keywords@3.5.2(ajv@6.12.6): - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 + ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 - dev: true - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + ajv@8.12.0: dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 uri-js: 4.4.1 - dev: true - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 - /ansi-escapes@7.0.0: - resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} - engines: {node: '>=18'} + ansi-escapes@7.0.0: dependencies: environment: 1.1.0 - dev: true - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + ansi-regex@5.0.1: {} - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true + ansi-regex@6.0.1: {} - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 - dev: true - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - /ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: true + ansi-styles@5.2.0: {} - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: true + ansi-styles@6.2.1: {} - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true + any-promise@1.3.0: {} - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true + arg@4.1.3: {} - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + argparse@2.0.1: {} - /args@5.0.3: - resolution: {integrity: sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==} - engines: {node: '>= 6.0.0'} + args@5.0.3: dependencies: camelcase: 5.0.0 chalk: 2.4.2 leven: 2.1.0 mri: 1.1.4 - dev: true - /argv-formatter@1.0.0: - resolution: {integrity: sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==} - dev: true + argv-formatter@1.0.0: {} - /array-back@3.1.0: - resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} - engines: {node: '>=6'} - dev: true + array-back@3.1.0: {} - /array-back@6.2.2: - resolution: {integrity: sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==} - engines: {node: '>=12.17'} - dev: true + array-back@6.2.2: {} - /array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} + array-buffer-byte-length@1.0.1: dependencies: call-bind: 1.0.7 is-array-buffer: 3.0.4 - dev: true - /array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - dev: true + array-flatten@1.1.1: {} - /array-flatten@3.0.0: - resolution: {integrity: sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==} - dev: true + array-flatten@3.0.0: {} - /array-ify@1.0.0: - resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - dev: true + array-ify@1.0.0: {} - /array.prototype.reduce@1.0.7: - resolution: {integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==} - engines: {node: '>= 0.4'} + array.prototype.reduce@1.0.7: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -3003,11 +6773,8 @@ packages: es-errors: 1.3.0 es-object-atoms: 1.0.0 is-string: 1.0.7 - dev: true - /arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} + arraybuffer.prototype.slice@1.0.3: dependencies: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 @@ -3017,92 +6784,53 @@ packages: get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 - dev: true - /arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: true + arrify@1.0.1: {} - /assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - dev: true + assertion-error@1.1.0: {} - /async@2.6.4: - resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + async@2.6.4: dependencies: lodash: 4.17.21 - dev: true - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: true + asynckit@0.4.0: {} - /at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - dev: true + at-least-node@1.0.0: {} - /atomic-sleep@1.0.0: - resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} - engines: {node: '>=8.0.0'} - dev: true + atomic-sleep@1.0.0: {} - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 - dev: true - /avvio@8.4.0: - resolution: {integrity: sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==} + avvio@8.4.0: dependencies: '@fastify/error': 3.4.1 fastq: 1.17.1 - dev: true - /axios@1.7.8: - resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} + axios@1.7.8: dependencies: follow-redirects: 1.15.6 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - dev: true - /babel-helper-evaluate-path@0.5.0: - resolution: {integrity: sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==} - dev: true + babel-helper-evaluate-path@0.5.0: {} - /babel-helper-flip-expressions@0.4.3: - resolution: {integrity: sha512-rSrkRW4YQ2ETCWww9gbsWk4N0x1BOtln349Tk0dlCS90oT68WMLyGR7WvaMp3eAnsVrCqdUtC19lo1avyGPejA==} - dev: true + babel-helper-flip-expressions@0.4.3: {} - /babel-helper-is-nodes-equiv@0.0.1: - resolution: {integrity: sha512-ri/nsMFVRqXn7IyT5qW4/hIAGQxuYUFHa3qsxmPtbk6spZQcYlyDogfVpNm2XYOslH/ULS4VEJGUqQX5u7ACQw==} - dev: true + babel-helper-is-nodes-equiv@0.0.1: {} - /babel-helper-is-void-0@0.4.3: - resolution: {integrity: sha512-07rBV0xPRM3TM5NVJEOQEkECX3qnHDjaIbFvWYPv+T1ajpUiVLiqTfC+MmiZxY5KOL/Ec08vJdJD9kZiP9UkUg==} - dev: true + babel-helper-is-void-0@0.4.3: {} - /babel-helper-mark-eval-scopes@0.4.3: - resolution: {integrity: sha512-+d/mXPP33bhgHkdVOiPkmYoeXJ+rXRWi7OdhwpyseIqOS8CmzHQXHUp/+/Qr8baXsT0kjGpMHHofHs6C3cskdA==} - dev: true + babel-helper-mark-eval-scopes@0.4.3: {} - /babel-helper-remove-or-void@0.4.3: - resolution: {integrity: sha512-eYNceYtcGKpifHDir62gHJadVXdg9fAhuZEXiRQnJJ4Yi4oUTpqpNY//1pM4nVyjjDMPYaC2xSf0I+9IqVzwdA==} - dev: true + babel-helper-remove-or-void@0.4.3: {} - /babel-helper-to-multiple-sequence-expressions@0.5.0: - resolution: {integrity: sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==} - dev: true + babel-helper-to-multiple-sequence-expressions@0.5.0: {} - /babel-minify@0.5.2: - resolution: {integrity: sha512-H1ExfmvTxKWQZYcty1My6XRhoZm04/5MNb2DdZsC08r7y/rowipC0s9sszKA7jgW9mYYDdFnU68XohB+zP35qQ==} - hasBin: true + babel-minify@0.5.2: dependencies: '@babel/core': 7.24.3 babel-preset-minify: 0.5.2 @@ -3113,123 +6841,77 @@ packages: yargs-parser: 10.1.0 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-minify-builtins@0.5.0: - resolution: {integrity: sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==} - dev: true + babel-plugin-minify-builtins@0.5.0: {} - /babel-plugin-minify-constant-folding@0.5.0: - resolution: {integrity: sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==} + babel-plugin-minify-constant-folding@0.5.0: dependencies: babel-helper-evaluate-path: 0.5.0 - dev: true - /babel-plugin-minify-dead-code-elimination@0.5.2: - resolution: {integrity: sha512-krq9Lwi0QIzyAlcNBXTL4usqUvevB4BzktdEsb8srcXC1AaYqRJiAQw6vdKdJSaXbz6snBvziGr6ch/aoRCfpA==} + babel-plugin-minify-dead-code-elimination@0.5.2: dependencies: babel-helper-evaluate-path: 0.5.0 babel-helper-mark-eval-scopes: 0.4.3 babel-helper-remove-or-void: 0.4.3 lodash: 4.17.21 - dev: true - /babel-plugin-minify-flip-comparisons@0.4.3: - resolution: {integrity: sha512-8hNwgLVeJzpeLVOVArag2DfTkbKodzOHU7+gAZ8mGBFGPQHK6uXVpg3jh5I/F6gfi5Q5usWU2OKcstn1YbAV7A==} + babel-plugin-minify-flip-comparisons@0.4.3: dependencies: babel-helper-is-void-0: 0.4.3 - dev: true - /babel-plugin-minify-guarded-expressions@0.4.4: - resolution: {integrity: sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==} + babel-plugin-minify-guarded-expressions@0.4.4: dependencies: babel-helper-evaluate-path: 0.5.0 babel-helper-flip-expressions: 0.4.3 - dev: true - /babel-plugin-minify-infinity@0.4.3: - resolution: {integrity: sha512-X0ictxCk8y+NvIf+bZ1HJPbVZKMlPku3lgYxPmIp62Dp8wdtbMLSekczty3MzvUOlrk5xzWYpBpQprXUjDRyMA==} - dev: true + babel-plugin-minify-infinity@0.4.3: {} - /babel-plugin-minify-mangle-names@0.5.1: - resolution: {integrity: sha512-8KMichAOae2FHlipjNDTo2wz97MdEb2Q0jrn4NIRXzHH7SJ3c5TaNNBkeTHbk9WUsMnqpNUx949ugM9NFWewzw==} + babel-plugin-minify-mangle-names@0.5.1: dependencies: babel-helper-mark-eval-scopes: 0.4.3 - dev: true - /babel-plugin-minify-numeric-literals@0.4.3: - resolution: {integrity: sha512-5D54hvs9YVuCknfWywq0eaYDt7qYxlNwCqW9Ipm/kYeS9gYhJd0Rr/Pm2WhHKJ8DC6aIlDdqSBODSthabLSX3A==} - dev: true + babel-plugin-minify-numeric-literals@0.4.3: {} - /babel-plugin-minify-replace@0.5.0: - resolution: {integrity: sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==} - dev: true + babel-plugin-minify-replace@0.5.0: {} - /babel-plugin-minify-simplify@0.5.1: - resolution: {integrity: sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==} + babel-plugin-minify-simplify@0.5.1: dependencies: babel-helper-evaluate-path: 0.5.0 babel-helper-flip-expressions: 0.4.3 babel-helper-is-nodes-equiv: 0.0.1 babel-helper-to-multiple-sequence-expressions: 0.5.0 - dev: true - /babel-plugin-minify-type-constructors@0.4.3: - resolution: {integrity: sha512-4ADB0irJ/6BeXWHubjCJmrPbzhxDgjphBMjIjxCc25n4NGJ00NsYqwYt+F/OvE9RXx8KaSW7cJvp+iZX436tnQ==} + babel-plugin-minify-type-constructors@0.4.3: dependencies: babel-helper-is-void-0: 0.4.3 - dev: true - /babel-plugin-transform-inline-consecutive-adds@0.4.3: - resolution: {integrity: sha512-8D104wbzzI5RlxeVPYeQb9QsUyepiH1rAO5hpPpQ6NPRgQLpIVwkS/Nbx944pm4K8Z+rx7CgjPsFACz/VCBN0Q==} - dev: true + babel-plugin-transform-inline-consecutive-adds@0.4.3: {} - /babel-plugin-transform-member-expression-literals@6.9.4: - resolution: {integrity: sha512-Xq9/Rarpj+bjOZSl1nBbZYETsNEDDJSrb6Plb1sS3/36FukWFLLRysgecva5KZECjUJTrJoQqjJgtWToaflk5Q==} - dev: true + babel-plugin-transform-member-expression-literals@6.9.4: {} - /babel-plugin-transform-merge-sibling-variables@6.9.5: - resolution: {integrity: sha512-xj/KrWi6/uP+DrD844h66Qh2cZN++iugEIgH8QcIxhmZZPNP6VpOE9b4gP2FFW39xDAY43kCmYMM6U0QNKN8fw==} - dev: true + babel-plugin-transform-merge-sibling-variables@6.9.5: {} - /babel-plugin-transform-minify-booleans@6.9.4: - resolution: {integrity: sha512-9pW9ePng6DZpzGPalcrULuhSCcauGAbn8AeU3bE34HcDkGm8Ldt0ysjGkyb64f0K3T5ilV4mriayOVv5fg0ASA==} - dev: true + babel-plugin-transform-minify-booleans@6.9.4: {} - /babel-plugin-transform-property-literals@6.9.4: - resolution: {integrity: sha512-Pf8JHTjTPxecqVyL6KSwD/hxGpoTZjiEgV7nCx0KFQsJYM0nuuoCajbg09KRmZWeZbJ5NGTySABYv8b/hY1eEA==} + babel-plugin-transform-property-literals@6.9.4: dependencies: esutils: 2.0.3 - dev: true - /babel-plugin-transform-regexp-constructors@0.4.3: - resolution: {integrity: sha512-JjymDyEyRNhAoNFp09y/xGwYVYzT2nWTGrBrWaL6eCg2m+B24qH2jR0AA8V8GzKJTgC8NW6joJmc6nabvWBD/g==} - dev: true + babel-plugin-transform-regexp-constructors@0.4.3: {} - /babel-plugin-transform-remove-console@6.9.4: - resolution: {integrity: sha512-88blrUrMX3SPiGkT1GnvVY8E/7A+k6oj3MNvUtTIxJflFzXTw1bHkuJ/y039ouhFMp2prRn5cQGzokViYi1dsg==} - dev: true + babel-plugin-transform-remove-console@6.9.4: {} - /babel-plugin-transform-remove-debugger@6.9.4: - resolution: {integrity: sha512-Kd+eTBYlXfwoFzisburVwrngsrz4xh9I0ppoJnU/qlLysxVBRgI4Pj+dk3X8F5tDiehp3hhP8oarRMT9v2Z3lw==} - dev: true + babel-plugin-transform-remove-debugger@6.9.4: {} - /babel-plugin-transform-remove-undefined@0.5.0: - resolution: {integrity: sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==} + babel-plugin-transform-remove-undefined@0.5.0: dependencies: babel-helper-evaluate-path: 0.5.0 - dev: true - /babel-plugin-transform-simplify-comparison-operators@6.9.4: - resolution: {integrity: sha512-GLInxhGAQWJ9YIdjwF6dAFlmh4U+kN8pL6Big7nkDzHoZcaDQOtBm28atEhQJq6m9GpAovbiGEShKqXv4BSp0A==} - dev: true + babel-plugin-transform-simplify-comparison-operators@6.9.4: {} - /babel-plugin-transform-undefined-to-void@6.9.4: - resolution: {integrity: sha512-D2UbwxawEY1xVc9svYAUZQM2xarwSNXue2qDIx6CeV2EuMGaes/0su78zlIDIAgE7BvnMw4UpmSo9fDy+znghg==} - dev: true + babel-plugin-transform-undefined-to-void@6.9.4: {} - /babel-preset-minify@0.5.2: - resolution: {integrity: sha512-v4GL+kk0TfovbRIKZnC3HPbu2cAGmPAby7BsOmuPdMJfHV+4FVdsGXTH/OOGQRKYdjemBuL1+MsE6mobobhe9w==} + babel-preset-minify@0.5.2: dependencies: babel-plugin-minify-builtins: 0.5.0 babel-plugin-minify-constant-folding: 0.5.0 @@ -3254,39 +6936,24 @@ packages: babel-plugin-transform-simplify-comparison-operators: 6.9.4 babel-plugin-transform-undefined-to-void: 6.9.4 lodash: 4.17.21 - dev: true - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + balanced-match@1.0.2: {} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true + base64-js@1.5.1: {} - /base64id@2.0.0: - resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} - engines: {node: ^4.5.0 || >= 5.9} + base64id@2.0.0: {} - /big.js@5.2.2: - resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - dev: true + big.js@5.2.2: {} - /bignumber.js@9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} - dev: true + bignumber.js@9.1.2: {} - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bl@4.1.0: dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - dev: true - /body-parser@1.20.2: - resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@1.20.2: dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -3302,11 +6969,8 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /body-parser@2.0.2: - resolution: {integrity: sha512-SNMk0OONlQ01uk8EPeiBvTW7W4ovpL5b1O3t1sjpPgfxOQ6BqQJ6XjxinDPR79Z6HdcD5zBBwr5ssiTlgdNztQ==} - engines: {node: '>=18'} + body-parser@2.0.2: dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -3320,170 +6984,98 @@ packages: type-is: 1.6.18 transitivePeerDependencies: - supports-color - dev: true - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - dev: true - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + braces@3.0.2: dependencies: fill-range: 7.0.1 - dev: true - /braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + braces@3.0.3: dependencies: fill-range: 7.1.1 - dev: true - /browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + browserslist@4.23.0: dependencies: caniuse-lite: 1.0.30001605 electron-to-chromium: 1.4.723 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) - dev: true - /browserslist@4.24.2: - resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + browserslist@4.24.2: dependencies: caniuse-lite: 1.0.30001684 electron-to-chromium: 1.5.67 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) - dev: true - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + buffer-from@1.1.2: {} - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@5.7.1: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true - /builtins@5.0.1: - resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} + builtins@5.0.1: dependencies: semver: 7.6.0 - dev: true - /bundle-require@5.0.0(esbuild@0.24.0): - resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - esbuild: '>=0.18' + bundle-require@5.0.0(esbuild@0.24.0): dependencies: esbuild: 0.24.0 load-tsconfig: 0.2.5 - dev: true - /busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} + busboy@1.6.0: dependencies: streamsearch: 1.1.0 - dev: true - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: true + bytes@3.1.2: {} - /cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - dev: true + cac@6.7.14: {} - /cache-content-type@1.0.1: - resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} - engines: {node: '>= 6.0.0'} + cache-content-type@1.0.1: dependencies: mime-types: 2.1.35 ylru: 1.4.0 - dev: true - /cachedir@2.3.0: - resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==} - engines: {node: '>=6'} - dev: true + cachedir@2.3.0: {} - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} + call-bind@1.0.7: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 set-function-length: 1.2.2 - dev: true - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true + callsites@3.1.0: {} - /camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} + camelcase-keys@6.2.2: dependencies: camelcase: 5.3.1 map-obj: 4.3.0 quick-lru: 4.0.1 - dev: true - /camelcase@4.1.0: - resolution: {integrity: sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==} - engines: {node: '>=4'} - dev: true + camelcase@4.1.0: {} - /camelcase@5.0.0: - resolution: {integrity: sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==} - engines: {node: '>=6'} - dev: true + camelcase@5.0.0: {} - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true + camelcase@5.3.1: {} - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: true + camelcase@6.3.0: {} - /caniuse-lite@1.0.30001605: - resolution: {integrity: sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==} - dev: true + caniuse-lite@1.0.30001605: {} - /caniuse-lite@1.0.30001684: - resolution: {integrity: sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==} - dev: true + caniuse-lite@1.0.30001684: {} - /chai@4.4.1: - resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} - engines: {node: '>=4'} + chai@4.4.1: dependencies: assertion-error: 1.1.0 check-error: 1.0.3 @@ -3492,195 +7084,112 @@ packages: loupe: 2.3.7 pathval: 1.1.1 type-detect: 4.0.8 - dev: true - /chalk-template@0.4.0: - resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} - engines: {node: '>=12'} + chalk-template@0.4.0: dependencies: chalk: 4.1.2 - dev: true - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - dev: true - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true + chalk@5.3.0: {} - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true + chardet@0.7.0: {} - /check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + check-error@1.0.3: dependencies: get-func-name: 2.0.2 - dev: true - /chokidar@4.0.1: - resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} - engines: {node: '>= 14.16.0'} + chokidar@4.0.1: dependencies: readdirp: 4.0.2 - dev: true - /chrome-trace-event@1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} - engines: {node: '>=6.0'} - dev: true + chrome-trace-event@1.0.3: {} - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} + cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 - dev: true - /cli-cursor@5.0.0: - resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} - engines: {node: '>=18'} + cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 - dev: true - /cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - dev: true + cli-spinners@2.9.2: {} - /cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} + cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 string-width: 7.1.0 - dev: true - /cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} - dev: true + cli-width@3.0.0: {} - /cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} - dev: false + cli-width@4.1.0: {} - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - /clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} + clone-deep@4.0.1: dependencies: is-plain-object: 2.0.4 kind-of: 6.0.3 shallow-clone: 3.0.1 - dev: true - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: true + clone@1.0.4: {} - /clone@2.1.2: - resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} - engines: {node: '>=0.8'} - dev: true + clone@2.1.2: {} - /co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: true + co@4.6.0: {} - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@1.9.3: dependencies: color-name: 1.1.3 - dev: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true + color-name@1.1.3: {} - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-name@1.1.4: {} - /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - dev: true + colorette@2.0.20: {} - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - dev: true - /command-line-args@5.2.1: - resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} - engines: {node: '>=4.0.0'} + command-line-args@5.2.1: dependencies: array-back: 3.1.0 find-replace: 3.0.0 lodash.camelcase: 4.3.0 typical: 4.0.0 - dev: true - /command-line-usage@7.0.1: - resolution: {integrity: sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==} - engines: {node: '>=12.20.0'} + command-line-usage@7.0.1: dependencies: array-back: 6.2.2 chalk-template: 0.4.0 table-layout: 3.0.2 typical: 7.1.1 - dev: true - /commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} - dev: true + commander@12.1.0: {} - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true + commander@2.20.3: {} - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - dev: true + commander@4.1.1: {} - /commitizen@4.3.1(@types/node@18.19.28)(typescript@5.5.2): - resolution: {integrity: sha512-gwAPAVTy/j5YcOOebcCRIijn+mSjWJC+IYKivTu6aG8Ei/scoXgfsMRnuAk6b0GRste2J4NGxVdMN3ZpfNaVaw==} - engines: {node: '>= 12'} - hasBin: true + commitizen@4.3.1(@types/node@18.19.28)(typescript@5.5.2): dependencies: cachedir: 2.3.0 cz-conventional-changelog: 3.3.0(@types/node@18.19.28)(typescript@5.5.2) @@ -3699,224 +7208,126 @@ packages: transitivePeerDependencies: - '@types/node' - typescript - dev: true - /compare-func@2.0.0: - resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + compare-func@2.0.0: dependencies: array-ify: 1.0.0 dot-prop: 5.3.0 - dev: true - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + concat-map@0.0.1: {} - /consola@3.2.3: - resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} - engines: {node: ^14.18.0 || >=16.10.0} - dev: true + consola@3.2.3: {} - /content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 - dev: true - /content-disposition@1.0.0: - resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} - engines: {node: '>= 0.6'} + content-disposition@1.0.0: dependencies: safe-buffer: 5.2.1 - dev: true - /content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - dev: true + content-type@1.0.5: {} - /conventional-changelog-angular@7.0.0: - resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} - engines: {node: '>=16'} + conventional-changelog-angular@7.0.0: dependencies: compare-func: 2.0.0 - dev: true - /conventional-changelog-conventionalcommits@7.0.2: - resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} - engines: {node: '>=16'} + conventional-changelog-conventionalcommits@7.0.2: dependencies: compare-func: 2.0.0 - dev: true - /conventional-commit-types@3.0.0: - resolution: {integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==} - dev: true + conventional-commit-types@3.0.0: {} - /conventional-commits-parser@5.0.0: - resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} - engines: {node: '>=16'} - hasBin: true + conventional-commits-parser@5.0.0: dependencies: JSONStream: 1.3.5 is-text-path: 2.0.0 meow: 12.1.1 split2: 4.2.0 - dev: true - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true + convert-source-map@2.0.0: {} - /cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - dev: true + cookie-signature@1.0.6: {} - /cookie-signature@1.2.2: - resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} - engines: {node: '>=6.6.0'} - dev: true + cookie-signature@1.2.2: {} - /cookie@0.4.2: - resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} - engines: {node: '>= 0.6'} + cookie@0.4.2: {} - /cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} - engines: {node: '>= 0.6'} - dev: true + cookie@0.6.0: {} - /cookie@0.7.1: - resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} - engines: {node: '>= 0.6'} - dev: true + cookie@0.7.1: {} - /cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} + cookie@0.7.2: {} - /cookies@0.9.1: - resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} - engines: {node: '>= 0.8'} + cookies@0.9.1: dependencies: depd: 2.0.0 keygrip: 1.1.0 - dev: true - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true + core-util-is@1.0.3: {} - /cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} + cors@2.8.5: dependencies: object-assign: 4.1.1 vary: 1.1.2 - /cosmiconfig-typescript-loader@5.0.0(@types/node@18.19.28)(cosmiconfig@8.3.6)(typescript@5.5.2): - resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} - engines: {node: '>=v16'} - peerDependencies: - '@types/node': '*' - cosmiconfig: '>=8.2' - typescript: '>=4' + cosmiconfig-typescript-loader@5.0.0(@types/node@18.19.28)(cosmiconfig@8.3.6(typescript@5.5.2))(typescript@5.5.2): dependencies: '@types/node': 18.19.28 cosmiconfig: 8.3.6(typescript@5.5.2) jiti: 1.21.0 typescript: 5.5.2 - dev: true - /cosmiconfig-typescript-loader@5.0.0(@types/node@18.19.28)(cosmiconfig@9.0.0)(typescript@5.5.2): - resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} - engines: {node: '>=v16'} - peerDependencies: - '@types/node': '*' - cosmiconfig: '>=8.2' - typescript: '>=4' + cosmiconfig-typescript-loader@5.0.0(@types/node@18.19.28)(cosmiconfig@9.0.0(typescript@5.5.2))(typescript@5.5.2): dependencies: '@types/node': 18.19.28 cosmiconfig: 9.0.0(typescript@5.5.2) jiti: 1.21.0 typescript: 5.5.2 - dev: true optional: true - /cosmiconfig@8.3.6(typescript@5.5.2): - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true + cosmiconfig@8.3.6(typescript@5.5.2): dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 + optionalDependencies: typescript: 5.5.2 - dev: true - /cosmiconfig@9.0.0(typescript@5.5.2): - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} - requiresBuild: true - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true + cosmiconfig@9.0.0(typescript@5.5.2): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 + optionalDependencies: typescript: 5.5.2 - dev: true optional: true - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true + create-require@1.1.1: {} - /cross-env@7.0.3: - resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} - engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} - hasBin: true + cross-env@7.0.3: dependencies: cross-spawn: 7.0.3 - dev: true - /cross-fetch@4.0.0: - resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} + cross-fetch@4.0.0: dependencies: node-fetch: 2.7.0 transitivePeerDependencies: - encoding - dev: true - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true - - /cssstyle@4.1.0: - resolution: {integrity: sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==} - engines: {node: '>=18'} + + cssstyle@4.1.0: dependencies: rrweb-cssom: 0.7.1 - dev: true - /cz-conventional-changelog@3.3.0(@types/node@18.19.28)(typescript@5.5.2): - resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==} - engines: {node: '>= 10'} + cz-conventional-changelog@3.3.0(@types/node@18.19.28)(typescript@5.5.2): dependencies: chalk: 2.4.2 commitizen: 4.3.1(@types/node@18.19.28)(typescript@5.5.2) @@ -3929,334 +7340,169 @@ packages: transitivePeerDependencies: - '@types/node' - typescript - dev: true - /dargs@7.0.0: - resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} - engines: {node: '>=8'} - dev: true + dargs@7.0.0: {} - /data-urls@5.0.0: - resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} - engines: {node: '>=18'} + data-urls@5.0.0: dependencies: whatwg-mimetype: 4.0.0 whatwg-url: 14.0.0 - dev: true - /data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} + data-view-buffer@1.0.1: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: true - /data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} + data-view-byte-length@1.0.1: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: true - /data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} + data-view-byte-offset@1.0.0: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: true - /dateformat@4.6.3: - resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} - dev: true + dateformat@4.6.3: {} - /debounce@1.2.1: - resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} - dev: true + debounce@1.2.1: {} - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@2.6.9: dependencies: ms: 2.0.0 - dev: true - /debug@3.1.0: - resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@3.1.0: dependencies: ms: 2.0.0 - dev: true - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@3.2.7: dependencies: ms: 2.1.3 - dev: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.4: dependencies: ms: 2.1.2 - /debug@4.3.6: - resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.6: dependencies: ms: 2.1.2 - dev: true - /debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.7: dependencies: ms: 2.1.3 - dev: true - /decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} + decamelize-keys@1.1.1: dependencies: decamelize: 1.2.0 map-obj: 1.0.1 - dev: true - /decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - dev: true + decamelize@1.2.0: {} - /decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - dev: true + decimal.js@10.4.3: {} - /dedent@0.7.0: - resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} - dev: true + dedent@0.7.0: {} - /deep-eql@4.1.3: - resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} - engines: {node: '>=6'} + deep-eql@4.1.3: dependencies: type-detect: 4.0.8 - dev: true - /deep-equal@1.0.1: - resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} - dev: true + deep-equal@1.0.1: {} - /deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - dev: true + deep-extend@0.6.0: {} - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true + deep-is@0.1.4: {} - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: true + deepmerge@4.3.1: {} - /default-gateway@6.0.3: - resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} - engines: {node: '>= 10'} + default-gateway@6.0.3: dependencies: execa: 5.1.1 - dev: true - /defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + defaults@1.0.4: dependencies: clone: 1.0.4 - dev: true - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 gopd: 1.0.1 - dev: true - /define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - dev: true + define-lazy-prop@2.0.0: {} - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 - dev: true - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: true + delayed-stream@1.0.0: {} - /delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - dev: true + delegates@1.0.0: {} - /depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - dev: true + depd@1.1.2: {} - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dev: true + depd@2.0.0: {} - /destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dev: true + destroy@1.2.0: {} - /detect-file@1.0.0: - resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} - engines: {node: '>=0.10.0'} - dev: true + detect-file@1.0.0: {} - /detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - dev: true + detect-indent@6.1.0: {} - /diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + diff-sequences@29.6.3: {} - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true + diff@4.0.2: {} - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + doctrine@3.0.0: dependencies: esutils: 2.0.3 - dev: true - /dot-prop@5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} + dot-prop@5.3.0: dependencies: is-obj: 2.0.0 - dev: true - /dotenv@10.0.0: - resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} - engines: {node: '>=10'} - dev: true + dotenv@10.0.0: {} - /duplexer2@0.1.4: - resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} + duplexer2@0.1.4: dependencies: readable-stream: 2.3.8 - dev: true - /duplexify@4.1.3: - resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + duplexify@4.1.3: dependencies: end-of-stream: 1.4.4 inherits: 2.0.4 readable-stream: 3.6.2 stream-shift: 1.0.3 - dev: true - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true + eastasianwidth@0.2.0: {} - /ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - dev: true + ee-first@1.1.1: {} - /electron-to-chromium@1.4.723: - resolution: {integrity: sha512-rxFVtrMGMFROr4qqU6n95rUi9IlfIm+lIAt+hOToy/9r6CDv0XiEcQdC3VP71y1pE5CFTzKV0RvxOGYCPWWHPw==} - dev: true + electron-to-chromium@1.4.723: {} - /electron-to-chromium@1.5.67: - resolution: {integrity: sha512-nz88NNBsD7kQSAGGJyp8hS6xSPtWwqNogA0mjtc2nUYeEf3nURK9qpV18TuBdDmEDgVWotS8Wkzf+V52dSQ/LQ==} - dev: true + electron-to-chromium@1.5.67: {} - /emoji-regex@10.3.0: - resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} - dev: true + emoji-regex@10.3.0: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@8.0.0: {} - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true + emoji-regex@9.2.2: {} - /emojis-list@3.0.0: - resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} - engines: {node: '>= 4'} - dev: true + emojis-list@3.0.0: {} - /encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - dev: true + encodeurl@1.0.2: {} - /encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - dev: true + encodeurl@2.0.0: {} - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + end-of-stream@1.4.4: dependencies: once: 1.4.0 - dev: true - /engine.io-client@6.5.4: - resolution: {integrity: sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==} + engine.io-client@6.5.4: dependencies: '@socket.io/component-emitter': 3.1.0 debug: 4.3.4 @@ -4267,15 +7513,10 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: false - /engine.io-parser@5.2.2: - resolution: {integrity: sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==} - engines: {node: '>=10.0.0'} + engine.io-parser@5.2.2: {} - /engine.io@6.5.4: - resolution: {integrity: sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==} - engines: {node: '>=10.2.0'} + engine.io@6.5.4: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.17 @@ -4292,40 +7533,23 @@ packages: - supports-color - utf-8-validate - /enhanced-resolve@5.17.1: - resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} - engines: {node: '>=10.13.0'} + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - dev: true - /entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - dev: true + entities@4.5.0: {} - /env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - requiresBuild: true - dev: true + env-paths@2.2.1: optional: true - /environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} - dev: true + environment@1.1.0: {} - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - dev: true - /es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} + es-abstract@1.23.3: dependencies: array-buffer-byte-length: 1.0.1 arraybuffer.prototype.slice: 1.0.3 @@ -4373,70 +7597,42 @@ packages: typed-array-length: 1.0.6 unbox-primitive: 1.0.2 which-typed-array: 1.1.15 - dev: true - /es-array-method-boxes-properly@1.0.0: - resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} - dev: true + es-array-method-boxes-properly@1.0.0: {} - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} + es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 - dev: true - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - dev: true + es-errors@1.3.0: {} - /es-module-lexer@1.5.0: - resolution: {integrity: sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==} - dev: true + es-module-lexer@1.5.0: {} - /es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} + es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 - dev: true - /es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} + es-set-tostringtag@2.0.3: dependencies: get-intrinsic: 1.2.4 has-tostringtag: 1.0.2 hasown: 2.0.2 - dev: true - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} + es-to-primitive@1.2.1: dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - dev: true - /esbuild-loader@4.2.2(webpack@5.96.1): - resolution: {integrity: sha512-Mdq/A1L8p37hkibp8jGFwuQTDSWhDmlueAefsrCPRwNWThEOlQmIglV7Gd6GE2mO5bt7ksfxKOMwkuY7jjVTXg==} - peerDependencies: - webpack: ^4.40.0 || ^5.0.0 + esbuild-loader@4.2.2(webpack@5.96.1(esbuild@0.24.0)): dependencies: esbuild: 0.21.5 get-tsconfig: 4.7.3 loader-utils: 2.0.4 webpack: 5.96.1(esbuild@0.24.0) webpack-sources: 1.4.3 - dev: true - /esbuild@0.20.2: - resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true + esbuild@0.20.2: optionalDependencies: '@esbuild/aix-ppc64': 0.20.2 '@esbuild/android-arm': 0.20.2 @@ -4461,13 +7657,8 @@ packages: '@esbuild/win32-arm64': 0.20.2 '@esbuild/win32-ia32': 0.20.2 '@esbuild/win32-x64': 0.20.2 - dev: true - /esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true + esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 '@esbuild/android-arm': 0.21.5 @@ -4492,13 +7683,8 @@ packages: '@esbuild/win32-arm64': 0.21.5 '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 - dev: true - /esbuild@0.24.0: - resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} - engines: {node: '>=18'} - hasBin: true - requiresBuild: true + esbuild@0.24.0: optionalDependencies: '@esbuild/aix-ppc64': 0.24.0 '@esbuild/android-arm': 0.24.0 @@ -4524,91 +7710,46 @@ packages: '@esbuild/win32-arm64': 0.24.0 '@esbuild/win32-ia32': 0.24.0 '@esbuild/win32-x64': 0.24.0 - dev: true - /escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} + escalade@3.1.2: {} - /escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - dev: true + escalade@3.2.0: {} - /escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: true + escape-html@1.0.3: {} - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true + escape-string-regexp@1.0.5: {} - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true + escape-string-regexp@4.0.0: {} - /eslint-config-prettier@9.1.0(eslint@8.57.0): - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' + eslint-config-prettier@9.1.0(eslint@8.57.0): dependencies: eslint: 8.57.0 - dev: true - /eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.4.1): - resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} - engines: {node: ^14.18.0 || >=16.0.0} - 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 + eslint-plugin-prettier@5.2.1(@types/eslint@8.56.7)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.4.1): dependencies: eslint: 8.57.0 - eslint-config-prettier: 9.1.0(eslint@8.57.0) prettier: 3.4.1 prettier-linter-helpers: 1.0.0 synckit: 0.9.2 - dev: true + optionalDependencies: + '@types/eslint': 8.56.7 + eslint-config-prettier: 9.1.0(eslint@8.57.0) - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - dev: true - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + eslint-visitor-keys@3.4.3: {} - /eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - dev: true + eslint-visitor-keys@4.2.0: {} - /eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + eslint@8.57.0: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@eslint-community/regexpp': 4.11.0 @@ -4650,73 +7791,40 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@9.6.1: dependencies: acorn: 8.12.1 acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 3.4.3 - dev: true - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} + esquery@1.5.0: dependencies: estraverse: 5.3.0 - dev: true - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - dev: true - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true + estraverse@4.3.0: {} - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + estraverse@5.3.0: {} - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: true + estree-walker@2.0.2: {} - /estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.5 - dev: true - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + esutils@2.0.3: {} - /etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - dev: true + etag@1.8.1: {} - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - dev: true + eventemitter3@5.0.1: {} - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - dev: true + events@3.3.0: {} - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + execa@5.1.1: dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -4727,11 +7835,8 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true - /execa@6.1.0: - resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + execa@6.1.0: dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -4742,11 +7847,8 @@ packages: onetime: 6.0.0 signal-exit: 3.0.7 strip-final-newline: 3.0.0 - dev: true - /execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} + execa@8.0.1: dependencies: cross-spawn: 7.0.3 get-stream: 8.0.1 @@ -4757,18 +7859,12 @@ packages: onetime: 6.0.0 signal-exit: 4.1.0 strip-final-newline: 3.0.0 - dev: true - /expand-tilde@2.0.2: - resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} - engines: {node: '>=0.10.0'} + expand-tilde@2.0.2: dependencies: homedir-polyfill: 1.0.3 - dev: true - /express@4.19.2: - resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} - engines: {node: '>= 0.10.0'} + express@4.19.2: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 @@ -4803,11 +7899,8 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color - dev: true - /express@5.0.1: - resolution: {integrity: sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==} - engines: {node: '>= 18'} + express@5.0.1: dependencies: accepts: 2.0.0 body-parser: 2.0.2 @@ -4843,50 +7936,32 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color - dev: true - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + external-editor@3.1.0: dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 - dev: true - /fast-content-type-parse@1.1.0: - resolution: {integrity: sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==} - dev: true + fast-content-type-parse@1.1.0: {} - /fast-decode-uri-component@1.0.1: - resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} - dev: true + fast-decode-uri-component@1.0.1: {} - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true + fast-deep-equal@3.1.3: {} - /fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - dev: true + fast-diff@1.3.0: {} - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: true - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + fast-json-stable-stringify@2.1.0: {} - /fast-json-stringify@5.16.1: - resolution: {integrity: sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==} + fast-json-stringify@5.16.1: dependencies: '@fastify/merge-json-schemas': 0.1.1 ajv: 8.12.0 @@ -4895,37 +7970,22 @@ packages: fast-uri: 2.4.0 json-schema-ref-resolver: 1.0.1 rfdc: 1.3.1 - dev: true - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + fast-levenshtein@2.0.6: {} - /fast-querystring@1.1.2: - resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + fast-querystring@1.1.2: dependencies: fast-decode-uri-component: 1.0.1 - dev: true - /fast-redact@3.5.0: - resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} - engines: {node: '>=6'} - dev: true + fast-redact@3.5.0: {} - /fast-safe-stringify@2.1.1: - resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - dev: true + fast-safe-stringify@2.1.1: {} - /fast-uri@2.4.0: - resolution: {integrity: sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==} - dev: true + fast-uri@2.4.0: {} - /fastify-plugin@4.5.1: - resolution: {integrity: sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==} - dev: true + fastify-plugin@4.5.1: {} - /fastify@4.28.1: - resolution: {integrity: sha512-kFWUtpNr4i7t5vY2EJPCN2KgMVpuqfU4NjnJNCgiNB900oiDeYqaNDRcAfeBbOF5hGixixxcKnOU4KN9z6QncQ==} + fastify@4.28.1: dependencies: '@fastify/ajv-compiler': 3.6.0 '@fastify/error': 3.4.1 @@ -4943,56 +8003,32 @@ packages: secure-json-parse: 2.7.0 semver: 7.6.0 toad-cache: 3.7.0 - dev: true - /fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fastq@1.17.1: dependencies: reusify: 1.0.4 - dev: true - /fdir@6.4.2(picomatch@4.0.2): - resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - dependencies: + fdir@6.4.2(picomatch@4.0.2): + optionalDependencies: picomatch: 4.0.2 - dev: true - /figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 - dev: true - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 - dev: true - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 - dev: true - /fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - dev: true - /finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} + finalhandler@1.2.0: dependencies: debug: 2.6.9 encodeurl: 1.0.2 @@ -5003,11 +8039,8 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /finalhandler@2.0.0: - resolution: {integrity: sha512-MX6Zo2adDViYh+GcxxB1dpO43eypOGUOL12rLCOTMQv/DfIbpSJUy4oQIIZhVZkH9e+bZWKMon0XHFEju16tkQ==} - engines: {node: '>= 0.8'} + finalhandler@2.0.0: dependencies: debug: 2.6.9 encodeurl: 1.0.2 @@ -5018,264 +8051,152 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /find-my-way@8.2.2: - resolution: {integrity: sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==} - engines: {node: '>=14'} + find-my-way@8.2.2: dependencies: fast-deep-equal: 3.1.3 fast-querystring: 1.1.2 safe-regex2: 3.1.0 - dev: true - /find-node-modules@2.1.3: - resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==} + find-node-modules@2.1.3: dependencies: findup-sync: 4.0.0 merge: 2.1.1 - dev: true - /find-replace@3.0.0: - resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} - engines: {node: '>=4.0.0'} + find-replace@3.0.0: dependencies: array-back: 3.1.0 - dev: true - /find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - dev: true + find-root@1.1.0: {} - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /findup-sync@4.0.0: - resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==} - engines: {node: '>= 8'} + findup-sync@4.0.0: dependencies: detect-file: 1.0.0 is-glob: 4.0.3 micromatch: 4.0.5 resolve-dir: 1.0.1 - dev: true - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@3.2.0: dependencies: flatted: 3.3.1 keyv: 4.5.4 rimraf: 3.0.2 - dev: true - /flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - dev: true + flat@5.0.2: {} - /flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - dev: true + flatted@3.3.1: {} - /follow-redirects@1.15.6: - resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: true + follow-redirects@1.15.6: {} - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.3: dependencies: is-callable: 1.2.7 - dev: true - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} + foreground-child@3.1.1: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - dev: true - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} + form-data@4.0.0: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - dev: true - /forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - dev: true + forwarded@0.2.0: {} - /fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - dev: true + fresh@0.5.2: {} - /fresh@2.0.0: - resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} - engines: {node: '>= 0.8'} - dev: true + fresh@2.0.0: {} - /fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} + fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} + fs-extra@11.2.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} + fs-extra@9.1.0: dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /fs-monkey@1.0.5: - resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} - dev: true + fs-monkey@1.0.5: {} - /fs-readdir-recursive@1.1.0: - resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} - dev: true + fs-readdir-recursive@1.1.0: {} - /fs-teardown@0.3.2: - resolution: {integrity: sha512-5xJQGMsGjHdZJ5yw/eyZEkAIHYwQQA6T34PfXUCl5JOeizfLWnz3gBEVfEidgrnnYZKTBW3L7aPrB3aI8f0Vqw==} + fs-teardown@0.3.2: dependencies: fs-extra: 10.1.0 outvariant: 1.4.3 - dev: true - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + fs.realpath@1.0.0: {} - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.2: optional: true - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.3: optional: true - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true + function-bind@1.1.2: {} - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} + function.prototype.name@1.1.6: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 functions-have-names: 1.2.3 - dev: true - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true + functions-have-names@1.2.3: {} - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true + gensync@1.0.0-beta.2: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} + get-caller-file@2.0.5: {} - /get-east-asian-width@1.2.0: - resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} - engines: {node: '>=18'} - dev: true + get-east-asian-width@1.2.0: {} - /get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - dev: true + get-func-name@2.0.2: {} - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 has-proto: 1.0.3 has-symbols: 1.0.3 hasown: 2.0.2 - dev: true - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true + get-stream@6.0.1: {} - /get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - dev: true + get-stream@8.0.1: {} - /get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} + get-symbol-description@1.0.2: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - dev: true - /get-tsconfig@4.7.3: - resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + get-tsconfig@4.7.3: dependencies: resolve-pkg-maps: 1.0.0 - dev: true - /git-log-parser@1.2.0: - resolution: {integrity: sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==} + git-log-parser@1.2.0: dependencies: argv-formatter: 1.0.0 spawn-error-forwarder: 1.0.0 @@ -5283,54 +8204,34 @@ packages: stream-combiner2: 1.1.1 through2: 2.0.5 traverse: 0.6.8 - dev: true - /git-raw-commits@2.0.11: - resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} - engines: {node: '>=10'} - hasBin: true + git-raw-commits@2.0.11: dependencies: dargs: 7.0.0 lodash: 4.17.21 meow: 8.1.2 split2: 3.2.2 through2: 4.0.2 - dev: true - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: true + glob-to-regexp@0.4.1: {} - /glob@10.3.12: - resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + glob@10.3.12: dependencies: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.4 minipass: 7.0.4 path-scurry: 1.10.2 - dev: true - /glob@11.0.0: - resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==} - engines: {node: 20 || >=22} - hasBin: true + glob@11.0.0: dependencies: foreground-child: 3.1.1 jackspeak: 4.0.2 @@ -5338,11 +8239,8 @@ packages: minipass: 7.1.2 package-json-from-dist: 1.0.1 path-scurry: 2.0.0 - dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -5350,330 +8248,187 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /global-directory@4.0.1: - resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} - engines: {node: '>=18'} - requiresBuild: true + global-directory@4.0.1: dependencies: ini: 4.1.1 - dev: true optional: true - /global-dirs@0.1.1: - resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} - engines: {node: '>=4'} + global-dirs@0.1.1: dependencies: ini: 1.3.8 - dev: true - /global-modules@1.0.0: - resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} - engines: {node: '>=0.10.0'} + global-modules@1.0.0: dependencies: global-prefix: 1.0.2 is-windows: 1.0.2 resolve-dir: 1.0.1 - dev: true - /global-prefix@1.0.2: - resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} - engines: {node: '>=0.10.0'} + global-prefix@1.0.2: dependencies: expand-tilde: 2.0.2 homedir-polyfill: 1.0.3 ini: 1.3.8 is-windows: 1.0.2 which: 1.3.1 - dev: true - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true + globals@11.12.0: {} - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@13.24.0: dependencies: type-fest: 0.20.2 - dev: true - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} + globalthis@1.0.3: dependencies: define-properties: 1.2.1 - dev: true - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.0.1: dependencies: get-intrinsic: 1.2.4 - dev: true - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true + graceful-fs@4.2.11: {} - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true + graphemer@1.4.0: {} - /graphql@16.8.2: - resolution: {integrity: sha512-cvVIBILwuoSyD54U4cF/UXDh5yAobhNV/tPygI4lZhgOIJQE/WLWC4waBRb4I6bDVYb3OVx3lfHbaQOEoUD5sg==} - engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - dev: false + graphql@16.8.2: {} - /hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - dev: true + hard-rejection@2.1.0: {} - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true + has-bigints@1.0.2: {} - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true + has-flag@3.0.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + has-flag@4.0.0: {} - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.0 - dev: true - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - dev: true + has-proto@1.0.3: {} - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true + has-symbols@1.0.3: {} - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: dependencies: has-symbols: 1.0.3 - dev: true - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + hasown@2.0.2: dependencies: function-bind: 1.1.2 - dev: true - /headers-polyfill@3.3.0: - resolution: {integrity: sha512-5e57etwBpNcDc0b6KCVWEh/Ro063OxPvzVimUdM0/tsYM/T7Hfy3kknIGj78SFTOhNd8AZY41U8mOHoO4LzmIQ==} - dev: true + headers-polyfill@3.3.0: {} - /headers-polyfill@4.0.3: - resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} - dev: false + headers-polyfill@4.0.3: {} - /homedir-polyfill@1.0.3: - resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} - engines: {node: '>=0.10.0'} + homedir-polyfill@1.0.3: dependencies: parse-passwd: 1.0.0 - dev: true - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true + hosted-git-info@2.8.9: {} - /hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} + hosted-git-info@4.1.0: dependencies: lru-cache: 6.0.0 - dev: true - /html-encoding-sniffer@4.0.0: - resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} - engines: {node: '>=18'} + html-encoding-sniffer@4.0.0: dependencies: whatwg-encoding: 3.1.1 - dev: true - /html-rewriter-wasm@0.4.1: - resolution: {integrity: sha512-lNovG8CMCCmcVB1Q7xggMSf7tqPCijZXaH4gL6iE8BFghdQCbaY5Met9i1x2Ex8m/cZHDUtXK9H6/znKamRP8Q==} - dev: true + html-rewriter-wasm@0.4.1: {} - /http-assert@1.5.0: - resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} - engines: {node: '>= 0.8'} + http-assert@1.5.0: dependencies: deep-equal: 1.0.1 http-errors: 1.8.1 - dev: true - /http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - dev: true + http-cache-semantics@4.1.1: {} - /http-errors@1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} - engines: {node: '>= 0.6'} + http-errors@1.6.3: dependencies: depd: 1.1.2 inherits: 2.0.3 setprototypeof: 1.1.0 statuses: 1.5.0 - dev: true - /http-errors@1.8.1: - resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} - engines: {node: '>= 0.6'} + http-errors@1.8.1: dependencies: depd: 1.1.2 inherits: 2.0.4 setprototypeof: 1.2.0 statuses: 1.5.0 toidentifier: 1.0.1 - dev: true - /http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} + http-errors@2.0.0: dependencies: depd: 2.0.0 inherits: 2.0.4 setprototypeof: 1.2.0 statuses: 2.0.1 toidentifier: 1.0.1 - dev: true - /http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.1 debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true - /https-proxy-agent@7.0.5: - resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} - engines: {node: '>= 14'} + https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true + human-signals@2.1.0: {} - /human-signals@3.0.1: - resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==} - engines: {node: '>=12.20.0'} - dev: true + human-signals@3.0.1: {} - /human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - dev: true + human-signals@5.0.0: {} - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - dev: true - /iconv-lite@0.5.2: - resolution: {integrity: sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==} - engines: {node: '>=0.10.0'} + iconv-lite@0.5.2: dependencies: safer-buffer: 2.1.2 - dev: true - /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 - dev: true - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true + ieee754@1.2.1: {} - /ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} - engines: {node: '>= 4'} - dev: true + ignore@5.3.1: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true - /import-meta-resolve@4.0.0: - resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} - requiresBuild: true - dev: true + import-meta-resolve@4.0.0: optional: true - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true + imurmurhash@0.1.4: {} - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true + indent-string@4.0.0: {} - /inflight@1.0.6: - resolution: {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. + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true - /inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - dev: true + inherits@2.0.3: {} - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true + inherits@2.0.4: {} - /ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: true + ini@1.3.8: {} - /ini@4.1.1: - resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - requiresBuild: true - dev: true + ini@4.1.1: optional: true - /inquirer@8.2.5: - resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} - engines: {node: '>=12.0.0'} + inquirer@8.2.5: dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -5690,367 +8445,196 @@ packages: strip-ansi: 6.0.1 through: 2.3.8 wrap-ansi: 7.0.0 - dev: true - /internal-ip@6.2.0: - resolution: {integrity: sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==} - engines: {node: '>=10'} + internal-ip@6.2.0: dependencies: default-gateway: 6.0.3 ipaddr.js: 1.9.1 is-ip: 3.1.0 p-event: 4.2.0 - dev: true - /internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} + internal-slot@1.0.7: dependencies: es-errors: 1.3.0 hasown: 2.0.2 side-channel: 1.0.6 - dev: true - /ip-regex@4.3.0: - resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} - engines: {node: '>=8'} - dev: true + ip-regex@4.3.0: {} - /ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - dev: true + ipaddr.js@1.9.1: {} - /is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} + is-array-buffer@3.0.4: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 - dev: true - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true + is-arrayish@0.2.1: {} - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 - dev: true - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + is-boolean-object@1.1.2: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - dev: true - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + is-callable@1.2.7: {} - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-core-module@2.13.1: dependencies: hasown: 2.0.2 - dev: true - /is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} + is-data-view@1.0.1: dependencies: is-typed-array: 1.1.13 - dev: true - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + is-date-object@1.0.5: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true + is-docker@2.2.1: {} - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + is-fullwidth-code-point@3.0.0: {} - /is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - dev: true + is-fullwidth-code-point@4.0.0: {} - /is-fullwidth-code-point@5.0.0: - resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} - engines: {node: '>=18'} + is-fullwidth-code-point@5.0.0: dependencies: get-east-asian-width: 1.2.0 - dev: true - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} + is-generator-function@1.0.10: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - dev: true + is-interactive@1.0.0: {} - /is-ip@3.1.0: - resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} - engines: {node: '>=8'} + is-ip@3.1.0: dependencies: ip-regex: 4.3.0 - dev: true - /is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: true + is-module@1.0.0: {} - /is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - dev: true + is-negative-zero@2.0.3: {} - /is-node-process@1.2.0: - resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} - dev: false + is-node-process@1.2.0: {} - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} + is-number-object@1.0.7: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + is-number@7.0.0: {} - /is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - dev: true + is-obj@2.0.0: {} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true + is-path-inside@3.0.3: {} - /is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - dev: true + is-plain-obj@1.1.0: {} - /is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} + is-plain-object@2.0.4: dependencies: isobject: 3.0.1 - dev: true - /is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - dev: true + is-potential-custom-element-name@1.0.1: {} - /is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - dev: true + is-promise@4.0.0: {} - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} + is-regex@1.1.4: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - dev: true - /is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} + is-shared-array-buffer@1.0.3: dependencies: call-bind: 1.0.7 - dev: true - - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true - /is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + is-stream@2.0.1: {} - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + is-stream@3.0.0: {} + + is-string@1.0.7: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 - dev: true - /is-text-path@2.0.0: - resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} - engines: {node: '>=8'} + is-text-path@2.0.0: dependencies: text-extensions: 2.4.0 - dev: true - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.13: dependencies: which-typed-array: 1.1.15 - dev: true - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true + is-unicode-supported@0.1.0: {} - /is-utf8@0.2.1: - resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} - dev: true + is-utf8@0.2.1: {} - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakref@1.0.2: dependencies: call-bind: 1.0.7 - dev: true - /is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - dev: true + is-windows@1.0.2: {} - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 - dev: true - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true + isarray@1.0.0: {} - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + isarray@2.0.5: {} - /isbinaryfile@5.0.2: - resolution: {integrity: sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg==} - engines: {node: '>= 18.0.0'} - dev: true + isbinaryfile@5.0.2: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + isexe@2.0.0: {} - /isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - dev: true + isobject@3.0.1: {} - /issue-parser@6.0.0: - resolution: {integrity: sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==} - engines: {node: '>=10.13'} + issue-parser@6.0.0: dependencies: lodash.capitalize: 4.2.1 lodash.escaperegexp: 4.1.2 lodash.isplainobject: 4.0.6 lodash.isstring: 4.0.1 lodash.uniqby: 4.7.0 - dev: true - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} + jackspeak@2.3.6: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - dev: true - /jackspeak@4.0.2: - resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==} - engines: {node: 20 || >=22} + jackspeak@4.0.2: dependencies: '@isaacs/cliui': 8.0.2 - dev: true - /jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} + jest-worker@27.5.1: dependencies: '@types/node': 18.19.28 merge-stream: 2.0.0 supports-color: 8.1.1 - dev: true - /jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} - hasBin: true - dev: true + jiti@1.21.0: {} - /joycon@3.1.1: - resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} - engines: {node: '>=10'} - dev: true + joycon@3.1.1: {} - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true + js-tokens@4.0.0: {} - /js-tokens@9.0.0: - resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} - dev: true + js-tokens@9.0.0: {} - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - /jsdom@25.0.1: - resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==} - engines: {node: '>=18'} - peerDependencies: - canvas: ^2.11.2 - peerDependenciesMeta: - canvas: - optional: true + jsdom@25.0.1: dependencies: cssstyle: 4.1.0 data-urls: 5.0.0 @@ -6077,134 +8661,78 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: true + jsesc@2.5.2: {} - /json-bigint@1.0.0: - resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + json-bigint@1.0.0: dependencies: bignumber.js: 9.1.2 - dev: true - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true + json-buffer@3.0.1: {} - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true + json-parse-even-better-errors@2.3.1: {} - /json-schema-ref-resolver@1.0.1: - resolution: {integrity: sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==} + json-schema-ref-resolver@1.0.1: dependencies: fast-deep-equal: 3.1.3 - dev: true - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + json-schema-traverse@0.4.1: {} - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true + json-schema-traverse@1.0.0: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true + json-stable-stringify-without-jsonify@1.0.1: {} - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: true + json5@2.2.3: {} - /jsonc-parser@3.2.1: - resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} - dev: true + jsonc-parser@3.2.1: {} - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.1.0: dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - dev: true - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: true + jsonparse@1.3.1: {} - /keygrip@1.1.0: - resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} - engines: {node: '>= 0.6'} + keygrip@1.1.0: dependencies: tsscmp: 1.0.6 - dev: true - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 - dev: true - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: true + kind-of@6.0.3: {} - /kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - dev: true + kleur@4.1.5: {} - /koa-compose@4.1.0: - resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} - dev: true + koa-compose@4.1.0: {} - /koa-convert@2.0.0: - resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} - engines: {node: '>= 10'} + koa-convert@2.0.0: dependencies: co: 4.6.0 koa-compose: 4.1.0 - dev: true - /koa-etag@4.0.0: - resolution: {integrity: sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==} + koa-etag@4.0.0: dependencies: etag: 1.8.1 - dev: true - /koa-send@5.0.1: - resolution: {integrity: sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==} - engines: {node: '>= 8'} + koa-send@5.0.1: dependencies: debug: 4.3.4 http-errors: 1.8.1 resolve-path: 1.4.0 transitivePeerDependencies: - supports-color - dev: true - /koa-static@5.0.0: - resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==} - engines: {node: '>= 7.6.0'} + koa-static@5.0.0: dependencies: debug: 3.2.7 koa-send: 5.0.1 transitivePeerDependencies: - supports-color - dev: true - /koa@2.15.2: - resolution: {integrity: sha512-MXTeZH3M6AJ8ukW2QZ8wqO3Dcdfh2WRRmjCBkEP+NhKNCiqlO5RDqHmSnsyNrbRJrdjyvIGSJho4vQiWgQJSVA==} - engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} + koa@2.15.2: dependencies: accepts: 1.3.8 cache-content-type: 1.0.1 @@ -6231,47 +8759,27 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color - dev: true - /leven@2.1.0: - resolution: {integrity: sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==} - engines: {node: '>=0.10.0'} - dev: true + leven@2.1.0: {} - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /light-my-request@5.14.0: - resolution: {integrity: sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==} + light-my-request@5.14.0: dependencies: cookie: 0.7.2 process-warning: 3.0.0 set-cookie-parser: 2.6.0 - dev: true - /lilconfig@3.1.1: - resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} - engines: {node: '>=14'} - dev: true + lilconfig@3.1.1: {} - /lilconfig@3.1.2: - resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} - engines: {node: '>=14'} - dev: true + lilconfig@3.1.2: {} - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true + lines-and-columns@1.2.4: {} - /lint-staged@15.2.10: - resolution: {integrity: sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==} - engines: {node: '>=18.12.0'} - hasBin: true + lint-staged@15.2.10: dependencies: chalk: 5.3.0 commander: 12.1.0 @@ -6285,11 +8793,8 @@ packages: yaml: 2.5.1 transitivePeerDependencies: - supports-color - dev: true - /listr2@8.2.5: - resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} - engines: {node: '>=18.0.0'} + listr2@8.2.5: dependencies: cli-truncate: 4.0.0 colorette: 2.0.20 @@ -6297,225 +8802,120 @@ packages: log-update: 6.1.0 rfdc: 1.4.1 wrap-ansi: 9.0.0 - dev: true - /load-tsconfig@0.2.5: - resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + load-tsconfig@0.2.5: {} - /loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} - dev: true + loader-runner@4.3.0: {} - /loader-utils@2.0.4: - resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} - engines: {node: '>=8.9.0'} + loader-utils@2.0.4: dependencies: big.js: 5.2.2 emojis-list: 3.0.0 json5: 2.2.3 - dev: true - /local-pkg@0.5.0: - resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} - engines: {node: '>=14'} + local-pkg@0.5.0: dependencies: mlly: 1.6.1 pkg-types: 1.0.3 - dev: true - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + locate-path@5.0.0: dependencies: p-locate: 4.1.0 - dev: true - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /lodash.assignwith@4.2.0: - resolution: {integrity: sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==} - dev: true + lodash.assignwith@4.2.0: {} - /lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - dev: true + lodash.camelcase@4.3.0: {} - /lodash.capitalize@4.2.1: - resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} - dev: true + lodash.capitalize@4.2.1: {} - /lodash.escaperegexp@4.1.2: - resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} - dev: true + lodash.escaperegexp@4.1.2: {} - /lodash.isfunction@3.0.9: - resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} - dev: true + lodash.isfunction@3.0.9: {} - /lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - dev: true + lodash.isplainobject@4.0.6: {} - /lodash.isstring@4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - dev: true + lodash.isstring@4.0.1: {} - /lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - dev: true + lodash.kebabcase@4.1.1: {} - /lodash.map@4.6.0: - resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==} - dev: true + lodash.map@4.6.0: {} - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + lodash.merge@4.6.2: {} - /lodash.mergewith@4.6.2: - resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} - dev: true + lodash.mergewith@4.6.2: {} - /lodash.snakecase@4.1.1: - resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} - dev: true + lodash.snakecase@4.1.1: {} - /lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - dev: true + lodash.sortby@4.7.0: {} - /lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - dev: true + lodash.startcase@4.4.0: {} - /lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - dev: true + lodash.uniq@4.5.0: {} - /lodash.uniqby@4.7.0: - resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} - dev: true + lodash.uniqby@4.7.0: {} - /lodash.upperfirst@4.3.1: - resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} - dev: true + lodash.upperfirst@4.3.1: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true + lodash@4.17.21: {} - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + log-symbols@4.1.0: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: true - /log-update@6.1.0: - resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} - engines: {node: '>=18'} + log-update@6.1.0: dependencies: ansi-escapes: 7.0.0 cli-cursor: 5.0.0 slice-ansi: 7.1.0 strip-ansi: 7.1.0 wrap-ansi: 9.0.0 - dev: true - /longest@2.0.1: - resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==} - engines: {node: '>=0.10.0'} - dev: true + longest@2.0.1: {} - /loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + loupe@2.3.7: dependencies: get-func-name: 2.0.2 - dev: true - /lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} - engines: {node: 14 || >=16.14} - dev: true + lru-cache@10.2.0: {} - /lru-cache@11.0.2: - resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} - engines: {node: 20 || >=22} - dev: true + lru-cache@11.0.2: {} - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 - dev: true - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + lru-cache@6.0.0: dependencies: yallist: 4.0.0 - dev: true - /lru-cache@8.0.5: - resolution: {integrity: sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==} - engines: {node: '>=16.14'} - dev: true + lru-cache@8.0.5: {} - /magic-string@0.30.8: - resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} - engines: {node: '>=12'} + magic-string@0.30.8: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true + make-error@1.3.6: {} - /map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - dev: true + map-obj@1.0.1: {} - /map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - dev: true + map-obj@4.3.0: {} - /media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - dev: true + media-typer@0.3.0: {} - /media-typer@1.1.0: - resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} - engines: {node: '>= 0.8'} - dev: true + media-typer@1.1.0: {} - /memfs@3.5.3: - resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} - engines: {node: '>= 4.0.0'} + memfs@3.5.3: dependencies: fs-monkey: 1.0.5 - dev: true - /meow@12.1.1: - resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} - engines: {node: '>=16.10'} - dev: true + meow@12.1.1: {} - /meow@8.1.2: - resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} - engines: {node: '>=10'} + meow@8.1.2: dependencies: '@types/minimist': 1.2.5 camelcase-keys: 6.2.2 @@ -6528,337 +8928,179 @@ packages: trim-newlines: 3.0.1 type-fest: 0.18.1 yargs-parser: 20.2.9 - dev: true - /merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - dev: true + merge-descriptors@1.0.1: {} - /merge-descriptors@2.0.0: - resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} - engines: {node: '>=18'} - dev: true + merge-descriptors@2.0.0: {} - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + merge-stream@2.0.0: {} - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + merge2@1.4.1: {} - /merge@2.1.1: - resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} - dev: true + merge@2.1.1: {} - /methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - dev: true + methods@1.1.2: {} - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + micromatch@4.0.5: dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: true - /micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 - dev: true - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} + mime-db@1.52.0: {} - /mime-db@1.53.0: - resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} - engines: {node: '>= 0.6'} - dev: true + mime-db@1.53.0: {} - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - /mime-types@3.0.0: - resolution: {integrity: sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==} - engines: {node: '>= 0.6'} + mime-types@3.0.0: dependencies: mime-db: 1.53.0 - dev: true - /mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - dev: true + mime@1.6.0: {} - /mime@4.0.1: - resolution: {integrity: sha512-5lZ5tyrIfliMXzFtkYyekWbtRXObT9OWa8IwQ5uxTBDHucNNwniRqo0yInflj+iYi5CBa6qxadGzGarDfuEOxA==} - engines: {node: '>=16'} - hasBin: true - dev: true + mime@4.0.1: {} - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true + mimic-fn@2.1.0: {} - /mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - dev: true + mimic-fn@4.0.0: {} - /mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} - engines: {node: '>=18'} - dev: true + mimic-function@5.0.1: {} - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true + min-indent@1.0.1: {} - /minimatch@10.0.1: - resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} - engines: {node: 20 || >=22} + minimatch@10.0.1: dependencies: brace-expansion: 2.0.1 - dev: true - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - dev: true - /minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.4: dependencies: brace-expansion: 2.0.1 - dev: true - /minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} + minimist-options@4.1.0: dependencies: arrify: 1.0.1 is-plain-obj: 1.1.0 kind-of: 6.0.3 - dev: true - /minimist@1.2.7: - resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} - dev: true + minimist@1.2.7: {} - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true + minimist@1.2.8: {} - /minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} - engines: {node: '>=16 || 14 >=14.17'} - dev: true + minipass@7.0.4: {} - /minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - dev: true + minipass@7.1.2: {} - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true + mkdirp@0.5.6: dependencies: minimist: 1.2.8 - dev: true - /mlly@1.6.1: - resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} + mlly@1.6.1: dependencies: acorn: 8.11.3 pathe: 1.1.2 pkg-types: 1.0.3 ufo: 1.5.3 - dev: true - /mri@1.1.4: - resolution: {integrity: sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==} - engines: {node: '>=4'} - dev: true + mri@1.1.4: {} - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: true + ms@2.0.0: {} - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + ms@2.1.2: {} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true + ms@2.1.3: {} - /mustache@4.2.0: - resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} - hasBin: true - dev: true + mustache@4.2.0: {} - /mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - dev: true + mute-stream@0.0.8: {} - /mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} - dev: false + mute-stream@2.0.0: {} - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + mz@2.7.0: dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - dev: true - /nanocolors@0.2.13: - resolution: {integrity: sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==} - dev: true + nanocolors@0.2.13: {} - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true + nanoid@3.3.7: {} - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + natural-compare@1.4.0: {} - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} + negotiator@0.6.3: {} - /negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} - dev: true + negotiator@1.0.0: {} - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: true + neo-async@2.6.2: {} - /node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.6.7: dependencies: whatwg-url: 5.0.0 - dev: true - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - dev: true - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - dev: true + node-releases@2.0.14: {} - /node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - dev: true + node-releases@2.0.18: {} - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 resolve: 1.22.8 semver: 5.7.2 validate-npm-package-license: 3.0.4 - dev: true - /normalize-package-data@3.0.3: - resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} - engines: {node: '>=10'} + normalize-package-data@3.0.3: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.13.1 semver: 7.6.0 validate-npm-package-license: 3.0.4 - dev: true - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 - dev: true - /npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + npm-run-path@5.3.0: dependencies: path-key: 4.0.0 - dev: true - /npx-import@1.1.4: - resolution: {integrity: sha512-3ShymTWOgqGyNlh5lMJAejLuIv3W1K3fbI5Ewc6YErZU3Sp0PqsNs8UIU1O8z5+KVl/Du5ag56Gza9vdorGEoA==} + npx-import@1.1.4: dependencies: execa: 6.1.0 parse-package-name: 1.0.0 semver: 7.6.0 validate-npm-package-name: 4.0.0 - dev: true - /nwsapi@2.2.14: - resolution: {integrity: sha512-5XcFrl8snuCQTJC2SYIW9yhhMnILdMw9dlGT+At11P7jqDuTafp6/uc3lAXsMOmftER3Ntb+T3cHiupOtj7Lgw==} - dev: true + nwsapi@2.2.14: {} - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} + object-assign@4.1.1: {} - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: true + object-inspect@1.13.1: {} - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + object-keys@1.1.1: {} - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} + object.assign@4.1.5: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - dev: true - /object.getownpropertydescriptors@2.1.8: - resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} - engines: {node: '>= 0.8'} + object.getownpropertydescriptors@2.1.8: dependencies: array.prototype.reduce: 1.0.7 call-bind: 1.0.7 @@ -6867,67 +9109,40 @@ packages: es-object-atoms: 1.0.0 gopd: 1.0.1 safe-array-concat: 1.1.2 - dev: true - /on-exit-leak-free@0.2.0: - resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} - dev: true + on-exit-leak-free@0.2.0: {} - /on-exit-leak-free@2.1.2: - resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} - engines: {node: '>=14.0.0'} - dev: true + on-exit-leak-free@2.1.2: {} - /on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} + on-finished@2.4.1: dependencies: ee-first: 1.1.1 - dev: true - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - dev: true - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 - dev: true - /onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} + onetime@6.0.0: dependencies: mimic-fn: 4.0.0 - dev: true - /onetime@7.0.0: - resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} - engines: {node: '>=18'} + onetime@7.0.0: dependencies: mimic-function: 5.0.1 - dev: true - /only@0.0.2: - resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} - dev: true + only@0.0.2: {} - /open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 - dev: true - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} + optionator@0.9.3: dependencies: '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 @@ -6935,11 +9150,8 @@ packages: levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} + ora@5.4.1: dependencies: bl: 4.1.0 chalk: 4.1.2 @@ -6950,81 +9162,46 @@ packages: log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 - dev: true - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: true + os-tmpdir@1.0.2: {} - /outvariant@1.4.3: - resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + outvariant@1.4.3: {} - /p-event@4.2.0: - resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} - engines: {node: '>=8'} + p-event@4.2.0: dependencies: p-timeout: 3.2.0 - dev: true - /p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - dev: true + p-finally@1.0.0: {} - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + p-limit@2.3.0: dependencies: p-try: 2.2.0 - dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - /p-limit@5.0.0: - resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} - engines: {node: '>=18'} + p-limit@5.0.0: dependencies: yocto-queue: 1.0.0 - dev: true - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + p-locate@4.1.0: dependencies: p-limit: 2.3.0 - dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /p-timeout@3.2.0: - resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} - engines: {node: '>=8'} + p-timeout@3.2.0: dependencies: p-finally: 1.0.0 - dev: true - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true + p-try@2.2.0: {} - /package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - dev: true + package-json-from-dist@1.0.1: {} - /page-with@0.6.1(esbuild@0.24.0): - resolution: {integrity: sha512-5J58fSpc8CKonUWCPsh8b2LctFrNSOpXQ8O3tB+/iJvixOQf1qHp4+cDLiIVsl/WiuheXdZTzMcuR0KLQMaWcg==} + page-with@0.6.1(esbuild@0.24.0): dependencies: '@open-draft/until': 2.1.0 '@types/debug': 4.1.12 @@ -7046,155 +9223,82 @@ packages: - supports-color - uglify-js - webpack-cli - dev: true - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + parent-module@1.0.1: dependencies: callsites: 3.1.0 - dev: true - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.24.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true - /parse-package-name@1.0.0: - resolution: {integrity: sha512-kBeTUtcj+SkyfaW4+KBe0HtsloBJ/mKTPoxpVdA57GZiPerREsUWJOhVj9anXweFiJkm5y8FG1sxFZkZ0SN6wg==} - dev: true + parse-package-name@1.0.0: {} - /parse-passwd@1.0.0: - resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} - engines: {node: '>=0.10.0'} - dev: true + parse-passwd@1.0.0: {} - /parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - dev: true + parse5@6.0.1: {} - /parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + parse5@7.1.2: dependencies: entities: 4.5.0 - dev: true - /parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: true + parseurl@1.3.3: {} - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + path-exists@4.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-is-absolute@1.0.1: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true + path-key@3.1.1: {} - /path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - dev: true + path-key@4.0.0: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + path-parse@1.0.7: {} - /path-scurry@1.10.2: - resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} - engines: {node: '>=16 || 14 >=14.17'} + path-scurry@1.10.2: dependencies: lru-cache: 10.2.0 minipass: 7.0.4 - dev: true - /path-scurry@2.0.0: - resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} - engines: {node: 20 || >=22} + path-scurry@2.0.0: dependencies: lru-cache: 11.0.2 minipass: 7.1.2 - dev: true - /path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - dev: true + path-to-regexp@0.1.7: {} - /path-to-regexp@6.3.0: - resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} - dev: false + path-to-regexp@6.3.0: {} - /path-to-regexp@8.2.0: - resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} - engines: {node: '>=16'} - dev: true + path-to-regexp@8.2.0: {} - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true + path-type@4.0.0: {} - /pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - dev: true + pathe@1.1.2: {} - /pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - dev: true + pathval@1.1.1: {} - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true + picocolors@1.0.0: {} - /picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - dev: true + picocolors@1.1.1: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picomatch@2.3.1: {} - /picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} - dev: true + picomatch@4.0.2: {} - /pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true - dev: true + pidtree@0.6.0: {} - /pino-abstract-transport@0.5.0: - resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} + pino-abstract-transport@0.5.0: dependencies: duplexify: 4.1.3 split2: 4.2.0 - dev: true - /pino-abstract-transport@2.0.0: - resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + pino-abstract-transport@2.0.0: dependencies: split2: 4.2.0 - dev: true - /pino-pretty@7.6.1: - resolution: {integrity: sha512-H7N6ZYkiyrfwBGW9CSjx0uyO9Q2Lyt73881+OTYk8v3TiTdgN92QHrWlEq/LeWw5XtDP64jeSk3mnc6T+xX9/w==} - hasBin: true + pino-pretty@7.6.1: dependencies: args: 5.0.3 colorette: 2.0.20 @@ -7209,19 +9313,12 @@ packages: secure-json-parse: 2.7.0 sonic-boom: 2.8.0 strip-json-comments: 3.1.1 - dev: true - /pino-std-serializers@4.0.0: - resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} - dev: true + pino-std-serializers@4.0.0: {} - /pino-std-serializers@7.0.0: - resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} - dev: true + pino-std-serializers@7.0.0: {} - /pino@7.11.0: - resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} - hasBin: true + pino@7.11.0: dependencies: atomic-sleep: 1.0.0 fast-redact: 3.5.0 @@ -7234,11 +9331,8 @@ packages: safe-stable-stringify: 2.4.3 sonic-boom: 2.8.0 thread-stream: 0.15.2 - dev: true - /pino@9.5.0: - resolution: {integrity: sha512-xSEmD4pLnV54t0NOUN16yCl7RIB1c5UUOse5HSyEXtBp+FgFQyPeDutc+Q2ZO7/22vImV7VfEjH/1zV2QuqvYw==} - hasBin: true + pino@9.5.0: dependencies: atomic-sleep: 1.0.0 fast-redact: 3.5.0 @@ -7251,266 +9345,152 @@ packages: safe-stable-stringify: 2.4.3 sonic-boom: 4.2.0 thread-stream: 3.1.0 - dev: true - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - dev: true + pirates@4.0.6: {} - /pkg-types@1.0.3: - resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + pkg-types@1.0.3: dependencies: jsonc-parser: 3.2.1 mlly: 1.6.1 pathe: 1.1.2 - dev: true - /playwright-core@1.42.1: - resolution: {integrity: sha512-mxz6zclokgrke9p1vtdy/COWBH+eOZgYUVVU34C73M+4j4HLlQJHtfcqiqqxpP0o8HhMkflvfbquLX5dg6wlfA==} - engines: {node: '>=16'} - hasBin: true - dev: true + playwright-core@1.42.1: {} - /playwright-core@1.49.0: - resolution: {integrity: sha512-R+3KKTQF3npy5GTiKH/T+kdhoJfJojjHESR1YEWhYuEKRVfVaxH3+4+GvXE5xyCngCxhxnykk0Vlah9v8fs3jA==} - engines: {node: '>=18'} - hasBin: true - dev: true + playwright-core@1.49.0: {} - /playwright@1.42.1: - resolution: {integrity: sha512-PgwB03s2DZBcNRoW+1w9E+VkLBxweib6KTXM0M3tkiT4jVxKSi6PmVJ591J+0u10LUrgxB7dLRbiJqO5s2QPMg==} - engines: {node: '>=16'} - hasBin: true + playwright@1.42.1: dependencies: playwright-core: 1.42.1 optionalDependencies: fsevents: 2.3.2 - dev: true - /playwright@1.49.0: - resolution: {integrity: sha512-eKpmys0UFDnfNb3vfsf8Vx2LEOtflgRebl0Im2eQQnYMA4Aqd+Zw8bEOB+7ZKvN76901mRnqdsiOGKxzVTbi7A==} - engines: {node: '>=18'} - hasBin: true + playwright@1.49.0: dependencies: playwright-core: 1.49.0 optionalDependencies: fsevents: 2.3.2 - dev: true - /portfinder@1.0.32: - resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} - engines: {node: '>= 0.12.0'} + portfinder@1.0.32: dependencies: async: 2.6.4 debug: 3.2.7 mkdirp: 0.5.6 transitivePeerDependencies: - supports-color - dev: true - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - dev: true + possible-typed-array-names@1.0.0: {} - /postcss-load-config@6.0.1: - resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} - engines: {node: '>= 18'} - peerDependencies: - jiti: '>=1.21.0' - postcss: '>=8.0.9' - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - jiti: - optional: true - postcss: - optional: true - tsx: - optional: true - yaml: - optional: true + postcss-load-config@6.0.1(jiti@1.21.0)(postcss@8.4.38)(yaml@2.5.1): dependencies: lilconfig: 3.1.1 - dev: true + optionalDependencies: + jiti: 1.21.0 + postcss: 8.4.38 + yaml: 2.5.1 - /postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.4.38: dependencies: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.2.0 - dev: true - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true + prelude-ls@1.2.1: {} - /prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} + prettier-linter-helpers@1.0.0: dependencies: fast-diff: 1.3.0 - dev: true - /prettier@3.4.1: - resolution: {integrity: sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==} - engines: {node: '>=14'} - hasBin: true - dev: true + prettier@3.4.1: {} - /pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 react-is: 18.2.0 - dev: true - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true + process-nextick-args@2.0.1: {} - /process-warning@1.0.0: - resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} - dev: true + process-warning@1.0.0: {} - /process-warning@3.0.0: - resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} - dev: true + process-warning@3.0.0: {} - /process-warning@4.0.0: - resolution: {integrity: sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==} - dev: true + process-warning@4.0.0: {} - /proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 - dev: true - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: true + proxy-from-env@1.1.0: {} - /psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - dev: false + psl@1.9.0: {} - /pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + pump@3.0.0: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - dev: true - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} + punycode@2.3.1: {} - /qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} + qs@6.11.0: dependencies: side-channel: 1.0.6 - dev: true - /qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} - engines: {node: '>=0.6'} + qs@6.13.0: dependencies: side-channel: 1.0.6 - dev: true - /querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - dev: false + querystringify@2.2.0: {} - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + queue-microtask@1.2.3: {} - /quick-format-unescaped@4.0.4: - resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} - dev: true + quick-format-unescaped@4.0.4: {} - /quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - dev: true + quick-lru@4.0.1: {} - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 - dev: true - /range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: true + range-parser@1.2.1: {} - /raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} + raw-body@2.5.2: dependencies: bytes: 3.1.2 http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 - dev: true - /raw-body@3.0.0: - resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} - engines: {node: '>= 0.8'} + raw-body@3.0.0: dependencies: bytes: 3.1.2 http-errors: 2.0.0 iconv-lite: 0.6.3 unpipe: 1.0.0 - dev: true - /rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true + rc@1.2.8: dependencies: deep-extend: 0.6.0 ini: 1.3.8 minimist: 1.2.8 strip-json-comments: 2.0.1 - dev: true - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: true + react-is@18.2.0: {} - /read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} + read-pkg-up@7.0.1: dependencies: find-up: 4.1.0 read-pkg: 5.2.0 type-fest: 0.8.1 - dev: true - /read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} + read-pkg@5.2.0: dependencies: '@types/normalize-package-data': 2.4.4 normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 - dev: true - /readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -7519,175 +9499,97 @@ packages: safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 - dev: true - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true - /readdirp@4.0.2: - resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} - engines: {node: '>= 14.16.0'} - dev: true + readdirp@4.0.2: {} - /real-require@0.1.0: - resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} - engines: {node: '>= 12.13.0'} - dev: true + real-require@0.1.0: {} - /real-require@0.2.0: - resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} - engines: {node: '>= 12.13.0'} - dev: true + real-require@0.2.0: {} - /redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} + redent@3.0.0: dependencies: indent-string: 4.0.0 strip-indent: 3.0.0 - dev: true - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: true + regenerator-runtime@0.14.1: {} - /regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.2 - dev: true - /registry-auth-token@4.2.2: - resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==} - engines: {node: '>=6.0.0'} + registry-auth-token@4.2.2: dependencies: rc: 1.2.8 - dev: true - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} + require-directory@2.1.1: {} - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true + require-from-string@2.0.2: {} - /requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - dev: false + requires-port@1.0.0: {} - /resolve-dir@1.0.1: - resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} - engines: {node: '>=0.10.0'} + resolve-dir@1.0.1: dependencies: expand-tilde: 2.0.2 global-modules: 1.0.0 - dev: true - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true + resolve-from@4.0.0: {} - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true + resolve-from@5.0.0: {} - /resolve-global@1.0.0: - resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} - engines: {node: '>=8'} + resolve-global@1.0.0: dependencies: global-dirs: 0.1.1 - dev: true - /resolve-path@1.4.0: - resolution: {integrity: sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==} - engines: {node: '>= 0.8'} + resolve-path@1.4.0: dependencies: http-errors: 1.6.3 path-is-absolute: 1.0.1 - dev: true - /resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - dev: true + resolve-pkg-maps@1.0.0: {} - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true + resolve@1.22.8: dependencies: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true - /restore-cursor@5.1.0: - resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} - engines: {node: '>=18'} + restore-cursor@5.1.0: dependencies: onetime: 7.0.0 signal-exit: 4.1.0 - dev: true - /ret@0.4.3: - resolution: {integrity: sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==} - engines: {node: '>=10'} - dev: true + ret@0.4.3: {} - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + reusify@1.0.4: {} - /rfdc@1.3.1: - resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} - dev: true + rfdc@1.3.1: {} - /rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - dev: true + rfdc@1.4.1: {} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true + rimraf@3.0.2: dependencies: glob: 7.2.3 - dev: true - /rimraf@6.0.1: - resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} - engines: {node: 20 || >=22} - hasBin: true + rimraf@6.0.1: dependencies: glob: 11.0.0 package-json-from-dist: 1.0.1 - dev: true - /rollup@4.13.2: - resolution: {integrity: sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true + rollup@4.13.2: dependencies: '@types/estree': 1.0.5 optionalDependencies: @@ -7707,12 +9609,8 @@ packages: '@rollup/rollup-win32-ia32-msvc': 4.13.2 '@rollup/rollup-win32-x64-msvc': 4.13.2 fsevents: 2.3.3 - dev: true - /rollup@4.27.4: - resolution: {integrity: sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true + rollup@4.27.4: dependencies: '@types/estree': 1.0.6 optionalDependencies: @@ -7735,11 +9633,8 @@ packages: '@rollup/rollup-win32-ia32-msvc': 4.27.4 '@rollup/rollup-win32-x64-msvc': 4.27.4 fsevents: 2.3.3 - dev: true - /router@2.0.0: - resolution: {integrity: sha512-dIM5zVoG8xhC6rnSN8uoAgFARwTE7BQs8YwHEvK0VCmfxQXMaOuA1uiR1IPwsW7JyK5iTt7Od/TC9StasS2NPQ==} - engines: {node: '>= 0.10'} + router@2.0.0: dependencies: array-flatten: 3.0.0 is-promise: 4.0.0 @@ -7748,112 +9643,65 @@ packages: path-to-regexp: 8.2.0 setprototypeof: 1.2.0 utils-merge: 1.0.1 - dev: true - /rrweb-cssom@0.7.1: - resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} - dev: true + rrweb-cssom@0.7.1: {} - /run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - dev: true + run-async@2.4.1: {} - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.1: dependencies: tslib: 2.6.2 - dev: true - /safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} + safe-array-concat@1.1.2: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 - dev: true - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true + safe-buffer@5.1.2: {} - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true + safe-buffer@5.2.1: {} - /safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} + safe-regex-test@1.0.3: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-regex: 1.1.4 - dev: true - /safe-regex2@3.1.0: - resolution: {integrity: sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==} + safe-regex2@3.1.0: dependencies: ret: 0.4.3 - dev: true - /safe-stable-stringify@2.4.3: - resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} - engines: {node: '>=10'} - dev: true + safe-stable-stringify@2.4.3: {} - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + safer-buffer@2.1.2: {} - /saxes@6.0.0: - resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} - engines: {node: '>=v12.22.7'} + saxes@6.0.0: dependencies: xmlchars: 2.2.0 - dev: true - /schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} + schema-utils@3.3.0: dependencies: '@types/json-schema': 7.0.15 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - dev: true - /secure-json-parse@2.7.0: - resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} - dev: true + secure-json-parse@2.7.0: {} - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - dev: true + semver@5.7.2: {} - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true + semver@6.3.1: {} - /semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} - engines: {node: '>=10'} - hasBin: true + semver@7.6.0: dependencies: lru-cache: 6.0.0 - dev: true - /send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} + send@0.18.0: dependencies: debug: 2.6.9 depd: 2.0.0 @@ -7870,11 +9718,8 @@ packages: statuses: 2.0.1 transitivePeerDependencies: - supports-color - dev: true - /send@1.1.0: - resolution: {integrity: sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==} - engines: {node: '>= 18'} + send@1.1.0: dependencies: debug: 4.3.6 destroy: 1.2.0 @@ -7890,17 +9735,12 @@ packages: statuses: 2.0.1 transitivePeerDependencies: - supports-color - dev: true - /serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 - dev: true - /serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} + serve-static@1.15.0: dependencies: encodeurl: 1.0.2 escape-html: 1.0.3 @@ -7908,11 +9748,8 @@ packages: send: 0.18.0 transitivePeerDependencies: - supports-color - dev: true - /serve-static@2.1.0: - resolution: {integrity: sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA==} - engines: {node: '>= 18'} + serve-static@2.1.0: dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 @@ -7920,15 +9757,10 @@ packages: send: 1.1.0 transitivePeerDependencies: - supports-color - dev: true - /set-cookie-parser@2.6.0: - resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} - dev: true + set-cookie-parser@2.6.0: {} - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 @@ -7936,91 +9768,54 @@ packages: get-intrinsic: 1.2.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 - dev: true - /set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} + set-function-name@2.0.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 - dev: true - /setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - dev: true + setprototypeof@1.1.0: {} - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: true + setprototypeof@1.2.0: {} - /shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} + shallow-clone@3.0.1: dependencies: kind-of: 6.0.3 - dev: true - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - dev: true - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true + shebang-regex@3.0.0: {} - /side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} + side-channel@1.0.6: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 object-inspect: 1.13.1 - dev: true - /siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - dev: true + siginfo@2.0.0: {} - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + signal-exit@3.0.7: {} - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} + signal-exit@4.1.0: {} - /simple-git-hooks@2.11.1: - resolution: {integrity: sha512-tgqwPUMDcNDhuf1Xf6KTUsyeqGdgKMhzaH4PAZZuzguOgTl5uuyeYe/8mWgAr6IBxB5V06uqEf6Dy37gIWDtDg==} - hasBin: true - requiresBuild: true - dev: true + simple-git-hooks@2.11.1: {} - /slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} + slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.1 is-fullwidth-code-point: 4.0.0 - dev: true - /slice-ansi@7.1.0: - resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} - engines: {node: '>=18'} + slice-ansi@7.1.0: dependencies: ansi-styles: 6.2.1 is-fullwidth-code-point: 5.0.0 - dev: true - /socket.io-adapter@2.5.4: - resolution: {integrity: sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg==} + socket.io-adapter@2.5.4: dependencies: debug: 4.3.4 ws: 8.11.0 @@ -8029,9 +9824,7 @@ packages: - supports-color - utf-8-validate - /socket.io-client@4.7.5: - resolution: {integrity: sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==} - engines: {node: '>=10.0.0'} + socket.io-client@4.7.5: dependencies: '@socket.io/component-emitter': 3.1.0 debug: 4.3.4 @@ -8041,20 +9834,15 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: false - /socket.io-parser@4.2.4: - resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} - engines: {node: '>=10.0.0'} + socket.io-parser@4.2.4: dependencies: '@socket.io/component-emitter': 3.1.0 debug: 4.3.4 transitivePeerDependencies: - supports-color - /socket.io@4.7.5: - resolution: {integrity: sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==} - engines: {node: '>=10.2.0'} + socket.io@4.7.5: dependencies: accepts: 1.3.8 base64id: 2.0.0 @@ -8068,256 +9856,150 @@ packages: - supports-color - utf-8-validate - /sonic-boom@2.8.0: - resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} + sonic-boom@2.8.0: dependencies: atomic-sleep: 1.0.0 - dev: true - /sonic-boom@4.2.0: - resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} + sonic-boom@4.2.0: dependencies: atomic-sleep: 1.0.0 - dev: true - /source-list-map@2.0.1: - resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} - dev: true + source-list-map@2.0.1: {} - /source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} - dev: true + source-map-js@1.2.0: {} - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.6.1: {} - /source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} + source-map@0.8.0-beta.0: dependencies: whatwg-url: 7.1.0 - dev: true - /spawn-error-forwarder@1.0.0: - resolution: {integrity: sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==} - dev: true + spawn-error-forwarder@1.0.0: {} - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.17 - dev: true - /spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - dev: true + spdx-exceptions@2.5.0: {} - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 spdx-license-ids: 3.0.17 - dev: true - /spdx-license-ids@3.0.17: - resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} - dev: true + spdx-license-ids@3.0.17: {} - /split2@1.0.0: - resolution: {integrity: sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==} + split2@1.0.0: dependencies: through2: 2.0.5 - dev: true - /split2@3.2.2: - resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + split2@3.2.2: dependencies: readable-stream: 3.6.2 - dev: true - /split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} - dev: true + split2@4.2.0: {} - /stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - dev: true + stackback@0.0.2: {} - /statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - dev: true + statuses@1.5.0: {} - /statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} + statuses@2.0.1: {} - /std-env@3.7.0: - resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} - dev: true + std-env@3.7.0: {} - /stream-combiner2@1.1.1: - resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} + stream-combiner2@1.1.1: dependencies: duplexer2: 0.1.4 readable-stream: 2.3.8 - dev: true - /stream-read-all@3.0.1: - resolution: {integrity: sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==} - engines: {node: '>=10'} - dev: true + stream-read-all@3.0.1: {} - /stream-shift@1.0.3: - resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} - dev: true + stream-shift@1.0.3: {} - /streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - dev: true + streamsearch@1.1.0: {} - /strict-event-emitter@0.5.1: - resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} - dev: false + strict-event-emitter@0.5.1: {} - /string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - dev: true + string-argv@0.3.2: {} - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + string-width@5.1.2: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 - dev: true - /string-width@7.1.0: - resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} - engines: {node: '>=18'} + string-width@7.1.0: dependencies: emoji-regex: 10.3.0 get-east-asian-width: 1.2.0 strip-ansi: 7.1.0 - dev: true - /string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} + string.prototype.trim@1.2.9: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-object-atoms: 1.0.0 - dev: true - /string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + string.prototype.trimend@1.0.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + string.prototype.trimstart@1.0.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 - dev: true - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - dev: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + strip-ansi@7.1.0: dependencies: ansi-regex: 6.0.1 - dev: true - /strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - dev: true + strip-bom@4.0.0: {} - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true + strip-final-newline@2.0.0: {} - /strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - dev: true + strip-final-newline@3.0.0: {} - /strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 - dev: true - /strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - dev: true + strip-json-comments@2.0.1: {} - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + strip-json-comments@3.1.1: {} - /strip-literal@2.1.0: - resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} + strip-literal@2.1.0: dependencies: js-tokens: 9.0.0 - dev: true - /sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 @@ -8326,49 +10008,29 @@ packages: mz: 2.7.0 pirates: 4.0.6 ts-interface-checker: 0.1.13 - dev: true - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 - dev: true - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 - dev: true - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true + supports-preserve-symlinks-flag@1.0.0: {} - /symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - dev: true + symbol-tree@3.2.4: {} - /synckit@0.9.2: - resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} - engines: {node: ^14.18.0 || >=16.0.0} + synckit@0.9.2: dependencies: '@pkgr/core': 0.1.1 tslib: 2.6.2 - dev: true - /table-layout@3.0.2: - resolution: {integrity: sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==} - engines: {node: '>=12.17'} - hasBin: true + table-layout@3.0.2: dependencies: '@75lb/deep-merge': 1.1.1 array-back: 6.2.2 @@ -8377,241 +10039,125 @@ packages: stream-read-all: 3.0.1 typical: 7.1.1 wordwrapjs: 5.1.0 - dev: true - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: true + tapable@2.2.1: {} - /terser-webpack-plugin@5.3.10(esbuild@0.24.0)(webpack@5.96.1): - resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true + terser-webpack-plugin@5.3.10(esbuild@0.24.0)(webpack@5.96.1(esbuild@0.24.0)): dependencies: '@jridgewell/trace-mapping': 0.3.25 - esbuild: 0.24.0 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.30.1 webpack: 5.96.1(esbuild@0.24.0) - dev: true + optionalDependencies: + esbuild: 0.24.0 - /terser@5.30.1: - resolution: {integrity: sha512-PJhOnRttZqqmIujxOQOMu4QuFGvh43lR7Youln3k6OJvmxwZ5FxK5rbCEh8XABRCpLf7ZnhrZuclCNCASsScnA==} - engines: {node: '>=10'} - hasBin: true + terser@5.30.1: dependencies: '@jridgewell/source-map': 0.3.6 acorn: 8.14.0 commander: 2.20.3 source-map-support: 0.5.21 - dev: true - /text-extensions@2.4.0: - resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} - engines: {node: '>=8'} - dev: true + text-extensions@2.4.0: {} - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + text-table@0.2.0: {} - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} + thenify-all@1.6.0: dependencies: thenify: 3.3.1 - dev: true - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thenify@3.3.1: dependencies: any-promise: 1.3.0 - dev: true - /thread-stream@0.15.2: - resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} + thread-stream@0.15.2: dependencies: real-require: 0.1.0 - dev: true - /thread-stream@3.1.0: - resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + thread-stream@3.1.0: dependencies: real-require: 0.2.0 - dev: true - /through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + through2@2.0.5: dependencies: readable-stream: 2.3.8 xtend: 4.0.2 - dev: true - /through2@4.0.2: - resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + through2@4.0.2: dependencies: readable-stream: 3.6.2 - dev: true - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true + through@2.3.8: {} - /tinybench@2.6.0: - resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} - dev: true + tinybench@2.6.0: {} - /tinyexec@0.3.1: - resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} - dev: true + tinyexec@0.3.1: {} - /tinyglobby@0.2.10: - resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} - engines: {node: '>=12.0.0'} + tinyglobby@0.2.10: dependencies: fdir: 6.4.2(picomatch@4.0.2) picomatch: 4.0.2 - dev: true - /tinypool@0.8.3: - resolution: {integrity: sha512-Ud7uepAklqRH1bvwy22ynrliC7Dljz7Tm8M/0RBUW+YRa4YHhZ6e4PpgE+fu1zr/WqB1kbeuVrdfeuyIBpy4tw==} - engines: {node: '>=14.0.0'} - dev: true + tinypool@0.8.3: {} - /tinyspy@2.2.1: - resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} - engines: {node: '>=14.0.0'} - dev: true + tinyspy@2.2.1: {} - /tldts-core@6.1.64: - resolution: {integrity: sha512-uqnl8vGV16KsyflHOzqrYjjArjfXaU6rMPXYy2/ZWoRKCkXtghgB4VwTDXUG+t0OTGeSewNAG31/x1gCTfLt+Q==} - dev: true + tldts-core@6.1.64: {} - /tldts@6.1.64: - resolution: {integrity: sha512-ph4AE5BXWIOsSy9stpoeo7bYe/Cy7VfpciIH4RhVZUPItCJmhqWCN0EVzxd8BOHiyNb42vuJc6NWTjJkg91Tuw==} - hasBin: true + tldts@6.1.64: dependencies: tldts-core: 6.1.64 - dev: true - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 - dev: true - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: true + to-fast-properties@2.0.0: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /toad-cache@3.7.0: - resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==} - engines: {node: '>=12'} - dev: true + toad-cache@3.7.0: {} - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: true + toidentifier@1.0.1: {} - /tough-cookie@4.1.4: - resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} - engines: {node: '>=6'} + tough-cookie@4.1.4: dependencies: psl: 1.9.0 punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 - dev: false - /tough-cookie@5.0.0: - resolution: {integrity: sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==} - engines: {node: '>=16'} + tough-cookie@5.0.0: dependencies: tldts: 6.1.64 - dev: true - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true + tr46@0.0.3: {} - /tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + tr46@1.0.1: dependencies: punycode: 2.3.1 - dev: true - /tr46@5.0.0: - resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} - engines: {node: '>=18'} + tr46@5.0.0: dependencies: punycode: 2.3.1 - dev: true - /traverse@0.6.8: - resolution: {integrity: sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==} - engines: {node: '>= 0.4'} - dev: true + traverse@0.6.8: {} - /tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - dev: true + tree-kill@1.2.2: {} - /trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - dev: true + trim-newlines@3.0.1: {} - /ts-api-utils@1.3.0(typescript@5.5.2): - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' + ts-api-utils@1.3.0(typescript@5.5.2): dependencies: typescript: 5.5.2 - dev: true - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: true + ts-interface-checker@0.1.13: {} - /ts-node@10.9.2(@types/node@18.19.28)(typescript@5.5.2): - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true + ts-node@10.9.2(@types/node@18.19.28)(typescript@5.5.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -8628,35 +10174,12 @@ packages: typescript: 5.5.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: true - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: true + tslib@2.6.2: {} - /tsscmp@1.0.6: - resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} - engines: {node: '>=0.6.x'} - dev: true + tsscmp@1.0.6: {} - /tsup@8.3.5(typescript@5.5.2): - resolution: {integrity: sha512-Tunf6r6m6tnZsG9GYWndg0z8dEV7fD733VBFzFJ5Vcm1FtlXB8xBD/rtrBi2a3YKEV7hHtxiZtW5EAVADoe1pA==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - '@microsoft/api-extractor': ^7.36.0 - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.5.0' - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true + tsup@8.3.5(jiti@1.21.0)(postcss@8.4.38)(typescript@5.5.2)(yaml@2.5.1): dependencies: bundle-require: 5.0.0(esbuild@0.24.0) cac: 6.7.14 @@ -8666,7 +10189,7 @@ packages: esbuild: 0.24.0 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1 + postcss-load-config: 6.0.1(jiti@1.21.0)(postcss@8.4.38)(yaml@2.5.1) resolve-from: 5.0.0 rollup: 4.27.4 source-map: 0.8.0-beta.0 @@ -8674,95 +10197,59 @@ packages: tinyexec: 0.3.1 tinyglobby: 0.2.10 tree-kill: 1.2.2 + optionalDependencies: + postcss: 8.4.38 typescript: 5.5.2 transitivePeerDependencies: - jiti - supports-color - tsx - yaml - dev: true - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - dev: true - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: true + type-detect@4.0.8: {} - /type-fest@0.18.1: - resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} - engines: {node: '>=10'} - dev: true + type-fest@0.18.1: {} - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true + type-fest@0.20.2: {} - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} + type-fest@0.21.3: {} - /type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true + type-fest@0.6.0: {} - /type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: true + type-fest@0.8.1: {} - /type-fest@4.29.0: - resolution: {integrity: sha512-RPYt6dKyemXJe7I6oNstcH24myUGSReicxcHTvCLgzm4e0n8y05dGvcGB15/SoPRBmhlMthWQ9pvKyL81ko8nQ==} - engines: {node: '>=16'} - dev: false + type-fest@4.29.0: {} - /type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} + type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - dev: true - /type-is@2.0.0: - resolution: {integrity: sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw==} - engines: {node: '>= 0.6'} + type-is@2.0.0: dependencies: content-type: 1.0.5 media-typer: 1.1.0 mime-types: 3.0.0 - dev: true - /typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} + typed-array-buffer@1.0.2: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-typed-array: 1.1.13 - dev: true - /typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.1: 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 - dev: true - /typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} + typed-array-byte-offset@1.0.2: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.7 @@ -8770,11 +10257,8 @@ packages: gopd: 1.0.1 has-proto: 1.0.3 is-typed-array: 1.1.13 - dev: true - /typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} + typed-array-length@1.0.6: dependencies: call-bind: 1.0.7 for-each: 0.3.3 @@ -8782,128 +10266,69 @@ packages: has-proto: 1.0.3 is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - dev: true - /typescript@5.5.2: - resolution: {integrity: sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + typescript@5.5.2: {} - /typical@4.0.0: - resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} - engines: {node: '>=8'} - dev: true + typical@4.0.0: {} - /typical@7.1.1: - resolution: {integrity: sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==} - engines: {node: '>=12.17'} - dev: true + typical@7.1.1: {} - /ufo@1.5.3: - resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} - dev: true + ufo@1.5.3: {} - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - dev: true - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@5.26.5: {} - /undici@5.28.4: - resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} - engines: {node: '>=14.0'} + undici@5.28.4: dependencies: '@fastify/busboy': 2.1.1 - dev: true - /undici@6.21.0: - resolution: {integrity: sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==} - engines: {node: '>=18.17'} - dev: true + undici@6.21.0: {} - /universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - dev: false + universalify@0.2.0: {} - /universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - dev: true + universalify@2.0.1: {} - /unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - dev: true + unpipe@1.0.0: {} - /update-browserslist-db@1.0.13(browserslist@4.23.0): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + update-browserslist-db@1.0.13(browserslist@4.23.0): dependencies: browserslist: 4.23.0 escalade: 3.1.2 picocolors: 1.0.0 - dev: true - /update-browserslist-db@1.1.1(browserslist@4.24.2): - resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + update-browserslist-db@1.1.1(browserslist@4.24.2): dependencies: browserslist: 4.24.2 escalade: 3.2.0 picocolors: 1.1.1 - dev: true - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: punycode: 2.3.1 - dev: true - /url-loader@4.1.1(webpack@5.96.1): - resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} - engines: {node: '>= 10.13.0'} - peerDependencies: - file-loader: '*' - webpack: ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - file-loader: - optional: true + url-loader@4.1.1(webpack@5.96.1(esbuild@0.24.0)): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 webpack: 5.96.1(esbuild@0.24.0) - dev: true - /url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + url-parse@1.5.10: dependencies: querystringify: 2.2.0 requires-port: 1.0.0 - dev: false - /urlpattern-polyfill@4.0.3: - resolution: {integrity: sha512-DOE84vZT2fEcl9gqCUTcnAw5ZY5Id55ikUcziSUntuEFL3pRvavg5kwDmTEUJkeCHInTlV/HexFomgYnzO5kdQ==} - dev: true + urlpattern-polyfill@4.0.3: {} - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true + util-deprecate@1.0.2: {} - /util.promisify@1.1.2: - resolution: {integrity: sha512-PBdZ03m1kBnQ5cjjO0ZvJMJS+QsbyIcFwi4hY4U76OQsCO9JrOYjbCFgIF76ccFg9xnJo7ZHPkqyj1GqmdS7MA==} + util.promisify@1.1.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -8912,50 +10337,31 @@ packages: has-symbols: 1.0.3 object.getownpropertydescriptors: 2.1.8 safe-array-concat: 1.1.2 - dev: true - /utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - dev: true + utils-merge@1.0.1: {} - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: true + uuid@8.3.2: {} - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true + v8-compile-cache-lib@3.0.1: {} - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - dev: true - /validate-npm-package-name@4.0.0: - resolution: {integrity: sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + validate-npm-package-name@4.0.0: dependencies: builtins: 5.0.1 - dev: true - /vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} + vary@1.1.2: {} - /vite-node@1.4.0(@types/node@18.19.28): - resolution: {integrity: sha512-VZDAseqjrHgNd4Kh8icYHWzTKSCZMhia7GyHfhtzLW33fZlG9SwsB6CEhgyVOWkJfJ2pFLrp/Gj1FSfAiqH9Lw==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true + vite-node@1.4.0(@types/node@18.19.28)(terser@5.30.1): dependencies: cac: 6.7.14 debug: 4.3.4 pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.2.7(@types/node@18.19.28) + vite: 5.2.7(@types/node@18.19.28)(terser@5.30.1) transitivePeerDependencies: - '@types/node' - less @@ -8965,87 +10371,31 @@ packages: - sugarss - supports-color - terser - dev: true - /vite@5.2.7(@types/node@18.19.28): - resolution: {integrity: sha512-k14PWOKLI6pMaSzAuGtT+Cf0YmIx12z9YGon39onaJNy8DLBfBJrzg9FQEmkAM5lpHBZs9wksWAsyF/HkpEwJA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true + vite@5.2.7(@types/node@18.19.28)(terser@5.30.1): dependencies: - '@types/node': 18.19.28 esbuild: 0.20.2 postcss: 8.4.38 rollup: 4.13.2 optionalDependencies: + '@types/node': 18.19.28 fsevents: 2.3.3 - dev: true + terser: 5.30.1 - /vitest-environment-miniflare@2.14.4(vitest@1.4.0): - resolution: {integrity: sha512-DzwQWdY42sVYR6aUndw9FdCtl/i0oh3NkbkQpw+xq5aYQw5eiJn5kwnKaKQEWaoBe8Cso71X2i1EJGvi1jZ2xw==} - engines: {node: '>=16.13'} - peerDependencies: - vitest: '>=0.23.0' + vitest-environment-miniflare@2.14.4(vitest@1.4.0(@types/node@18.19.28)(jsdom@25.0.1)(terser@5.30.1)): dependencies: '@miniflare/queues': 2.14.4 '@miniflare/runner-vm': 2.14.4 '@miniflare/shared': 2.14.4 '@miniflare/shared-test-environment': 2.14.4 undici: 5.28.4 - vitest: 1.4.0(@types/node@18.19.28)(jsdom@25.0.1) + vitest: 1.4.0(@types/node@18.19.28)(jsdom@25.0.1)(terser@5.30.1) transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true - /vitest@1.4.0(@types/node@18.19.28)(jsdom@25.0.1): - resolution: {integrity: sha512-gujzn0g7fmwf83/WzrDTnncZt2UiXP41mHuFYFrdwaLRVQ6JYQEiME2IfEjU3vcFL3VKa75XhI3lFgn+hfVsQw==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 1.4.0 - '@vitest/ui': 1.4.0 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@types/node': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true + vitest@1.4.0(@types/node@18.19.28)(jsdom@25.0.1)(terser@5.30.1): dependencies: - '@types/node': 18.19.28 '@vitest/expect': 1.4.0 '@vitest/runner': 1.4.0 '@vitest/snapshot': 1.4.0 @@ -9055,7 +10405,6 @@ packages: chai: 4.4.1 debug: 4.3.4 execa: 8.0.1 - jsdom: 25.0.1 local-pkg: 0.5.0 magic-string: 0.30.8 pathe: 1.1.2 @@ -9064,9 +10413,12 @@ packages: strip-literal: 2.1.0 tinybench: 2.6.0 tinypool: 0.8.3 - vite: 5.2.7(@types/node@18.19.28) - vite-node: 1.4.0(@types/node@18.19.28) + vite: 5.2.7(@types/node@18.19.28)(terser@5.30.1) + vite-node: 1.4.0(@types/node@18.19.28)(terser@5.30.1) why-is-node-running: 2.2.2 + optionalDependencies: + '@types/node': 18.19.28 + jsdom: 25.0.1 transitivePeerDependencies: - less - lightningcss @@ -9075,44 +10427,27 @@ packages: - sugarss - supports-color - terser - dev: true - /w3c-xmlserializer@5.0.0: - resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} - engines: {node: '>=18'} + w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 - dev: true - /watchpack@2.4.1: - resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} - engines: {node: '>=10.13.0'} + watchpack@2.4.1: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - dev: true - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + wcwidth@1.0.1: dependencies: defaults: 1.0.4 - dev: true - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true + webidl-conversions@3.0.1: {} - /webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - dev: true + webidl-conversions@4.0.2: {} - /webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} - dev: true + webidl-conversions@7.0.0: {} - /webpack-http-server@0.5.0(esbuild@0.24.0): - resolution: {integrity: sha512-kyewxAnzmDuZxe09fn/Bb0PeEnaDxHChYKFVsMy4oeBUs9Cyv2j1uEgzQJ7ljPFexLU8ongUS4i4O+e22CeBZQ==} + webpack-http-server@0.5.0(esbuild@0.24.0): dependencies: '@types/express': 4.17.21 '@types/mustache': 4.2.5 @@ -9127,38 +10462,21 @@ packages: - supports-color - uglify-js - webpack-cli - dev: true - /webpack-merge@5.10.0: - resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} - engines: {node: '>=10.0.0'} + webpack-merge@5.10.0: dependencies: clone-deep: 4.0.1 flat: 5.0.2 wildcard: 2.0.1 - dev: true - /webpack-sources@1.4.3: - resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} + webpack-sources@1.4.3: dependencies: source-list-map: 2.0.1 source-map: 0.6.1 - dev: true - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: true + webpack-sources@3.2.3: {} - /webpack@5.96.1(esbuild@0.24.0): - resolution: {integrity: sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true + webpack@5.96.1(esbuild@0.24.0): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -9180,253 +10498,130 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.24.0)(webpack@5.96.1) + terser-webpack-plugin: 5.3.10(esbuild@0.24.0)(webpack@5.96.1(esbuild@0.24.0)) watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - dev: true - /whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} + whatwg-encoding@3.1.1: dependencies: iconv-lite: 0.6.3 - dev: true - /whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} - dev: true + whatwg-mimetype@4.0.0: {} - /whatwg-url@14.0.0: - resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} - engines: {node: '>=18'} + whatwg-url@14.0.0: dependencies: tr46: 5.0.0 webidl-conversions: 7.0.0 - dev: true - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: true - /whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + whatwg-url@7.1.0: dependencies: lodash.sortby: 4.7.0 tr46: 1.0.1 webidl-conversions: 4.0.2 - dev: true - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: true - /which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.15: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.2 - dev: true - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true + which@1.3.1: dependencies: isexe: 2.0.0 - dev: true - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /why-is-node-running@2.2.2: - resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} - engines: {node: '>=8'} - hasBin: true + why-is-node-running@2.2.2: dependencies: siginfo: 2.0.0 stackback: 0.0.2 - dev: true - /wildcard@2.0.1: - resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} - dev: true + wildcard@2.0.1: {} - /word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - dev: true + word-wrap@1.2.5: {} - /wordwrapjs@5.1.0: - resolution: {integrity: sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==} - engines: {node: '>=12.17'} - dev: true + wordwrapjs@5.1.0: {} - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: false - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + wrap-ansi@8.1.0: dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 - dev: true - /wrap-ansi@9.0.0: - resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} - engines: {node: '>=18'} + wrap-ansi@9.0.0: dependencies: ansi-styles: 6.2.1 string-width: 7.1.0 strip-ansi: 7.1.0 - dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true + wrappy@1.0.2: {} - /ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true + ws@7.5.10: {} - /ws@8.11.0: - resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true + ws@8.11.0: {} - /ws@8.17.1: - resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true + ws@8.17.1: {} - /ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true + ws@8.18.0: {} - /xml-name-validator@5.0.0: - resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} - engines: {node: '>=18'} - dev: true + xml-name-validator@5.0.0: {} - /xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - dev: true + xmlchars@2.2.0: {} - /xmlhttprequest-ssl@2.0.0: - resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} - engines: {node: '>=0.4.0'} - dev: false + xmlhttprequest-ssl@2.0.0: {} - /xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - dev: true + xtend@4.0.2: {} - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} + y18n@5.0.8: {} - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true + yallist@3.1.1: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true + yallist@4.0.0: {} - /yaml@2.5.1: - resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} - engines: {node: '>= 14'} - hasBin: true - dev: true + yaml@2.5.1: {} - /yargs-parser@10.1.0: - resolution: {integrity: sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==} + yargs-parser@10.1.0: dependencies: camelcase: 4.1.0 - dev: true - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: true + yargs-parser@20.2.9: {} - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} + yargs-parser@21.1.1: {} - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@17.7.2: dependencies: cliui: 8.0.1 escalade: 3.1.2 @@ -9436,27 +10631,12 @@ packages: y18n: 5.0.8 yargs-parser: 21.1.1 - /ylru@1.4.0: - resolution: {integrity: sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==} - engines: {node: '>= 4.0.0'} - dev: true + ylru@1.4.0: {} - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true + yn@3.1.1: {} - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yocto-queue@0.1.0: {} - /yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - dev: true + yocto-queue@1.0.0: {} - /yoctocolors-cjs@2.1.2: - resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} - engines: {node: '>=18'} - dev: false + yoctocolors-cjs@2.1.2: {} diff --git a/src/core/utils/request/serializeUtils.ts b/src/core/utils/request/serializeUtils.ts index e355f80d5..e92e7f934 100644 --- a/src/core/utils/request/serializeUtils.ts +++ b/src/core/utils/request/serializeUtils.ts @@ -1,15 +1,11 @@ -import { - headersToObject, - flattenHeadersObject, - type FlatHeadersObject, -} from 'headers-polyfill' +import { FetchResponse } from '@mswjs/interceptors' import { isObject } from '../internal/isObject' export interface SerializedRequest { __serializedType: 'request' method: string url: string - headers: FlatHeadersObject + headers: Array<[string, string]> body?: ArrayBuffer } @@ -17,7 +13,7 @@ export interface SerializedResponse { __serializedType: 'response' status: number statusText?: string - headers: FlatHeadersObject + headers: Array<[string, string]> body?: ArrayBuffer } @@ -37,7 +33,7 @@ export async function serializeRequest( __serializedType: 'request', method: request.method, url: request.url, - headers: flattenHeadersObject(headersToObject(request.headers)), + headers: Array.from(request.headers), body: requestBody, } } @@ -79,7 +75,7 @@ export async function serializeResponse( __serializedType: 'response', status: response.status, statusText: response.statusText, - headers: flattenHeadersObject(headersToObject(response.headers)), + headers: Array.from(response.headers), body: responseBody, } } @@ -100,7 +96,7 @@ export function isSerializedResponse( * serialized responses during a message channel transfer. */ export function deserializeResponse(serialized: SerializedResponse): Response { - return new Response(serialized.body, { + return new FetchResponse(serialized.body, { status: serialized.status, statusText: serialized.statusText, headers: serialized.headers, diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 2104f24b0..33b057aa9 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -21,7 +21,7 @@ import { } from '~/core/utils/internal/emitterUtils' import { shouldBypassRequest } from '~/core/utils/internal/requestUtils' -const store = new AsyncLocalStorage() +const handlersStorage = new AsyncLocalStorage() type RequestHandlersContext = { initialHandlers: Array @@ -34,14 +34,14 @@ type RequestHandlersContext = { * across mutliple tests. */ export class AsyncHandlersController implements HandlersController { - private store: AsyncLocalStorage + private storage: AsyncLocalStorage private rootContext: RequestHandlersContext constructor(args: { - store: AsyncLocalStorage + storage: AsyncLocalStorage initialHandlers: Array }) { - this.store = args.store + this.storage = args.storage this.rootContext = { initialHandlers: args.initialHandlers, handlers: [], @@ -49,7 +49,13 @@ export class AsyncHandlersController implements HandlersController { } get context(): RequestHandlersContext { - return this.store.getStore() || this.rootContext + const store = this.storage.getStore() + + if (store) { + return store + } + + return this.rootContext } public prepend(runtimeHandlers: Array) { @@ -82,7 +88,7 @@ export class SetupServerApi ) this.handlersController = new AsyncHandlersController({ - store, + storage: handlersStorage, initialHandlers: handlers, }) } @@ -91,7 +97,7 @@ export class SetupServerApi callback: (...args: Args) => R, ): (...args: Args) => R { return (...args: Args): R => { - return store.run( + return handlersStorage.run( { initialHandlers: this.handlersController.currentHandlers(), handlers: [], @@ -104,14 +110,12 @@ export class SetupServerApi public close(): void { super.close() - store.disable() + handlersStorage.disable() } public listen(options?: Partial): void { super.listen(options) - console.log('[setupServer] listen()') - // If the "remotePort" option has been provided to the server, // run it in a special "remote" mode. That mode ensures that // an extraneous Node.js process can affect this process' traffic. @@ -127,8 +131,6 @@ export class SetupServerApi remotePort, ) - console.log('SETUPSERVER IN REMOTE MODE!') - // Create the WebSocket sync client immediately when starting the interception. this.socketPromise = createSyncClient({ port: remotePort, @@ -138,8 +140,6 @@ export class SetupServerApi // remote request handler to be the first for this process. // This way, the remote process' handlers take priority. this.socketPromise.then((socket) => { - console.log('[setupServer] socketPromise resolved!') - this.handlersController.currentHandlers = new Proxy( this.handlersController.currentHandlers, { @@ -156,18 +156,10 @@ export class SetupServerApi }) this.beforeRequest = async ({ request }) => { - console.log( - 'beforeRequest', - request.method, - request.url, - Array.from(request.headers.entries()), - ) - /** * @todo This technically shouldn't trigger but it does. */ if (request.url.includes('/socket.io/')) { - console.log('allow ws request passthrough...') return } diff --git a/src/node/SetupServerCommonApi.ts b/src/node/SetupServerCommonApi.ts index b41ae5989..eaea0a331 100644 --- a/src/node/SetupServerCommonApi.ts +++ b/src/node/SetupServerCommonApi.ts @@ -106,12 +106,6 @@ export class SetupServerCommonApi controller.respondWith(response) } - console.log( - '[setupServerCommonApi] performing request as-is...', - request.method, - request.url, - ) - return }, ) diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index 33ceda7c2..d402bf10a 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -30,7 +30,7 @@ import { AsyncHandlersController } from './SetupServerApi' export const MSW_REMOTE_SERVER_PORT = 56957 -const store = new AsyncLocalStorage<{ +const handlersStorage = new AsyncLocalStorage<{ contextId: string initialHandlers: Array handlers: Array @@ -91,13 +91,13 @@ export class SetupRemoteServerApi super(...handlers) this.handlersController = new AsyncHandlersController({ - store, + storage: handlersStorage, initialHandlers: handlers, }) } get contextId(): string { - const context = store.getStore() + const context = handlersStorage.getStore() invariant( context != null, @@ -122,8 +122,6 @@ export class SetupRemoteServerApi const wssUrl = createWebSocketServerUrl(port) const server = await createSyncServer(wssUrl) - console.log('[remote] created ws server!', wssUrl.href) - server.removeAllListeners() process @@ -131,16 +129,16 @@ export class SetupRemoteServerApi .once('SIGINT', () => closeSyncServer(server)) server.on('connection', async (socket) => { - console.log('[remote] socket CONNECTED!') - socket.on('request', async ({ requestId, serializedRequest }) => { const request = deserializeRequest(serializedRequest) + const handlers = this.handlersController + .currentHandlers() + .filter(isHandlerKind('RequestHandler')) + const response = await handleRequest( request, requestId, - this.handlersController - .currentHandlers() - .filter(isHandlerKind('RequestHandler')), + handlers, /** * @todo Support resolve options from the `.listen()` call. */ @@ -168,7 +166,7 @@ export class SetupRemoteServerApi const contextId = createRequestId() return (...args: Args): R => { - return store.run( + return handlersStorage.run( { contextId, initialHandlers: this.handlersController.currentHandlers(), @@ -181,7 +179,7 @@ export class SetupRemoteServerApi } public async close(): Promise { - store.disable() + handlersStorage.disable() const syncServer = Reflect.get(globalThis, kSyncServer) as SyncServerType @@ -282,17 +280,11 @@ export async function createSyncClient(args: { port: number }) { }, }) - console.log('created ws client!') - socket.on('connect', () => { - console.log('ws client CONNECT!') - connectionPromise.resolve(socket) }) socket.io.once('error', (error) => { - console.log('ws client ERROR!', error) - connectionPromise.reject(error) }) diff --git a/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts b/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts index cc35fb490..27af53e22 100644 --- a/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts +++ b/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts @@ -20,6 +20,10 @@ function spyOnLifeCycleEvents(setupApi: SetupApi) { setupApi.events .on('request:start', ({ request, requestId }) => { + if (request.headers.has('upgrade')) { + return + } + requestIdPromise.resolve(requestId) listener(`[request:start] ${request.method} ${request.url} ${requestId}`) }) @@ -32,6 +36,10 @@ function spyOnLifeCycleEvents(setupApi: SetupApi) { ) }) .on('request:end', ({ request, requestId }) => { + if (request.headers.has('upgrade')) { + return + } + listener(`[request:end] ${request.method} ${request.url} ${requestId}`) }) @@ -44,6 +52,10 @@ function spyOnLifeCycleEvents(setupApi: SetupApi) { ) }) .on('response:bypass', async ({ response, request, requestId }) => { + if (request.headers.has('upgrade')) { + return + } + listener( `[response:bypass] ${request.method} ${request.url} ${requestId} ${ response.status diff --git a/test/node/msw-api/setup-remote-server/use.app.js b/test/node/msw-api/setup-remote-server/use.app.js index a0820e9a3..ca7187b7e 100644 --- a/test/node/msw-api/setup-remote-server/use.app.js +++ b/test/node/msw-api/setup-remote-server/use.app.js @@ -11,7 +11,6 @@ const server = setupServer( ) server.listen({ - // Start MSW in the remote mode. remote: { enabled: true, }, diff --git a/test/node/msw-api/setup-remote-server/use.node.test.ts b/test/node/msw-api/setup-remote-server/use.node.test.ts index f7c73fafa..60b2c155e 100644 --- a/test/node/msw-api/setup-remote-server/use.node.test.ts +++ b/test/node/msw-api/setup-remote-server/use.node.test.ts @@ -29,7 +29,7 @@ it('returns a mocked response defined in the app by default', async () => { expect(json).toEqual([1, 2, 3]) }) -it.only('returns a mocked response from the matching runtime request handler', async () => { +it('returns a mocked response from the matching runtime request handler', async () => { remote.use( http.get('https://example.com/resource', () => { return HttpResponse.json({ mocked: true }) From 0b2e2c05d811286b19c9a189846880670449b5da Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 4 Dec 2024 15:54:03 +0100 Subject: [PATCH 184/210] test(wip): add `remote.boundary` tests --- src/core/utils/handleRequest.ts | 4 - .../remote-boundary.test.ts | 55 +++++++++++++ .../msw-api/setup-remote-server/use.app.js | 5 +- .../node/msw-api/setup-remote-server/utils.ts | 80 ++++++++++++++++++- 4 files changed, 137 insertions(+), 7 deletions(-) create mode 100644 test/node/msw-api/setup-remote-server/remote-boundary.test.ts diff --git a/src/core/utils/handleRequest.ts b/src/core/utils/handleRequest.ts index 8b2aa58ee..e35ddb1f5 100644 --- a/src/core/utils/handleRequest.ts +++ b/src/core/utils/handleRequest.ts @@ -50,12 +50,8 @@ export async function handleRequest( ): Promise { emitter.emit('request:start', { request, requestId }) - console.log('[handleRequest]', request.method, request.url) - // Perform bypassed requests (i.e. wrapped in "bypass()") as-is. if (shouldBypassRequest(request)) { - console.log('REQUEST IS PASSTHROUGH!') - emitter.emit('request:end', { request, requestId }) handleRequestOptions?.onPassthroughResponse?.(request) return diff --git a/test/node/msw-api/setup-remote-server/remote-boundary.test.ts b/test/node/msw-api/setup-remote-server/remote-boundary.test.ts new file mode 100644 index 000000000..e766e6cbc --- /dev/null +++ b/test/node/msw-api/setup-remote-server/remote-boundary.test.ts @@ -0,0 +1,55 @@ +// @vitest-environment node +import { HttpResponse, http } from 'msw' +import { setupRemoteServer } from 'msw/node' +import { spawnTestApp } from './utils' + +const remote = setupRemoteServer() + +beforeAll(async () => { + await remote.listen() +}) + +afterEach(() => { + remote.resetHandlers() +}) + +afterAll(async () => { + await remote.close() +}) + +it.sequential( + 'uses initial handlers if the boundary has no overrides', + remote.boundary(async () => { + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) + + const response = await fetch(new URL('/resource', testApp.url)) + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + + const json = await response.json() + expect(json).toEqual([1, 2, 3]) + }), +) + +it.sequential.only( + 'uses runtime request handlers declared in the boundary', + remote.boundary(async () => { + remote.use( + http.get('https://example.com/resource', () => { + return HttpResponse.json({ mocked: true }) + }), + ) + + await using testApp = await spawnTestApp(require.resolve('./use.app.js'), { + // Provide the remote boundary's id to bind the app's runtime to this test. + contextId: remote.contextId, + }) + + const response = await fetch(new URL('/resource', testApp.url)) + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + + const json = await response.json() + expect(json).toEqual({ mocked: true }) + }), +) diff --git a/test/node/msw-api/setup-remote-server/use.app.js b/test/node/msw-api/setup-remote-server/use.app.js index ca7187b7e..995dd8eca 100644 --- a/test/node/msw-api/setup-remote-server/use.app.js +++ b/test/node/msw-api/setup-remote-server/use.app.js @@ -13,6 +13,9 @@ const server = setupServer( server.listen({ remote: { enabled: true, + // If provided, use explicit context id to bound this + // runtime to a particular `remote.boundary()` in tests. + contextId: process.env.MSW_REMOTE_CONTEXT_ID, }, }) @@ -48,7 +51,7 @@ app.use('/proxy', async (req, res) => { } }) -const httpServer = app.listen(() => { +const httpServer = app.listen(0, () => { if (!process.send) { throw new Error( 'Failed to start a test Node.js app: not spawned as a child process of the test', diff --git a/test/node/msw-api/setup-remote-server/utils.ts b/test/node/msw-api/setup-remote-server/utils.ts index 04be42573..5dbfff61d 100644 --- a/test/node/msw-api/setup-remote-server/utils.ts +++ b/test/node/msw-api/setup-remote-server/utils.ts @@ -2,15 +2,87 @@ import { invariant } from 'outvariant' import { ChildProcess, spawn } from 'child_process' import { DeferredPromise } from '@open-draft/deferred-promise' +export async function spawnTestApp( + appSourcePath: string, + options?: { contextId: string }, +) { + let url: string | undefined + const spawnPromise = new DeferredPromise() + + const io = spawn('node', [appSourcePath], { + // Establish an IPC between the test and the test app. + // This IPC is not required for the remote interception to work. + // This IPC is required for the test app to be spawned at a random port + // and be able to communicate the port back to the test. + stdio: ['pipe', 'pipe', 'pipe', 'ipc'], + env: { + ...process.env, + MSW_REMOTE_CONTEXT_ID: options?.contextId, + }, + }) + + io.stdout?.on('data', (data) => console.log(data.toString())) + io.stderr?.on('data', (data) => console.error(data.toString())) + + io.on('message', (message) => { + try { + const url = new URL(message.toString()) + spawnPromise.resolve(url) + } catch (error) { + return + } + }) + .on('error', (error) => spawnPromise.reject(error)) + .on('exit', (code) => { + if (code !== 0) { + spawnPromise.reject( + new Error(`Failed to spawn a test Node app (exit code: ${code})`), + ) + } + }) + + return { + get url() { + invariant( + url, + 'Failed to return the URL for the test Node app: the app is not running. Did you forget to call ".spawn()"?', + ) + + return url + }, + + async [Symbol.asyncDispose]() { + const closePromise = new DeferredPromise() + + io.send('SIGTERM', (error) => { + if (error) { + closePromise.reject(error) + } else { + closePromise.resolve() + } + }) + + await closePromise + }, + } +} + +// +// +// + export class TestNodeApp { private io: ChildProcess = null as any private _url: URL | null = null - constructor(private readonly appSourcePath: string) {} + constructor( + private readonly appSourcePath: string, + private readonly options?: { contextId: string }, + ) {} get url() { invariant( - this._url, + _url, 'Failed to return the URL for the test Node app: the app is not running. Did you forget to call ".spawn()"?', ) @@ -26,6 +98,10 @@ export class TestNodeApp { // This IPC is required for the test app to be spawned at a random port // and be able to communicate the port back to the test. stdio: ['pipe', 'pipe', 'pipe', 'ipc'], + env: { + ...process.env, + MSW_REMOTE_CONTEXT_ID: this.options?.contextId, + }, }) this.io.stdout?.on('data', (c) => console.log(c.toString())) From 2eba1adc140f9e6a5c5384afc880ca8b44467b3b Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 5 Dec 2024 15:43:33 +0100 Subject: [PATCH 185/210] feat: support boundary and `contextId` --- src/core/handlers/RemoteRequestHandler.ts | 8 +- src/node/SetupServerApi.ts | 8 +- src/node/setupRemoteServer.ts | 130 +++++++++++++----- .../remote-boundary.test.ts | 6 +- .../node/msw-api/setup-remote-server/utils.ts | 21 ++- 5 files changed, 129 insertions(+), 44 deletions(-) diff --git a/src/core/handlers/RemoteRequestHandler.ts b/src/core/handlers/RemoteRequestHandler.ts index 049aab1fc..c0603f72e 100644 --- a/src/core/handlers/RemoteRequestHandler.ts +++ b/src/core/handlers/RemoteRequestHandler.ts @@ -27,8 +27,12 @@ export class RemoteRequestHandler extends RequestHandler< RemoteRequestHandlerResolverExtras > { private socket: Socket + private contextId?: string - constructor(args: { socket: Socket }) { + constructor(args: { + socket: Socket + contextId?: string + }) { super({ info: { header: 'RemoteRequestHandler', @@ -37,6 +41,7 @@ export class RemoteRequestHandler extends RequestHandler< }) this.socket = args.socket + this.contextId = args.contextId } async parse(args: { @@ -58,6 +63,7 @@ export class RemoteRequestHandler extends RequestHandler< this.socket.emit('request', { requestId: createRequestId(), serializedRequest: await serializeRequest(args.request), + contextId: this.contextId, }) /** diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 33b057aa9..ba7fc3da0 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -145,7 +145,13 @@ export class SetupServerApi { apply: (target, thisArg, args) => { return Array.prototype.concat( - new RemoteRequestHandler({ socket }), + new RemoteRequestHandler({ + socket, + /** + * @todo Get the context ID from the environment automagically. + */ + contextId: this.resolvedOptions.remote?.contextId, + }), Reflect.apply(target, thisArg, args), ) }, diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index d402bf10a..6330e196e 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -28,13 +28,19 @@ import { } from '~/core/utils/internal/emitterUtils' import { AsyncHandlersController } from './SetupServerApi' +/** + * @todo Make the remote port random. + * Consider getting it from the environment variable. + */ export const MSW_REMOTE_SERVER_PORT = 56957 -const handlersStorage = new AsyncLocalStorage<{ +interface RemoteServerBoundaryContext { contextId: string initialHandlers: Array handlers: Array -}>() +} + +const handlersStorage = new AsyncLocalStorage() const kSyncServer = Symbol('kSyncServer') type SyncServerType = WebSocketServer | undefined @@ -71,6 +77,7 @@ export interface SyncServerEventsMap { request: (args: { serializedRequest: SerializedRequest requestId: string + contextId?: string }) => Promise | void response: (args: { @@ -87,6 +94,8 @@ export class SetupRemoteServerApi extends SetupApi implements SetupRemoteServer { + protected executionContexts: Map RemoteServerBoundaryContext> + constructor(handlers: Array) { super(...handlers) @@ -94,6 +103,8 @@ export class SetupRemoteServerApi storage: handlersStorage, initialHandlers: handlers, }) + + this.executionContexts = new Map() } get contextId(): string { @@ -129,29 +140,57 @@ export class SetupRemoteServerApi .once('SIGINT', () => closeSyncServer(server)) server.on('connection', async (socket) => { - socket.on('request', async ({ requestId, serializedRequest }) => { - const request = deserializeRequest(serializedRequest) - const handlers = this.handlersController - .currentHandlers() - .filter(isHandlerKind('RequestHandler')) - - const response = await handleRequest( - request, - requestId, - handlers, - /** - * @todo Support resolve options from the `.listen()` call. - */ - { onUnhandledRequest() {} }, - dummyEmitter, - ) - - socket.emit('response', { - serializedResponse: response - ? await serializeResponse(response) - : undefined, - }) - }) + socket.on( + 'request', + async ({ requestId, serializedRequest, contextId }) => { + const request = deserializeRequest(serializedRequest) + + // By default, get the handlers from the current context. + let allHandlers = this.handlersController.currentHandlers() + + // If the request event has a context associated with it, + // look up the current state of that context to get the handlers. + if (contextId) { + invariant( + this.executionContexts.has(contextId), + 'Failed to handle a remote request "%s %s": no context found by id "%s"', + request.method, + request.url, + contextId, + ) + + const getContext = this.executionContexts.get(contextId) + + invariant( + getContext != null, + 'Failed to handle a remote request "%s %s": the context by id "%s" is empty', + request.method, + request.url, + contextId, + ) + + const context = getContext() + allHandlers = context.handlers + } + + const response = await handleRequest( + request, + requestId, + allHandlers.filter(isHandlerKind('RequestHandler')), + /** + * @todo Support resolve options from the `.listen()` call. + */ + { onUnhandledRequest() {} }, + dummyEmitter, + ) + + socket.emit('response', { + serializedResponse: response + ? await serializeResponse(response) + : undefined, + }) + }, + ) socket.on('lifeCycleEventForward', async (type, args) => { const deserializedArgs = await deserializeEventPayload(args) @@ -166,19 +205,19 @@ export class SetupRemoteServerApi const contextId = createRequestId() return (...args: Args): R => { - return handlersStorage.run( - { - contextId, - initialHandlers: this.handlersController.currentHandlers(), - handlers: [], - }, - callback, - ...args, - ) + const context: RemoteServerBoundaryContext = { + contextId, + initialHandlers: this.handlersController.currentHandlers(), + handlers: [], + } + + this.executionContexts.set(contextId, () => context) + return handlersStorage.run(context, callback, ...args) } } public async close(): Promise { + this.executionContexts.clear() handlersStorage.disable() const syncServer = Reflect.get(globalThis, kSyncServer) as SyncServerType @@ -216,6 +255,10 @@ async function createSyncServer( const ws = new WebSocketServer(httpServer, { transports: ['websocket'], cors: { + /** + * @todo Set the default `origin` to localhost for security reasons. + * Allow overridding the default origin through the `setupRemoteServer` API. + */ origin: '*', methods: ['HEAD', 'GET', 'POST'], }, @@ -238,6 +281,21 @@ async function createSyncServer( } async function closeSyncServer(server: WebSocketServer): Promise { + const httpServer = Reflect.get(server, 'httpServer') as + | http.Server + | undefined + + /** + * @note `socket.io` automatically closes the server if no clients + * have responded to the ping request. Check if the underlying HTTP + * server is still running before trying to close the WebSocket server. + * Unfortunately, there's no means to check if the server is running + * on the WebSocket server instance. + */ + if (!httpServer?.listening) { + return Promise.resolve() + } + const serverClosePromise = new DeferredPromise() server.close((error) => { @@ -247,7 +305,7 @@ async function closeSyncServer(server: WebSocketServer): Promise { serverClosePromise.resolve() }) - return serverClosePromise.then(() => { + await serverClosePromise.then(() => { Reflect.deleteProperty(globalThis, kSyncServer) }) } @@ -270,7 +328,7 @@ export async function createSyncClient(args: { port: number }) { // Keep a low timeout and no retry logic because // the user is expected to enable remote interception // before the actual application with "setupServer". - timeout: 1000, + timeout: 500, reconnection: true, extraHeaders: { // Bypass the internal WebSocket connection requests diff --git a/test/node/msw-api/setup-remote-server/remote-boundary.test.ts b/test/node/msw-api/setup-remote-server/remote-boundary.test.ts index e766e6cbc..1f093372b 100644 --- a/test/node/msw-api/setup-remote-server/remote-boundary.test.ts +++ b/test/node/msw-api/setup-remote-server/remote-boundary.test.ts @@ -17,7 +17,7 @@ afterAll(async () => { await remote.close() }) -it.sequential( +it.concurrent( 'uses initial handlers if the boundary has no overrides', remote.boundary(async () => { await using testApp = await spawnTestApp(require.resolve('./use.app.js')) @@ -31,7 +31,7 @@ it.sequential( }), ) -it.sequential.only( +it.concurrent.only( 'uses runtime request handlers declared in the boundary', remote.boundary(async () => { remote.use( @@ -41,7 +41,7 @@ it.sequential.only( ) await using testApp = await spawnTestApp(require.resolve('./use.app.js'), { - // Provide the remote boundary's id to bind the app's runtime to this test. + // Bind the application to this test's context. contextId: remote.contextId, }) diff --git a/test/node/msw-api/setup-remote-server/utils.ts b/test/node/msw-api/setup-remote-server/utils.ts index 5dbfff61d..93fe015a7 100644 --- a/test/node/msw-api/setup-remote-server/utils.ts +++ b/test/node/msw-api/setup-remote-server/utils.ts @@ -7,7 +7,9 @@ export async function spawnTestApp( options?: { contextId: string }, ) { let url: string | undefined - const spawnPromise = new DeferredPromise() + const spawnPromise = new DeferredPromise().then((resolvedUrl) => { + url = resolvedUrl + }) const io = spawn('node', [appSourcePath], { // Establish an IPC between the test and the test app. @@ -27,7 +29,7 @@ export async function spawnTestApp( io.on('message', (message) => { try { const url = new URL(message.toString()) - spawnPromise.resolve(url) + spawnPromise.resolve(url.href) } catch (error) { return } @@ -41,6 +43,15 @@ export async function spawnTestApp( } }) + await Promise.race([ + spawnPromise, + new Promise((_, reject) => { + setTimeout(() => { + reject(new Error('Failed to spawn a test Node app within timeout')) + }, 5000) + }), + ]) + return { get url() { invariant( @@ -52,6 +63,10 @@ export async function spawnTestApp( }, async [Symbol.asyncDispose]() { + if (io.exitCode !== null) { + return Promise.resolve() + } + const closePromise = new DeferredPromise() io.send('SIGTERM', (error) => { @@ -82,7 +97,7 @@ export class TestNodeApp { get url() { invariant( - _url, + this._url, 'Failed to return the URL for the test Node app: the app is not running. Did you forget to call ".spawn()"?', ) From 11c466bda2bab549485f835363493bbd2ddd1819 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 5 Dec 2024 19:32:10 +0100 Subject: [PATCH 186/210] chore: adjust tests to headers changes --- .../utils/logging/requestToLoggableObject.test.ts | 12 ++++++------ .../utils/logging/responseToLoggableObject.test.ts | 14 ++++---------- .../setup-remote-server/remote-boundary.test.ts | 2 +- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/src/core/utils/logging/requestToLoggableObject.test.ts b/src/core/utils/logging/requestToLoggableObject.test.ts index 6a6cdbccb..2f0cb610e 100644 --- a/src/core/utils/logging/requestToLoggableObject.test.ts +++ b/src/core/utils/logging/requestToLoggableObject.test.ts @@ -1,8 +1,8 @@ +// @vitest-environment node import { encodeBuffer } from '@mswjs/interceptors' -import { Headers } from 'headers-polyfill' import { requestToLoggableObject } from './requestToLoggableObject' -test('serializes given Request instance into a plain object', async () => { +it('serializes given Request instance into a plain object', async () => { const request = await requestToLoggableObject( new Request(new URL('http://test.mswjs.io/user'), { method: 'POST', @@ -16,9 +16,9 @@ test('serializes given Request instance into a plain object', async () => { expect(request.method).toBe('POST') expect(request.url).toBe('http://test.mswjs.io/user') - expect(request.headers).toEqual({ - 'content-type': 'text/plain', - 'x-header': 'secret', - }) + expect(request.headers).toEqual([ + ['content-type', 'text/plain'], + ['x-header', 'secret'], + ]) expect(request.body).toBe('text-body') }) diff --git a/src/core/utils/logging/responseToLoggableObject.test.ts b/src/core/utils/logging/responseToLoggableObject.test.ts index 15efaa063..3f4bdadd2 100644 --- a/src/core/utils/logging/responseToLoggableObject.test.ts +++ b/src/core/utils/logging/responseToLoggableObject.test.ts @@ -1,6 +1,4 @@ -/** - * @jest-environment node - */ +// @vitest-environment node import { encodeBuffer } from '@mswjs/interceptors' import { responseToLoggableObject } from './responseToLoggableObject' @@ -8,7 +6,7 @@ it('serializes response without body', async () => { const result = await responseToLoggableObject(new Response(null)) expect(result.status).toBe(200) - expect(result.headers).toEqual({}) + expect(result.headers).toEqual([]) expect(result.body).toBe('') }) @@ -25,9 +23,7 @@ it('serializes a plain text response', async () => { expect(result.status).toBe(201) expect(result.statusText).toBe('Created') - expect(result.headers).toEqual({ - 'content-type': 'text/plain', - }) + expect(result.headers).toEqual([['content-type', 'text/plain']]) expect(result.body).toBe('hello world') }) @@ -39,9 +35,7 @@ it('serializes a JSON response', async () => { }) const result = await responseToLoggableObject(response) - expect(result.headers).toEqual({ - 'content-type': 'application/json', - }) + expect(result.headers).toEqual([['content-type', 'application/json']]) expect(result.body).toBe(JSON.stringify({ users: ['John'] })) }) diff --git a/test/node/msw-api/setup-remote-server/remote-boundary.test.ts b/test/node/msw-api/setup-remote-server/remote-boundary.test.ts index 1f093372b..5ce50440b 100644 --- a/test/node/msw-api/setup-remote-server/remote-boundary.test.ts +++ b/test/node/msw-api/setup-remote-server/remote-boundary.test.ts @@ -31,7 +31,7 @@ it.concurrent( }), ) -it.concurrent.only( +it.concurrent( 'uses runtime request handlers declared in the boundary', remote.boundary(async () => { remote.use( From 7ad582c18b104b492d341cc9e0e7a11a27387534 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 10 Dec 2024 14:39:44 +0100 Subject: [PATCH 187/210] chore(wip): wip --- src/core/handlers/RemoteRequestHandler.ts | 8 ++++++++ src/node/SetupServerApi.ts | 25 +++++++++++++++++------ src/node/glossary.ts | 1 - src/node/index.ts | 1 + src/node/remoteContext.ts | 16 +++++++++++++++ src/node/setupRemoteServer.ts | 11 +++++----- 6 files changed, 50 insertions(+), 12 deletions(-) create mode 100644 src/node/remoteContext.ts diff --git a/src/core/handlers/RemoteRequestHandler.ts b/src/core/handlers/RemoteRequestHandler.ts index c0603f72e..59cfb738b 100644 --- a/src/core/handlers/RemoteRequestHandler.ts +++ b/src/core/handlers/RemoteRequestHandler.ts @@ -51,6 +51,14 @@ export class RemoteRequestHandler extends RequestHandler< const parsedResult = await super.parse(args) const responsePromise = new DeferredPromise() + // eslint-disable-next-line no-console + console.log( + '[RemoteRequestHandler] REQUEST!', + args.request.method, + args.request.url, + this.contextId, + ) + /** * @note Remote request handler is special. * It cannot await the mocked response from the remote process in diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index ba7fc3da0..a728fb2ce 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -1,5 +1,6 @@ import { AsyncLocalStorage } from 'node:async_hooks' import { invariant } from 'outvariant' +import { Socket } from 'socket.io-client' import { ClientRequestInterceptor } from '@mswjs/interceptors/ClientRequest' import { XMLHttpRequestInterceptor } from '@mswjs/interceptors/XMLHttpRequest' import { FetchInterceptor } from '@mswjs/interceptors/fetch' @@ -8,7 +9,6 @@ import type { RequestHandler } from '~/core/handlers/RequestHandler' import type { ListenOptions, SetupServer } from './glossary' import type { WebSocketHandler } from '~/core/handlers/WebSocketHandler' import { SetupServerCommonApi } from './SetupServerCommonApi' -import { Socket } from 'socket.io-client' import { MSW_REMOTE_SERVER_PORT, SyncServerEventsMap, @@ -20,6 +20,7 @@ import { serializeEventPayload, } from '~/core/utils/internal/emitterUtils' import { shouldBypassRequest } from '~/core/utils/internal/requestUtils' +import { remoteContext } from './remoteContext' const handlersStorage = new AsyncLocalStorage() @@ -120,6 +121,11 @@ export class SetupServerApi // run it in a special "remote" mode. That mode ensures that // an extraneous Node.js process can affect this process' traffic. if (this.resolvedOptions.remote?.enabled) { + console.log( + 'MSW REMOTE MODE OK! context:', + process.env[remoteContext.variableName], + ) + const remotePort = typeof this.resolvedOptions.remote === 'object' ? this.resolvedOptions.remote.port || MSW_REMOTE_SERVER_PORT @@ -144,13 +150,14 @@ export class SetupServerApi this.handlersController.currentHandlers, { apply: (target, thisArg, args) => { + console.log('.currentHandlers()...') + return Array.prototype.concat( new RemoteRequestHandler({ socket, - /** - * @todo Get the context ID from the environment automagically. - */ - contextId: this.resolvedOptions.remote?.contextId, + // Get the remote boundary context ID from the environment. + // This way, the user doesn't have to explicitly drill it here. + contextId: process.env[remoteContext.variableName], }), Reflect.apply(target, thisArg, args), ) @@ -171,7 +178,13 @@ export class SetupServerApi // Before the first request gets handled, await the sync server connection. // This way we ensure that all the requests go through the `RemoteRequestHandler`. - await this.socketPromise + await Promise.race([ + this.socketPromise, + // Don't let the requests hang for long if the socket promise fails to resolve. + new Promise((resolve) => { + setTimeout(resolve, 1000) + }), + ]) } // Forward all life-cycle events from this process to the remote. diff --git a/src/node/glossary.ts b/src/node/glossary.ts index 39d932821..283e0e140 100644 --- a/src/node/glossary.ts +++ b/src/node/glossary.ts @@ -18,7 +18,6 @@ export interface ListenOptions extends SharedOptions { */ remote?: { enabled: boolean - contextId?: string /** * Custom port number to synchronize this `setupServer` with diff --git a/src/node/index.ts b/src/node/index.ts index 4d3c4b481..6d4046822 100644 --- a/src/node/index.ts +++ b/src/node/index.ts @@ -6,3 +6,4 @@ export { SetupRemoteServerApi, setupRemoteServer, } from './setupRemoteServer' +export { remoteContext } from './remoteContext' diff --git a/src/node/remoteContext.ts b/src/node/remoteContext.ts new file mode 100644 index 000000000..0dbfc3f54 --- /dev/null +++ b/src/node/remoteContext.ts @@ -0,0 +1,16 @@ +import { invariant } from 'outvariant' +import { remoteHandlersContext } from './setupRemoteServer' + +export const remoteContext = { + variableName: 'MSW_REMOTE_CONTEXT_ID', + getContextId() { + const store = remoteHandlersContext.getStore() + + invariant( + store != null, + 'Failed to call ".getContextId()" on remote context: no context found. Did you call this outside of the `remote.boundary()` scope?', + ) + + return store.contextId + }, +} diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index 6330e196e..88ba97fab 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -40,7 +40,8 @@ interface RemoteServerBoundaryContext { handlers: Array } -const handlersStorage = new AsyncLocalStorage() +export const remoteHandlersContext = + new AsyncLocalStorage() const kSyncServer = Symbol('kSyncServer') type SyncServerType = WebSocketServer | undefined @@ -100,7 +101,7 @@ export class SetupRemoteServerApi super(...handlers) this.handlersController = new AsyncHandlersController({ - storage: handlersStorage, + storage: remoteHandlersContext, initialHandlers: handlers, }) @@ -108,7 +109,7 @@ export class SetupRemoteServerApi } get contextId(): string { - const context = handlersStorage.getStore() + const context = remoteHandlersContext.getStore() invariant( context != null, @@ -212,13 +213,13 @@ export class SetupRemoteServerApi } this.executionContexts.set(contextId, () => context) - return handlersStorage.run(context, callback, ...args) + return remoteHandlersContext.run(context, callback, ...args) } } public async close(): Promise { this.executionContexts.clear() - handlersStorage.disable() + remoteHandlersContext.disable() const syncServer = Reflect.get(globalThis, kSyncServer) as SyncServerType From 57ab6784ee428693b5a1923168058321bb440d85 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 12 Dec 2024 16:04:07 +0100 Subject: [PATCH 188/210] fix(setupServer): skip forwarding internal websocket events --- src/node/SetupServerApi.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index a728fb2ce..9cba30537 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -192,18 +192,23 @@ export class SetupServerApi } } - private forwardLifeCycleEvents() { - onAnyEvent(this.emitter, async (type, listenerArgs) => { - const socket = await this.socketPromise + private async forwardLifeCycleEvents() { + const socket = await this.socketPromise + // Forward life-cycle events after the socket connection has been open. + // All outgoing requests are blocked by the connection promise so race + // conditions are impossible here. + onAnyEvent(this.emitter, async (type, listenerArgs) => { if (socket && !shouldBypassRequest(listenerArgs.request)) { + const payload = (await serializeEventPayload(listenerArgs)) as any + socket.emit( 'lifeCycleEventForward', /** * @todo Annotating serialized/desirialized mirror channels is tough. */ type, - (await serializeEventPayload(listenerArgs)) as any, + payload, ) } }) From c069b25cc23522b2a5dce63a0bcf2cdf44dbdc91 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 12 Dec 2024 16:04:31 +0100 Subject: [PATCH 189/210] fix(RemoteRequestHandler): handle socket disconnects --- src/core/handlers/RemoteRequestHandler.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/core/handlers/RemoteRequestHandler.ts b/src/core/handlers/RemoteRequestHandler.ts index 59cfb738b..1a7985f44 100644 --- a/src/core/handlers/RemoteRequestHandler.ts +++ b/src/core/handlers/RemoteRequestHandler.ts @@ -59,6 +59,24 @@ export class RemoteRequestHandler extends RequestHandler< this.contextId, ) + // If the socket is disconnected, or gets disconnected, + // skip this remote handler and continue with the request locally. + if (this.socket.disconnected) { + console.log( + '[RemoteRequestHandler] socket already disconnected, skipping...', + ) + + return { + ...parsedResult, + response: undefined, + } + } + + this.socket.once('disconnect', () => { + console.log('[RemoteRequestHandler] socket disconnected, skipping...') + responsePromise.resolve(undefined) + }) + /** * @note Remote request handler is special. * It cannot await the mocked response from the remote process in From c2d5c13d9971fa87bc6c734afb4c9b7acdcbb4b7 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 12 Dec 2024 16:05:02 +0100 Subject: [PATCH 190/210] fix(serializeUtils): preserve empty request/response bodies --- src/core/utils/request/serializeUtils.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/utils/request/serializeUtils.ts b/src/core/utils/request/serializeUtils.ts index e92e7f934..7e85913f9 100644 --- a/src/core/utils/request/serializeUtils.ts +++ b/src/core/utils/request/serializeUtils.ts @@ -69,7 +69,8 @@ export function deserializeRequest(serialized: SerializedRequest): Request { export async function serializeResponse( response: Response, ): Promise { - const responseBody = await response.clone().arrayBuffer() + const responseBody = + response.body === null ? undefined : await response.clone().arrayBuffer() return { __serializedType: 'response', From 657d7b1343b1d78cf9fad6e3a61bdfb10fa4f7c3 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 13 Dec 2024 19:51:40 +0100 Subject: [PATCH 191/210] chore: last days of websocket server --- package.json | 4 +- pnpm-lock.yaml | 32 +++++------- src/core/handlers/RemoteRequestHandler.ts | 51 +++++++++++++----- src/core/utils/request/serializeUtils.ts | 4 +- src/node/SetupServerApi.ts | 8 +-- src/node/setupRemoteServer.ts | 64 +++++++++++++++++------ 6 files changed, 108 insertions(+), 55 deletions(-) diff --git a/package.json b/package.json index 3e53dd596..fe2ab47f6 100644 --- a/package.json +++ b/package.json @@ -154,8 +154,8 @@ "is-node-process": "^1.2.0", "outvariant": "^1.4.3", "path-to-regexp": "^6.3.0", - "socket.io": "^4.6.1", - "socket.io-client": "^4.6.1", + "socket.io": "^4.8.1", + "socket.io-client": "^4.8.1", "strict-event-emitter": "^0.5.1", "type-fest": "^4.26.1", "yargs": "^17.7.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 61ba89b29..cfde86100 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -54,10 +54,10 @@ importers: specifier: ^6.3.0 version: 6.3.0 socket.io: - specifier: ^4.6.1 - version: 4.7.5 + specifier: ^4.8.1 + version: 4.8.1 socket.io-client: - specifier: ^4.6.1 + specifier: ^4.8.1 version: 4.8.1 strict-event-emitter: specifier: ^0.5.1 @@ -2133,10 +2133,6 @@ packages: resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} engines: {node: '>=6.6.0'} - cookie@0.4.2: - resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} - engines: {node: '>= 0.6'} - cookie@0.6.0: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} @@ -2429,8 +2425,8 @@ packages: resolution: {integrity: sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==} engines: {node: '>=10.0.0'} - engine.io@6.5.4: - resolution: {integrity: sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==} + engine.io@6.6.2: + resolution: {integrity: sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==} engines: {node: '>=10.2.0'} enhanced-resolve@5.17.1: @@ -4370,8 +4366,8 @@ packages: resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} engines: {node: '>=10.0.0'} - socket.io@4.7.5: - resolution: {integrity: sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==} + socket.io@4.8.1: + resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==} engines: {node: '>=10.2.0'} sonic-boom@2.8.0: @@ -5970,7 +5966,7 @@ snapshots: cors: 2.8.5 express: 4.19.2 outvariant: 1.4.3 - socket.io: 4.7.5 + socket.io: 4.8.1 transitivePeerDependencies: - bufferutil - supports-color @@ -7199,8 +7195,6 @@ snapshots: cookie-signature@1.2.2: {} - cookie@0.4.2: {} - cookie@0.6.0: {} cookie@0.7.1: {} @@ -7460,18 +7454,18 @@ snapshots: engine.io-parser@5.2.2: {} - engine.io@6.5.4: + engine.io@6.6.2: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.17 '@types/node': 18.19.28 accepts: 1.3.8 base64id: 2.0.0 - cookie: 0.4.2 + cookie: 0.7.2 cors: 2.8.5 debug: 4.3.7 engine.io-parser: 5.2.2 - ws: 8.11.0 + ws: 8.17.1 transitivePeerDependencies: - bufferutil - supports-color @@ -9718,13 +9712,13 @@ snapshots: transitivePeerDependencies: - supports-color - socket.io@4.7.5: + socket.io@4.8.1: dependencies: accepts: 1.3.8 base64id: 2.0.0 cors: 2.8.5 debug: 4.3.7 - engine.io: 6.5.4 + engine.io: 6.6.2 socket.io-adapter: 2.5.4 socket.io-parser: 4.2.4 transitivePeerDependencies: diff --git a/src/core/handlers/RemoteRequestHandler.ts b/src/core/handlers/RemoteRequestHandler.ts index 1a7985f44..fdc92df60 100644 --- a/src/core/handlers/RemoteRequestHandler.ts +++ b/src/core/handlers/RemoteRequestHandler.ts @@ -40,6 +40,10 @@ export class RemoteRequestHandler extends RequestHandler< resolver() {}, }) + console.log('[RemoteRequestHandler] constructor', { + contextId: args.contextId, + }) + this.socket = args.socket this.contextId = args.contextId } @@ -77,6 +81,21 @@ export class RemoteRequestHandler extends RequestHandler< responsePromise.resolve(undefined) }) + console.log( + '[RemoteRequestHandler] sending request to remote...', + new Date(), + ) + + // this.socket.send(JSON.stringify({ a: { b: { c: 1 } } })) + // this.socket.emit( + // 'foo', + // JSON.stringify({ + // requestId: createRequestId(), + // contextId: this.contextId, + // serializeRequest: await serializeRequest(args.request), + // }), + // ) + /** * @note Remote request handler is special. * It cannot await the mocked response from the remote process in @@ -86,23 +105,31 @@ export class RemoteRequestHandler extends RequestHandler< * Instead, the remote handler await the mocked response during the * parsing phase since that's the only async phase before predicate. */ - this.socket.emit('request', { - requestId: createRequestId(), - serializedRequest: await serializeRequest(args.request), - contextId: this.contextId, - }) + debugger + this.socket.emit( + 'request', + { + requestId: createRequestId(), + serializedRequest: await serializeRequest(args.request), + contextId: this.contextId, + }, + (serializedResponse) => { + // Wait for the remote server to acknowledge this request with + // a response before continuing with the request handling. + responsePromise.resolve( + serializedResponse + ? deserializeResponse(serializedResponse) + : undefined, + ) + }, + ) /** * @todo Handle timeouts. * @todo Handle socket errors. */ - this.socket.on('response', ({ serializedResponse }) => { - responsePromise.resolve( - serializedResponse - ? deserializeResponse(serializedResponse) - : undefined, - ) - }) + + console.log('[RemoteRequestHandler] waiting for response from remote...') return { ...parsedResult, diff --git a/src/core/utils/request/serializeUtils.ts b/src/core/utils/request/serializeUtils.ts index 7e85913f9..abf3f6275 100644 --- a/src/core/utils/request/serializeUtils.ts +++ b/src/core/utils/request/serializeUtils.ts @@ -6,7 +6,7 @@ export interface SerializedRequest { method: string url: string headers: Array<[string, string]> - body?: ArrayBuffer + body: ArrayBuffer | undefined } export interface SerializedResponse { @@ -14,7 +14,7 @@ export interface SerializedResponse { status: number statusText?: string headers: Array<[string, string]> - body?: ArrayBuffer + body: ArrayBuffer | undefined } /** diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 9cba30537..f61b3cad4 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -150,8 +150,6 @@ export class SetupServerApi this.handlersController.currentHandlers, { apply: (target, thisArg, args) => { - console.log('.currentHandlers()...') - return Array.prototype.concat( new RemoteRequestHandler({ socket, @@ -176,6 +174,8 @@ export class SetupServerApi return } + console.log('[setupSever] beforeRequest', request.method, request.url) + // Before the first request gets handled, await the sync server connection. // This way we ensure that all the requests go through the `RemoteRequestHandler`. await Promise.race([ @@ -185,10 +185,12 @@ export class SetupServerApi setTimeout(resolve, 1000) }), ]) + + console.log('[setupServer] beforeRequest COMPLETE!') } // Forward all life-cycle events from this process to the remote. - this.forwardLifeCycleEvents() + // this.forwardLifeCycleEvents() } } diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index 88ba97fab..3a5beb086 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -75,15 +75,16 @@ export interface SetupRemoteServer { } export interface SyncServerEventsMap { - request: (args: { - serializedRequest: SerializedRequest - requestId: string - contextId?: string - }) => Promise | void + request: ( + args: { + serializedRequest: SerializedRequest + requestId: string + contextId?: string + }, + callback: (serializedResponse: SerializedResponse | undefined) => void, + ) => void - response: (args: { - serializedResponse?: SerializedResponse - }) => Promise | void + foo: (data: string) => void lifeCycleEventForward: ( type: Type, @@ -140,12 +141,38 @@ export class SetupRemoteServerApi .once('SIGTERM', () => closeSyncServer(server)) .once('SIGINT', () => closeSyncServer(server)) + server.on('close', () => console.log('SERVER CLOSE')) + server.on('error', () => console.log('SERVER ERROR')) + server.on('connection', async (socket) => { + console.log('[setupRemoteServer] ws client connected!') + + socket.on('error', (error) => { + console.log('[setupRemoteServer] ws client ERROR!', error) + }) + + socket.addListener('message', (data) => console.log('ANY DATA:', data)) + + console.log('ADD REQUEST LISTENER', new Date()) + + socket.on('foo', (data) => { + console.log('FOO RECEIVED!', data) + }) + socket.on( 'request', - async ({ requestId, serializedRequest, contextId }) => { + async ({ contextId, requestId, serializedRequest }, callback) => { + console.log('[setupRemoteServer] REQUEST event') + const request = deserializeRequest(serializedRequest) + console.log( + '[setupRemoteServer] REQUEST', + request.method, + request.url, + { contextId }, + ) + // By default, get the handlers from the current context. let allHandlers = this.handlersController.currentHandlers() @@ -173,11 +200,12 @@ export class SetupRemoteServerApi const context = getContext() allHandlers = context.handlers } + const handlers = allHandlers.filter(isHandlerKind('RequestHandler')) const response = await handleRequest( request, requestId, - allHandlers.filter(isHandlerKind('RequestHandler')), + handlers, /** * @todo Support resolve options from the `.listen()` call. */ @@ -185,11 +213,9 @@ export class SetupRemoteServerApi dummyEmitter, ) - socket.emit('response', { - serializedResponse: response - ? await serializeResponse(response) - : undefined, - }) + console.log({ handlers, response }) + + callback(response ? await serializeResponse(response) : undefined) }, ) @@ -255,6 +281,7 @@ async function createSyncServer( const httpServer = http.createServer() const ws = new WebSocketServer(httpServer, { transports: ['websocket'], + httpCompression: false, cors: { /** * @todo Set the default `origin` to localhost for security reasons. @@ -330,7 +357,7 @@ export async function createSyncClient(args: { port: number }) { // the user is expected to enable remote interception // before the actual application with "setupServer". timeout: 500, - reconnection: true, + reconnection: false, extraHeaders: { // Bypass the internal WebSocket connection requests // to exclude them from the request lookup altogether. @@ -339,11 +366,14 @@ export async function createSyncClient(args: { port: number }) { }, }) - socket.on('connect', () => { + socket.once('connect', () => { + console.log('[setupServer] ws client connected!', new Date()) + connectionPromise.resolve(socket) }) socket.io.once('error', (error) => { + console.log('[setupServer] ws client error!', error) connectionPromise.reject(error) }) From 5264ec4a4a6dd2f80e6586be4f38e0cce0e70f71 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 13 Dec 2024 21:30:30 +0100 Subject: [PATCH 192/210] feat: use http for remote request handling --- package.json | 2 - pnpm-lock.yaml | 42 -- src/core/handlers/RemoteRequestHandler.ts | 104 +---- src/core/utils/internal/emitterUtils.ts | 99 ----- .../logging/requestToLoggableObject.test.ts | 24 -- .../utils/logging/requestToLoggableObject.ts | 22 - .../logging/responseToLoggableObject.test.ts | 70 ---- .../utils/logging/responseToLoggableObject.ts | 23 - src/core/utils/request/serializeUtils.ts | 105 ----- src/node/SetupServerApi.ts | 126 +++--- src/node/setupRemoteServer.ts | 395 +++++++++--------- 11 files changed, 274 insertions(+), 738 deletions(-) delete mode 100644 src/core/utils/internal/emitterUtils.ts delete mode 100644 src/core/utils/logging/requestToLoggableObject.test.ts delete mode 100644 src/core/utils/logging/requestToLoggableObject.ts delete mode 100644 src/core/utils/logging/responseToLoggableObject.test.ts delete mode 100644 src/core/utils/logging/responseToLoggableObject.ts delete mode 100644 src/core/utils/request/serializeUtils.ts diff --git a/package.json b/package.json index fe2ab47f6..d0515d8e8 100644 --- a/package.json +++ b/package.json @@ -154,8 +154,6 @@ "is-node-process": "^1.2.0", "outvariant": "^1.4.3", "path-to-regexp": "^6.3.0", - "socket.io": "^4.8.1", - "socket.io-client": "^4.8.1", "strict-event-emitter": "^0.5.1", "type-fest": "^4.26.1", "yargs": "^17.7.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cfde86100..716abcc45 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,12 +53,6 @@ importers: path-to-regexp: specifier: ^6.3.0 version: 6.3.0 - socket.io: - specifier: ^4.8.1 - version: 4.8.1 - socket.io-client: - specifier: ^4.8.1 - version: 4.8.1 strict-event-emitter: specifier: ^0.5.1 version: 0.5.1 @@ -2418,9 +2412,6 @@ packages: end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - engine.io-client@6.6.2: - resolution: {integrity: sha512-TAr+NKeoVTjEVW8P3iHguO1LO6RlUz9O5Y8o7EY0fU+gY1NYqas7NN3slpFtbXEsLMHk0h90fJMfKjRkQ0qUIw==} - engine.io-parser@5.2.2: resolution: {integrity: sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==} engines: {node: '>=10.0.0'} @@ -4358,10 +4349,6 @@ packages: socket.io-adapter@2.5.4: resolution: {integrity: sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg==} - socket.io-client@4.8.1: - resolution: {integrity: sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==} - engines: {node: '>=10.0.0'} - socket.io-parser@4.2.4: resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} engines: {node: '>=10.0.0'} @@ -5113,10 +5100,6 @@ packages: xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - xmlhttprequest-ssl@2.1.2: - resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==} - engines: {node: '>=0.4.0'} - xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -7440,18 +7423,6 @@ snapshots: dependencies: once: 1.4.0 - engine.io-client@6.6.2: - dependencies: - '@socket.io/component-emitter': 3.1.0 - debug: 4.3.7 - engine.io-parser: 5.2.2 - ws: 8.17.1 - xmlhttprequest-ssl: 2.1.2 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - engine.io-parser@5.2.2: {} engine.io@6.6.2: @@ -9694,17 +9665,6 @@ snapshots: - supports-color - utf-8-validate - socket.io-client@4.8.1: - dependencies: - '@socket.io/component-emitter': 3.1.0 - debug: 4.3.7 - engine.io-client: 6.6.2 - socket.io-parser: 4.2.4 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - socket.io-parser@4.2.4: dependencies: '@socket.io/component-emitter': 3.1.0 @@ -10470,8 +10430,6 @@ snapshots: xmlchars@2.2.0: {} - xmlhttprequest-ssl@2.1.2: {} - xtend@4.0.2: {} y18n@5.0.8: {} diff --git a/src/core/handlers/RemoteRequestHandler.ts b/src/core/handlers/RemoteRequestHandler.ts index fdc92df60..c25d06ce8 100644 --- a/src/core/handlers/RemoteRequestHandler.ts +++ b/src/core/handlers/RemoteRequestHandler.ts @@ -1,17 +1,11 @@ -import type { Socket } from 'socket.io-client' import { createRequestId } from '@mswjs/interceptors' -import { DeferredPromise } from '@open-draft/deferred-promise' -import type { SyncServerEventsMap } from '../../node/setupRemoteServer' -import { - serializeRequest, - deserializeResponse, -} from '../utils/request/serializeUtils' import type { ResponseResolutionContext } from '../utils/executeHandlers' import { RequestHandler, type ResponseResolver, type RequestHandlerDefaultInfo, } from './RequestHandler' +import { RemoteClient } from 'node/setupRemoteServer' interface RemoteRequestHandlerParsedResult { response: Response | undefined @@ -26,13 +20,15 @@ export class RemoteRequestHandler extends RequestHandler< RemoteRequestHandlerParsedResult, RemoteRequestHandlerResolverExtras > { - private socket: Socket - private contextId?: string - - constructor(args: { - socket: Socket - contextId?: string - }) { + protected remoteClient: RemoteClient + protected contextId?: string + + constructor( + readonly args: { + remoteClient: RemoteClient + contextId?: string + }, + ) { super({ info: { header: 'RemoteRequestHandler', @@ -40,11 +36,7 @@ export class RemoteRequestHandler extends RequestHandler< resolver() {}, }) - console.log('[RemoteRequestHandler] constructor', { - contextId: args.contextId, - }) - - this.socket = args.socket + this.remoteClient = args.remoteClient this.contextId = args.contextId } @@ -53,49 +45,19 @@ export class RemoteRequestHandler extends RequestHandler< resolutionContext?: ResponseResolutionContext }): Promise { const parsedResult = await super.parse(args) - const responsePromise = new DeferredPromise() // eslint-disable-next-line no-console console.log( '[RemoteRequestHandler] REQUEST!', args.request.method, args.request.url, - this.contextId, + this.args.contextId, ) - // If the socket is disconnected, or gets disconnected, - // skip this remote handler and continue with the request locally. - if (this.socket.disconnected) { - console.log( - '[RemoteRequestHandler] socket already disconnected, skipping...', - ) - - return { - ...parsedResult, - response: undefined, - } + if (!this.remoteClient.connected) { + return parsedResult } - this.socket.once('disconnect', () => { - console.log('[RemoteRequestHandler] socket disconnected, skipping...') - responsePromise.resolve(undefined) - }) - - console.log( - '[RemoteRequestHandler] sending request to remote...', - new Date(), - ) - - // this.socket.send(JSON.stringify({ a: { b: { c: 1 } } })) - // this.socket.emit( - // 'foo', - // JSON.stringify({ - // requestId: createRequestId(), - // contextId: this.contextId, - // serializeRequest: await serializeRequest(args.request), - // }), - // ) - /** * @note Remote request handler is special. * It cannot await the mocked response from the remote process in @@ -105,38 +67,14 @@ export class RemoteRequestHandler extends RequestHandler< * Instead, the remote handler await the mocked response during the * parsing phase since that's the only async phase before predicate. */ - debugger - this.socket.emit( - 'request', - { - requestId: createRequestId(), - serializedRequest: await serializeRequest(args.request), - contextId: this.contextId, - }, - (serializedResponse) => { - // Wait for the remote server to acknowledge this request with - // a response before continuing with the request handling. - responsePromise.resolve( - serializedResponse - ? deserializeResponse(serializedResponse) - : undefined, - ) - }, - ) - - /** - * @todo Handle timeouts. - * @todo Handle socket errors. - */ - - console.log('[RemoteRequestHandler] waiting for response from remote...') + const response = await this.remoteClient.handleRequest({ + contextId: this.contextId, + requestId: createRequestId(), + request: args.request, + }) - return { - ...parsedResult, - // Set the received mocked response on the parsed result so it - // can be accessed in the predicate and response resolver functions. - response: await responsePromise, - } + parsedResult.response = response + return parsedResult } predicate(args: { diff --git a/src/core/utils/internal/emitterUtils.ts b/src/core/utils/internal/emitterUtils.ts deleted file mode 100644 index 14cfa03fc..000000000 --- a/src/core/utils/internal/emitterUtils.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { type EventMap, type Emitter } from 'strict-event-emitter' -import type { LifeCycleEventsMap } from '../../sharedOptions' -import { - type SerializedRequest, - type SerializedResponse, - deserializeRequest, - deserializeResponse, - isSerializedRequest, - isSerializedResponse, - serializeRequest, - serializeResponse, -} from '../request/serializeUtils' - -export type SerializedLifeCycleEventListenerArgs< - Args extends LifeCycleEventsMap[keyof LifeCycleEventsMap][0], -> = { - [Key in keyof Args]: Args[Key] extends Request - ? SerializedRequest - : Args[Key] extends Response - ? SerializedResponse - : Args[Key] -} - -export type SerializedLifeCycleEventsMap = { - [Type in keyof LifeCycleEventsMap]: [ - SerializedLifeCycleEventListenerArgs, - ] -} - -export type TransformEventsFunction< - FromEvents extends EventMap, - ToEvents extends { [EventName in keyof FromEvents]: unknown }, -> = ( - eventName: EventName, - args: FromEvents[EventName], -) => Promise - -export function onAnyEvent( - emitter: Emitter, - listener: ( - eventName: EventName, - ...args: Events[EventName] - ) => void, -): void { - const rawEmit = emitter.emit - - emitter.emit = function (eventName, ...args) { - listener(eventName, ...args) - return rawEmit.call(this, eventName, ...args) - } -} - -export async function serializeEventPayload< - Args extends LifeCycleEventsMap[keyof LifeCycleEventsMap][0], ->(args: Args): Promise> { - const serializedArgs = {} as SerializedLifeCycleEventListenerArgs - - for (const key in args) { - const value = args[key] - - if (value instanceof Request) { - Reflect.set(serializedArgs, key, await serializeRequest(value)) - continue - } - - if (value instanceof Response) { - Reflect.set(serializedArgs, key, await serializeResponse(value)) - continue - } - - Reflect.set(serializedArgs, key, value) - } - - return serializedArgs -} - -export async function deserializeEventPayload( - serializedArgs: SerializedLifeCycleEventsMap[keyof LifeCycleEventsMap], -): Promise { - const args = {} as LifeCycleEventsMap[keyof LifeCycleEventsMap][0] - - for (const key in serializedArgs) { - const value = serializedArgs[key] - - if (isSerializedRequest(value)) { - Reflect.set(args, key, deserializeRequest(value)) - continue - } - - if (isSerializedResponse(value)) { - Reflect.set(args, key, deserializeResponse(value)) - continue - } - - Reflect.set(args, key, value) - } - - return args -} diff --git a/src/core/utils/logging/requestToLoggableObject.test.ts b/src/core/utils/logging/requestToLoggableObject.test.ts deleted file mode 100644 index 2f0cb610e..000000000 --- a/src/core/utils/logging/requestToLoggableObject.test.ts +++ /dev/null @@ -1,24 +0,0 @@ -// @vitest-environment node -import { encodeBuffer } from '@mswjs/interceptors' -import { requestToLoggableObject } from './requestToLoggableObject' - -it('serializes given Request instance into a plain object', async () => { - const request = await requestToLoggableObject( - new Request(new URL('http://test.mswjs.io/user'), { - method: 'POST', - headers: new Headers({ - 'Content-Type': 'text/plain', - 'X-Header': 'secret', - }), - body: encodeBuffer('text-body'), - }), - ) - - expect(request.method).toBe('POST') - expect(request.url).toBe('http://test.mswjs.io/user') - expect(request.headers).toEqual([ - ['content-type', 'text/plain'], - ['x-header', 'secret'], - ]) - expect(request.body).toBe('text-body') -}) diff --git a/src/core/utils/logging/requestToLoggableObject.ts b/src/core/utils/logging/requestToLoggableObject.ts deleted file mode 100644 index 9a3800d99..000000000 --- a/src/core/utils/logging/requestToLoggableObject.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { SerializedRequest, serializeRequest } from '../request/serializeUtils' - -export interface LoggableRequestObject extends Omit { - body: string -} - -const textDecoder = new TextDecoder() - -/** - * Formats a mocked request for introspection in browser's console. - */ -export async function requestToLoggableObject( - request: Request, -): Promise { - const serializedRequest = await serializeRequest(request) - const requestText = textDecoder.decode(serializedRequest.body) - - return { - ...serializedRequest, - body: requestText, - } -} diff --git a/src/core/utils/logging/responseToLoggableObject.test.ts b/src/core/utils/logging/responseToLoggableObject.test.ts deleted file mode 100644 index 3f4bdadd2..000000000 --- a/src/core/utils/logging/responseToLoggableObject.test.ts +++ /dev/null @@ -1,70 +0,0 @@ -// @vitest-environment node -import { encodeBuffer } from '@mswjs/interceptors' -import { responseToLoggableObject } from './responseToLoggableObject' - -it('serializes response without body', async () => { - const result = await responseToLoggableObject(new Response(null)) - - expect(result.status).toBe(200) - expect(result.headers).toEqual([]) - expect(result.body).toBe('') -}) - -it('serializes a plain text response', async () => { - const result = await responseToLoggableObject( - new Response('hello world', { - status: 201, - statusText: 'Created', - headers: { - 'Content-Type': 'text/plain', - }, - }), - ) - - expect(result.status).toBe(201) - expect(result.statusText).toBe('Created') - expect(result.headers).toEqual([['content-type', 'text/plain']]) - expect(result.body).toBe('hello world') -}) - -it('serializes a JSON response', async () => { - const response = new Response(JSON.stringify({ users: ['John'] }), { - headers: { - 'Content-Type': 'application/json', - }, - }) - const result = await responseToLoggableObject(response) - - expect(result.headers).toEqual([['content-type', 'application/json']]) - expect(result.body).toBe(JSON.stringify({ users: ['John'] })) -}) - -it('serializes a ArrayBuffer response', async () => { - const data = encodeBuffer('hello world') - const response = new Response(data) - const result = await responseToLoggableObject(response) - - expect(result.body).toBe('hello world') -}) - -it('serializes a Blob response', async () => { - const response = new Response(new Blob(['hello world'])) - const result = await responseToLoggableObject(response) - - expect(result.body).toBe('hello world') -}) - -it('serializes a FormData response', async () => { - const data = new FormData() - data.set('firstName', 'Alice') - data.set('age', '32') - const response = new Response(data) - const result = await responseToLoggableObject(response) - - expect(result.body).toContain( - `Content-Disposition: form-data; name="firstName"\r\n\r\nAlice`, - ) - expect(result.body).toContain( - `Content-Disposition: form-data; name="age"\r\n\r\n32`, - ) -}) diff --git a/src/core/utils/logging/responseToLoggableObject.ts b/src/core/utils/logging/responseToLoggableObject.ts deleted file mode 100644 index f864eafa0..000000000 --- a/src/core/utils/logging/responseToLoggableObject.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { - SerializedResponse, - serializeResponse, -} from '../request/serializeUtils' - -export interface LoggableResponseObject - extends Omit { - body: string -} - -const textDecoder = new TextDecoder() - -export async function responseToLoggableObject( - response: Response, -): Promise { - const serializedResponse = await serializeResponse(response) - const responseText = textDecoder.decode(serializedResponse.body) - - return { - ...serializedResponse, - body: responseText, - } -} diff --git a/src/core/utils/request/serializeUtils.ts b/src/core/utils/request/serializeUtils.ts deleted file mode 100644 index abf3f6275..000000000 --- a/src/core/utils/request/serializeUtils.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { FetchResponse } from '@mswjs/interceptors' -import { isObject } from '../internal/isObject' - -export interface SerializedRequest { - __serializedType: 'request' - method: string - url: string - headers: Array<[string, string]> - body: ArrayBuffer | undefined -} - -export interface SerializedResponse { - __serializedType: 'response' - status: number - statusText?: string - headers: Array<[string, string]> - body: ArrayBuffer | undefined -} - -/** - * Serialize a given Fetch API `Request` into its - * plain object representation. Useful if you want - * to send this request over a message channel. - */ -export async function serializeRequest( - request: Request, -): Promise { - const requestBody = ['HEAD', 'GET'].includes(request.method) - ? undefined - : await request.clone().arrayBuffer() - - return { - __serializedType: 'request', - method: request.method, - url: request.url, - headers: Array.from(request.headers), - body: requestBody, - } -} - -export function isSerializedRequest( - value: unknown, -): value is SerializedRequest { - return ( - isObject(value) && - '__serializedType' in value && - value.__serializedType === 'request' - ) -} - -/** - * Create a Fetch API `Request` instance out of the - * given serialized request object. Useful to revive - * serialized requests during a message channel transfer. - */ -export function deserializeRequest(serialized: SerializedRequest): Request { - return new Request(serialized.url, { - method: serialized.method, - headers: serialized.headers, - body: serialized.body, - }) -} - -/** - * Serialize a given Fetch API `Response` into its - * plain object representation. Useful if you want - * to send this response over a message channel. - */ -export async function serializeResponse( - response: Response, -): Promise { - const responseBody = - response.body === null ? undefined : await response.clone().arrayBuffer() - - return { - __serializedType: 'response', - status: response.status, - statusText: response.statusText, - headers: Array.from(response.headers), - body: responseBody, - } -} - -export function isSerializedResponse( - value: unknown, -): value is SerializedResponse { - return ( - isObject(value) && - '__serializedType' in value && - value.__serializedType === 'response' - ) -} - -/** - * Create a Fetch API `Response` instance out of the - * given serialized response object. Useful to revive - * serialized responses during a message channel transfer. - */ -export function deserializeResponse(serialized: SerializedResponse): Response { - return new FetchResponse(serialized.body, { - status: serialized.status, - statusText: serialized.statusText, - headers: serialized.headers, - }) -} diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index f61b3cad4..951e80384 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -1,6 +1,5 @@ import { AsyncLocalStorage } from 'node:async_hooks' import { invariant } from 'outvariant' -import { Socket } from 'socket.io-client' import { ClientRequestInterceptor } from '@mswjs/interceptors/ClientRequest' import { XMLHttpRequestInterceptor } from '@mswjs/interceptors/XMLHttpRequest' import { FetchInterceptor } from '@mswjs/interceptors/fetch' @@ -9,16 +8,8 @@ import type { RequestHandler } from '~/core/handlers/RequestHandler' import type { ListenOptions, SetupServer } from './glossary' import type { WebSocketHandler } from '~/core/handlers/WebSocketHandler' import { SetupServerCommonApi } from './SetupServerCommonApi' -import { - MSW_REMOTE_SERVER_PORT, - SyncServerEventsMap, - createSyncClient, -} from './setupRemoteServer' +import { MSW_REMOTE_SERVER_PORT, RemoteClient } from './setupRemoteServer' import { RemoteRequestHandler } from '~/core/handlers/RemoteRequestHandler' -import { - onAnyEvent, - serializeEventPayload, -} from '~/core/utils/internal/emitterUtils' import { shouldBypassRequest } from '~/core/utils/internal/requestUtils' import { remoteContext } from './remoteContext' @@ -80,8 +71,6 @@ export class SetupServerApi extends SetupServerCommonApi implements SetupServer { - private socketPromise?: Promise> - constructor(handlers: Array) { super( [ClientRequestInterceptor, XMLHttpRequestInterceptor, FetchInterceptor], @@ -137,82 +126,67 @@ export class SetupServerApi remotePort, ) - // Create the WebSocket sync client immediately when starting the interception. - this.socketPromise = createSyncClient({ + const remoteClient = new RemoteClient({ port: remotePort, }) - // Once the sync server connection is established, prepend the - // remote request handler to be the first for this process. - // This way, the remote process' handlers take priority. - this.socketPromise.then((socket) => { - this.handlersController.currentHandlers = new Proxy( - this.handlersController.currentHandlers, - { - apply: (target, thisArg, args) => { - return Array.prototype.concat( - new RemoteRequestHandler({ - socket, - // Get the remote boundary context ID from the environment. - // This way, the user doesn't have to explicitly drill it here. - contextId: process.env[remoteContext.variableName], - }), - Reflect.apply(target, thisArg, args), - ) - }, - }, - ) - - return socket - }) - this.beforeRequest = async ({ request }) => { - /** - * @todo This technically shouldn't trigger but it does. - */ - if (request.url.includes('/socket.io/')) { + if (shouldBypassRequest(request)) { return } - console.log('[setupSever] beforeRequest', request.method, request.url) - - // Before the first request gets handled, await the sync server connection. - // This way we ensure that all the requests go through the `RemoteRequestHandler`. - await Promise.race([ - this.socketPromise, - // Don't let the requests hang for long if the socket promise fails to resolve. - new Promise((resolve) => { - setTimeout(resolve, 1000) - }), - ]) - - console.log('[setupServer] beforeRequest COMPLETE!') + console.log('BEFORE REQUEST', request.method) + + // Once the sync server connection is established, prepend the + // remote request handler to be the first for this process. + // This way, the remote process' handlers take priority. + await remoteClient.connect().then(() => { + console.log('[SetupServerApi] connected to remote!') + + this.handlersController.currentHandlers = new Proxy( + this.handlersController.currentHandlers, + { + apply: (target, thisArg, args) => { + return Array.prototype.concat( + new RemoteRequestHandler({ + remoteClient, + // Get the remote boundary context ID from the environment. + // This way, the user doesn't have to explicitly drill it here. + contextId: process.env[remoteContext.variableName], + }), + Reflect.apply(target, thisArg, args), + ) + }, + }, + ) + }) } // Forward all life-cycle events from this process to the remote. + /** @todo */ // this.forwardLifeCycleEvents() } } - private async forwardLifeCycleEvents() { - const socket = await this.socketPromise - - // Forward life-cycle events after the socket connection has been open. - // All outgoing requests are blocked by the connection promise so race - // conditions are impossible here. - onAnyEvent(this.emitter, async (type, listenerArgs) => { - if (socket && !shouldBypassRequest(listenerArgs.request)) { - const payload = (await serializeEventPayload(listenerArgs)) as any - - socket.emit( - 'lifeCycleEventForward', - /** - * @todo Annotating serialized/desirialized mirror channels is tough. - */ - type, - payload, - ) - } - }) - } + // private async forwardLifeCycleEvents() { + // const socket = await this.socketPromise + + // // Forward life-cycle events after the socket connection has been open. + // // All outgoing requests are blocked by the connection promise so race + // // conditions are impossible here. + // onAnyEvent(this.emitter, async (type, listenerArgs) => { + // if (socket && !shouldBypassRequest(listenerArgs.request)) { + // const payload = (await serializeEventPayload(listenerArgs)) as any + + // socket.emit( + // 'lifeCycleEventForward', + // /** + // * @todo Annotating serialized/desirialized mirror channels is tough. + // */ + // type, + // payload, + // ) + // } + // }) + // } } diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index 3a5beb086..291955b9e 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -1,31 +1,21 @@ import * as http from 'node:http' +import { Readable } from 'node:stream' import { AsyncLocalStorage } from 'node:async_hooks' import { invariant } from 'outvariant' -import { Server as WebSocketServer } from 'socket.io' -import { Socket, io } from 'socket.io-client' import { Emitter } from 'strict-event-emitter' import { createRequestId } from '@mswjs/interceptors' import { DeferredPromise } from '@open-draft/deferred-promise' import { SetupApi } from '~/core/SetupApi' +import { delay } from '~/core/delay' import type { RequestHandler } from '~/core/handlers/RequestHandler' import type { WebSocketHandler } from '~/core/handlers/WebSocketHandler' import { handleRequest } from '~/core/utils/handleRequest' import { isHandlerKind } from '~/core/utils/internal/isHandlerKind' -import { - type SerializedRequest, - type SerializedResponse, - deserializeRequest, - serializeResponse, -} from '~/core/utils/request/serializeUtils' import type { LifeCycleEventEmitter, LifeCycleEventsMap, } from '~/core/sharedOptions' import { devUtils } from '~/core/utils/internal/devUtils' -import { - type SerializedLifeCycleEventsMap, - deserializeEventPayload, -} from '~/core/utils/internal/emitterUtils' import { AsyncHandlersController } from './SetupServerApi' /** @@ -43,8 +33,7 @@ interface RemoteServerBoundaryContext { export const remoteHandlersContext = new AsyncLocalStorage() -const kSyncServer = Symbol('kSyncServer') -type SyncServerType = WebSocketServer | undefined +const kRemoteServer = Symbol('kRemoteServer') /** * Enables API mocking in a remote Node.js process. @@ -66,30 +55,15 @@ export interface SetupRemoteServerListenOptions { export interface SetupRemoteServer { events: LifeCycleEventEmitter + get contextId(): string + listen: (options: SetupRemoteServerListenOptions) => Promise + boundary: , R>( callback: (...args: Args) => R, ) => (...args: Args) => R - get contextId(): string - close: () => Promise -} -export interface SyncServerEventsMap { - request: ( - args: { - serializedRequest: SerializedRequest - requestId: string - contextId?: string - }, - callback: (serializedResponse: SerializedResponse | undefined) => void, - ) => void - - foo: (data: string) => void - - lifeCycleEventForward: ( - type: Type, - args: SerializedLifeCycleEventsMap[Type], - ) => void + close: () => Promise } export class SetupRemoteServerApi @@ -123,107 +97,103 @@ export class SetupRemoteServerApi public async listen( options: SetupRemoteServerListenOptions = {}, ): Promise { - const port = options.port || MSW_REMOTE_SERVER_PORT + const resolvedPort = options.port || MSW_REMOTE_SERVER_PORT invariant( - typeof port === 'number', + typeof resolvedPort === 'number', 'Failed to initialize remote server: expected the "port" option to be a valid port number but got "%s". Make sure it is the same port number you provide as the "remotePort" option to "server.listen()" in your application.', - port, + resolvedPort, ) const dummyEmitter = new Emitter() - const wssUrl = createWebSocketServerUrl(port) - const server = await createSyncServer(wssUrl) - - server.removeAllListeners() + const server = await createSyncServer(resolvedPort) process .once('SIGTERM', () => closeSyncServer(server)) .once('SIGINT', () => closeSyncServer(server)) - server.on('close', () => console.log('SERVER CLOSE')) - server.on('error', () => console.log('SERVER ERROR')) + server.on('request', async (incoming, outgoing) => { + // Handle the handshake request from the client. + if (incoming.method === 'HEAD') { + outgoing.writeHead(200).end() + return + } - server.on('connection', async (socket) => { - console.log('[setupRemoteServer] ws client connected!') + const requestId = incoming.headers['x-msw-request-id'] + const requestUrl = incoming.headers['x-msw-request-url'] + const contextId = incoming.headers['x-msw-context-id'] - socket.on('error', (error) => { - console.log('[setupRemoteServer] ws client ERROR!', error) - }) + if (typeof requestId !== 'string') { + outgoing.writeHead(400) + outgoing.end('Expected the "x-msw-request-id" header to be a string') + return + } - socket.addListener('message', (data) => console.log('ANY DATA:', data)) + if (typeof requestUrl !== 'string') { + outgoing.writeHead(400) + outgoing.end('Expected the "x-msw-request-url" header to be a string') + return + } - console.log('ADD REQUEST LISTENER', new Date()) + // Validate remote context id. + if (contextId != null && typeof contextId !== 'string') { + outgoing.writeHead(400) + outgoing.end( + `Expected the "contextId" value to be a string but got ${typeof contextId}`, + ) + return + } - socket.on('foo', (data) => { - console.log('FOO RECEIVED!', data) + const request = new Request(requestUrl, { + method: incoming.method, + body: + incoming.method !== 'HEAD' && incoming.method !== 'GET' + ? (Readable.toWeb(incoming) as ReadableStream) + : null, }) - socket.on( - 'request', - async ({ contextId, requestId, serializedRequest }, callback) => { - console.log('[setupRemoteServer] REQUEST event') - - const request = deserializeRequest(serializedRequest) - - console.log( - '[setupRemoteServer] REQUEST', - request.method, - request.url, - { contextId }, - ) - - // By default, get the handlers from the current context. - let allHandlers = this.handlersController.currentHandlers() - - // If the request event has a context associated with it, - // look up the current state of that context to get the handlers. - if (contextId) { - invariant( - this.executionContexts.has(contextId), - 'Failed to handle a remote request "%s %s": no context found by id "%s"', - request.method, - request.url, - contextId, - ) + for (const headerName in incoming.headersDistinct) { + const headerValue = incoming.headersDistinct[headerName] + if (headerValue) { + headerValue.forEach((value) => { + request.headers.append(headerName, value) + }) + } + } - const getContext = this.executionContexts.get(contextId) + const handlers = this.resolveHandlers({ contextId }).filter( + /** @todo Eventually allow all handler types */ + isHandlerKind('RequestHandler'), + ) + const response = await handleRequest( + request, + requestId, + handlers, + /** @todo Support listen options */ + { onUnhandledRequest() {} }, + dummyEmitter, + ) - invariant( - getContext != null, - 'Failed to handle a remote request "%s %s": the context by id "%s" is empty', - request.method, - request.url, - contextId, - ) + if (response) { + outgoing.writeHead( + response.status, + response.statusText, + Array.from(response.headers), + ) - const context = getContext() - allHandlers = context.handlers - } - const handlers = allHandlers.filter(isHandlerKind('RequestHandler')) - - const response = await handleRequest( - request, - requestId, - handlers, - /** - * @todo Support resolve options from the `.listen()` call. - */ - { onUnhandledRequest() {} }, - dummyEmitter, - ) - - console.log({ handlers, response }) - - callback(response ? await serializeResponse(response) : undefined) - }, - ) + if (response.body) { + Readable.fromWeb(response.body as any).pipe(outgoing) + } else { + outgoing.end() + } - socket.on('lifeCycleEventForward', async (type, args) => { - const deserializedArgs = await deserializeEventPayload(args) - this.emitter.emit(type, deserializedArgs as any) - }) + return + } + + outgoing.writeHead(404).end() }) + + /** @todo Decide on life-cycle events forwarding */ } public boundary, R>( @@ -247,7 +217,7 @@ export class SetupRemoteServerApi this.executionContexts.clear() remoteHandlersContext.disable() - const syncServer = Reflect.get(globalThis, kSyncServer) as SyncServerType + const syncServer = Reflect.get(globalThis, kRemoteServer) invariant( syncServer, @@ -258,15 +228,44 @@ export class SetupRemoteServerApi await closeSyncServer(syncServer) } + + private resolveHandlers(args: { + contextId: string | undefined + }): Array { + const defaultHandlers = this.handlersController.currentHandlers() + + // Request that are not bound to a remote context id + // cannot be affected by the handlers from that context. + // Return the list of current process handlers instead. + if (!args.contextId) { + return defaultHandlers + } + + invariant( + this.executionContexts.has(args.contextId), + 'Failed to handle a remote request: no context found by id "%s"', + args.contextId, + ) + + // If the request event has a context associated with it, + // look up the current state of that context to get the handlers. + const getContext = this.executionContexts.get(args.contextId) + + invariant( + getContext != null, + 'Failed to handle a remote request: the context by id "%s" is empty', + args.contextId, + ) + + return getContext().handlers + } } /** - * Creates an internal WebSocket sync server. + * Creates an internal HTTP server. */ -async function createSyncServer( - url: URL, -): Promise> { - const syncServer = Reflect.get(globalThis, kSyncServer) as SyncServerType +async function createSyncServer(port: number): Promise { + const syncServer = Reflect.get(globalThis, kRemoteServer) // Reuse the existing WebSocket server reference if it exists. // It persists on the global scope between hot updates. @@ -274,53 +273,27 @@ async function createSyncServer( return syncServer } - const serverReadyPromise = new DeferredPromise< - WebSocketServer - >() - - const httpServer = http.createServer() - const ws = new WebSocketServer(httpServer, { - transports: ['websocket'], - httpCompression: false, - cors: { - /** - * @todo Set the default `origin` to localhost for security reasons. - * Allow overridding the default origin through the `setupRemoteServer` API. - */ - origin: '*', - methods: ['HEAD', 'GET', 'POST'], - }, - }) + const serverReadyPromise = new DeferredPromise() + const server = http.createServer() - httpServer.listen(+url.port, url.hostname, () => { - serverReadyPromise.resolve(ws) + server.listen(+port, '127.0.0.1', () => { + serverReadyPromise.resolve(server) }) - httpServer.on('error', (error) => { + server.once('error', (error) => { serverReadyPromise.reject(error) + Reflect.deleteProperty(globalThis, kRemoteServer) }) - return serverReadyPromise.then((ws) => { - Object.defineProperty(globalThis, kSyncServer, { - value: ws, - }) - return ws + Object.defineProperty(globalThis, kRemoteServer, { + value: server, }) -} -async function closeSyncServer(server: WebSocketServer): Promise { - const httpServer = Reflect.get(server, 'httpServer') as - | http.Server - | undefined + return serverReadyPromise +} - /** - * @note `socket.io` automatically closes the server if no clients - * have responded to the ping request. Check if the underlying HTTP - * server is still running before trying to close the WebSocket server. - * Unfortunately, there's no means to check if the server is running - * on the WebSocket server instance. - */ - if (!httpServer?.listening) { +async function closeSyncServer(server: http.Server): Promise { + if (!server.listening) { return Promise.resolve() } @@ -328,54 +301,92 @@ async function closeSyncServer(server: WebSocketServer): Promise { server.close((error) => { if (error) { - return serverClosePromise.reject(error) + serverClosePromise.reject(error) + return } + serverClosePromise.resolve() }) await serverClosePromise.then(() => { - Reflect.deleteProperty(globalThis, kSyncServer) + Reflect.deleteProperty(globalThis, kRemoteServer) }) } -function createWebSocketServerUrl(port: number): URL { - const url = new URL('http://localhost') - url.port = port.toString() - return url -} +export class RemoteClient { + public connected: boolean + private port: number -/** - * Creates a WebSocket client connected to the internal - * WebSocket sync server of MSW. - */ -export async function createSyncClient(args: { port: number }) { - const connectionPromise = new DeferredPromise>() - const url = createWebSocketServerUrl(args.port) - const socket = io(url.href, { - transports: ['websocket'], - // Keep a low timeout and no retry logic because - // the user is expected to enable remote interception - // before the actual application with "setupServer". - timeout: 500, - reconnection: false, - extraHeaders: { - // Bypass the internal WebSocket connection requests - // to exclude them from the request lookup altogether. - // This prevents MSW from treating these requests as unhandled. - accept: 'msw/passthrough', - }, - }) + constructor(readonly args: { port: number }) { + this.connected = false + this.port = args.port + } - socket.once('connect', () => { - console.log('[setupServer] ws client connected!', new Date()) + get url(): string { + return `http://localhost:${this.port}` + } - connectionPromise.resolve(socket) - }) + public async connect(): Promise { + if (this.connected) { + return + } - socket.io.once('error', (error) => { - console.log('[setupServer] ws client error!', error) - connectionPromise.reject(error) - }) + const maxRetries = 5 + let retries = 0 + + console.log('[RemoteClient] connecting to remote server...') + + const tryConnect = (): Promise => { + return fetch(this.url, { + method: 'HEAD', + headers: { + accept: 'msw/passthrough', + }, + }).then( + () => { + this.connected = true + }, + async () => { + if (retries === maxRetries) { + console.log( + '[RemoteClient] failed to connect to remote server after %d retries', + maxRetries, + ) + return + } + + retries++ + await delay(500) + return tryConnect() + }, + ) + } + + return tryConnect() + } + + public async handleRequest(args: { + requestId: string + contextId?: string + request: Request + }): Promise { + const request = args.request.clone() + + console.log('[setupRemoteServer] asking request:', { + contextId: args.contextId, + }) + + request.headers.set('accept', 'msw/passthrough') + request.headers.set('x-msw-request-url', args.request.url) + request.headers.set('x-msw-request-id', args.requestId) + request.headers.set('x-msw-context-id', args.contextId || '') - return connectionPromise + const response = await fetch(this.url, request).catch(() => undefined) + + if (!response || !response.ok) { + return + } + + return response + } } From e6fac6d5eb5e6e5022d1144e16f7bbd7f0c3e321 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 18 Dec 2024 12:26:50 +0100 Subject: [PATCH 193/210] chore: remove `console.log` to fix linting --- src/core/handlers/RemoteRequestHandler.ts | 8 ---- src/node/SetupServerApi.ts | 48 +++++++++++------------ src/node/setupRemoteServer.ts | 18 +++------ 3 files changed, 28 insertions(+), 46 deletions(-) diff --git a/src/core/handlers/RemoteRequestHandler.ts b/src/core/handlers/RemoteRequestHandler.ts index c25d06ce8..6171d1c24 100644 --- a/src/core/handlers/RemoteRequestHandler.ts +++ b/src/core/handlers/RemoteRequestHandler.ts @@ -46,14 +46,6 @@ export class RemoteRequestHandler extends RequestHandler< }): Promise { const parsedResult = await super.parse(args) - // eslint-disable-next-line no-console - console.log( - '[RemoteRequestHandler] REQUEST!', - args.request.method, - args.request.url, - this.args.contextId, - ) - if (!this.remoteClient.connected) { return parsedResult } diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 951e80384..4f93feec2 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -110,11 +110,6 @@ export class SetupServerApi // run it in a special "remote" mode. That mode ensures that // an extraneous Node.js process can affect this process' traffic. if (this.resolvedOptions.remote?.enabled) { - console.log( - 'MSW REMOTE MODE OK! context:', - process.env[remoteContext.variableName], - ) - const remotePort = typeof this.resolvedOptions.remote === 'object' ? this.resolvedOptions.remote.port || MSW_REMOTE_SERVER_PORT @@ -135,31 +130,32 @@ export class SetupServerApi return } - console.log('BEFORE REQUEST', request.method) - // Once the sync server connection is established, prepend the // remote request handler to be the first for this process. // This way, the remote process' handlers take priority. - await remoteClient.connect().then(() => { - console.log('[SetupServerApi] connected to remote!') - - this.handlersController.currentHandlers = new Proxy( - this.handlersController.currentHandlers, - { - apply: (target, thisArg, args) => { - return Array.prototype.concat( - new RemoteRequestHandler({ - remoteClient, - // Get the remote boundary context ID from the environment. - // This way, the user doesn't have to explicitly drill it here. - contextId: process.env[remoteContext.variableName], - }), - Reflect.apply(target, thisArg, args), - ) + await remoteClient.connect().then( + () => { + this.handlersController.currentHandlers = new Proxy( + this.handlersController.currentHandlers, + { + apply: (target, thisArg, args) => { + return Array.prototype.concat( + new RemoteRequestHandler({ + remoteClient, + // Get the remote boundary context ID from the environment. + // This way, the user doesn't have to explicitly drill it here. + contextId: process.env[remoteContext.variableName], + }), + Reflect.apply(target, thisArg, args), + ) + }, }, - }, - ) - }) + ) + }, + // Ignore connection errors. Continue operation as normal. + // The remote server is not required for `setupServer` to work. + () => {}, + ) } // Forward all life-cycle events from this process to the remote. diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index 291955b9e..4d9deba29 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -331,28 +331,26 @@ export class RemoteClient { return } - const maxRetries = 5 + const maxRetries = 4 let retries = 0 - console.log('[RemoteClient] connecting to remote server...') - const tryConnect = (): Promise => { return fetch(this.url, { method: 'HEAD', headers: { accept: 'msw/passthrough', }, + cache: 'no-cache', }).then( - () => { + (response) => { + invariant(response.ok, '') this.connected = true }, async () => { if (retries === maxRetries) { - console.log( - '[RemoteClient] failed to connect to remote server after %d retries', - maxRetries, + throw new Error( + `Failed to connect to remote server after ${maxRetries} retries`, ) - return } retries++ @@ -372,10 +370,6 @@ export class RemoteClient { }): Promise { const request = args.request.clone() - console.log('[setupRemoteServer] asking request:', { - contextId: args.contextId, - }) - request.headers.set('accept', 'msw/passthrough') request.headers.set('x-msw-request-url', args.request.url) request.headers.set('x-msw-request-id', args.requestId) From cfc120c477394d67a06644aac6affcea0d132262 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 18 Dec 2024 13:31:08 +0100 Subject: [PATCH 194/210] fix: use consistent `localhost` for remote server --- src/node/SetupServerApi.ts | 54 +++-- src/node/setupRemoteServer.ts | 6 +- .../remote-boundary.test.ts | 5 +- .../setup-remote-server/response.body.test.ts | 213 ++++++++++-------- .../msw-api/setup-remote-server/use.app.js | 3 - .../node/msw-api/setup-remote-server/utils.ts | 8 +- 6 files changed, 161 insertions(+), 128 deletions(-) diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 4f93feec2..da47621ab 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -125,6 +125,36 @@ export class SetupServerApi port: remotePort, }) + // Kick off connection to the server early. + const remoteConnectionPromise = remoteClient.connect().then( + () => { + this.handlersController.currentHandlers = new Proxy( + this.handlersController.currentHandlers, + { + apply: (target, thisArg, args) => { + return Array.prototype.concat( + new RemoteRequestHandler({ + remoteClient, + // Get the remote boundary context ID from the environment. + // This way, the user doesn't have to explicitly drill it here. + contextId: process.env[remoteContext.variableName], + }), + Reflect.apply(target, thisArg, args), + ) + }, + }, + ) + }, + // Ignore connection errors. Continue operation as normal. + // The remote server is not required for `setupServer` to work. + () => { + // eslint-disable-next-line no-console + console.error( + `Failed to connect to a remote server at port "${remotePort}"`, + ) + }, + ) + this.beforeRequest = async ({ request }) => { if (shouldBypassRequest(request)) { return @@ -133,29 +163,7 @@ export class SetupServerApi // Once the sync server connection is established, prepend the // remote request handler to be the first for this process. // This way, the remote process' handlers take priority. - await remoteClient.connect().then( - () => { - this.handlersController.currentHandlers = new Proxy( - this.handlersController.currentHandlers, - { - apply: (target, thisArg, args) => { - return Array.prototype.concat( - new RemoteRequestHandler({ - remoteClient, - // Get the remote boundary context ID from the environment. - // This way, the user doesn't have to explicitly drill it here. - contextId: process.env[remoteContext.variableName], - }), - Reflect.apply(target, thisArg, args), - ) - }, - }, - ) - }, - // Ignore connection errors. Continue operation as normal. - // The remote server is not required for `setupServer` to work. - () => {}, - ) + await remoteConnectionPromise } // Forward all life-cycle events from this process to the remote. diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index 4d9deba29..c5b5dbf8b 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -113,6 +113,10 @@ export class SetupRemoteServerApi .once('SIGINT', () => closeSyncServer(server)) server.on('request', async (incoming, outgoing) => { + if (!incoming.method) { + return + } + // Handle the handshake request from the client. if (incoming.method === 'HEAD') { outgoing.writeHead(200).end() @@ -276,7 +280,7 @@ async function createSyncServer(port: number): Promise { const serverReadyPromise = new DeferredPromise() const server = http.createServer() - server.listen(+port, '127.0.0.1', () => { + server.listen(port, 'localhost', async () => { serverReadyPromise.resolve(server) }) diff --git a/test/node/msw-api/setup-remote-server/remote-boundary.test.ts b/test/node/msw-api/setup-remote-server/remote-boundary.test.ts index 5ce50440b..618ef05fb 100644 --- a/test/node/msw-api/setup-remote-server/remote-boundary.test.ts +++ b/test/node/msw-api/setup-remote-server/remote-boundary.test.ts @@ -40,10 +40,7 @@ it.concurrent( }), ) - await using testApp = await spawnTestApp(require.resolve('./use.app.js'), { - // Bind the application to this test's context. - contextId: remote.contextId, - }) + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) const response = await fetch(new URL('/resource', testApp.url)) expect(response.status).toBe(200) diff --git a/test/node/msw-api/setup-remote-server/response.body.test.ts b/test/node/msw-api/setup-remote-server/response.body.test.ts index 302a8a8de..36d21b4dc 100644 --- a/test/node/msw-api/setup-remote-server/response.body.test.ts +++ b/test/node/msw-api/setup-remote-server/response.body.test.ts @@ -1,14 +1,12 @@ // @vitest-environment node import { http, HttpResponse } from 'msw' import { setupRemoteServer } from 'msw/node' -import { TestNodeApp } from './utils' +import { spawnTestApp } from './utils' const remote = setupRemoteServer() -const testApp = new TestNodeApp(require.resolve('./use.app.js')) beforeAll(async () => { await remote.listen() - await testApp.start() }) afterEach(() => { @@ -17,94 +15,125 @@ afterEach(() => { afterAll(async () => { await remote.close() - await testApp.close() }) -it('supports responding to a remote request with text', async () => { - remote.use( - http.get('https://example.com/resource', () => { - return HttpResponse.text('hello world') - }), - ) - - const response = await fetch(new URL('/resource', testApp.url)) - expect(response.status).toBe(200) - expect(response.statusText).toBe('OK') - await expect(response.text()).resolves.toBe('hello world') -}) - -it('supports responding to a remote request with JSON', async () => { - remote.use( - http.get('https://example.com/resource', () => { - return HttpResponse.json({ hello: 'world' }) - }), - ) - - const response = await fetch(new URL('/resource', testApp.url)) - expect(response.status).toBe(200) - await expect(response.json()).resolves.toEqual({ hello: 'world' }) -}) - -it('supports responding to a remote request with ArrayBuffer', async () => { - remote.use( - http.get('https://example.com/resource', () => { - return HttpResponse.arrayBuffer(new TextEncoder().encode('hello world')) - }), - ) - - const response = await fetch(new URL('/resource', testApp.url)) - const buffer = await response.arrayBuffer() - - expect(response.status).toBe(200) - expect(new TextDecoder().decode(buffer)).toBe('hello world') -}) - -it('supports responding to a remote request with Blob', async () => { - remote.use( - http.get('https://example.com/resource', () => { - return new Response(new Blob(['hello world'])) - }), - ) - - const response = await fetch(new URL('/resource', testApp.url)) - expect(response.status).toBe(200) - await expect(response.blob()).resolves.toEqual(new Blob(['hello world'])) -}) - -it('supports responding to a remote request with FormData', async () => { - remote.use( - http.get('https://example.com/resource', () => { - const formData = new FormData() - formData.append('hello', 'world') - return HttpResponse.formData(formData) - }), - ) - - const response = await fetch(new URL('/resource', testApp.url)) - expect(response.status).toBe(200) - - await expect(response.text()).resolves.toMatch( - /^------formdata-undici-\d{12}\r\nContent-Disposition: form-data; name="hello"\r\n\r\nworld\r\n------formdata-undici-\d{12}--$/, - ) -}) - -it('supports responding to a remote request with ReadableStream', async () => { - const encoder = new TextEncoder() - remote.use( - http.get('https://example.com/resource', () => { - const stream = new ReadableStream({ - start(controller) { - controller.enqueue(encoder.encode('hello')) - controller.enqueue(encoder.encode(' ')) - controller.enqueue(encoder.encode('world')) - controller.close() - }, - }) - return new Response(stream, { headers: { 'Content-Type': 'text/plain' } }) - }), - ) - - const response = await fetch(new URL('/resource', testApp.url)) - expect(response.status).toBe(200) - await expect(response.text()).resolves.toBe('hello world') -}) +it( + 'supports responding to a remote request with text', + remote.boundary(async () => { + remote.use( + http.get('https://example.com/resource', () => { + return HttpResponse.text('hello world') + }), + ) + + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) + + const response = await fetch(new URL('/resource', testApp.url)) + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + await expect(response.text()).resolves.toBe('hello world') + }), +) + +it( + 'supports responding to a remote request with JSON', + remote.boundary(async () => { + remote.use( + http.get('https://example.com/resource', () => { + return HttpResponse.json({ hello: 'world' }) + }), + ) + + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) + + const response = await fetch(new URL('/resource', testApp.url)) + expect(response.status).toBe(200) + await expect(response.json()).resolves.toEqual({ hello: 'world' }) + }), +) + +it( + 'supports responding to a remote request with ArrayBuffer', + remote.boundary(async () => { + remote.use( + http.get('https://example.com/resource', () => { + return HttpResponse.arrayBuffer(new TextEncoder().encode('hello world')) + }), + ) + + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) + + const response = await fetch(new URL('/resource', testApp.url)) + const buffer = await response.arrayBuffer() + + expect(response.status).toBe(200) + expect(new TextDecoder().decode(buffer)).toBe('hello world') + }), +) + +it( + 'supports responding to a remote request with Blob', + remote.boundary(async () => { + remote.use( + http.get('https://example.com/resource', () => { + return new Response(new Blob(['hello world'])) + }), + ) + + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) + + const response = await fetch(new URL('/resource', testApp.url)) + expect(response.status).toBe(200) + await expect(response.blob()).resolves.toEqual(new Blob(['hello world'])) + }), +) + +it( + 'supports responding to a remote request with FormData', + remote.boundary(async () => { + remote.use( + http.get('https://example.com/resource', () => { + const formData = new FormData() + formData.append('hello', 'world') + return HttpResponse.formData(formData) + }), + ) + + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) + + const response = await fetch(new URL('/resource', testApp.url)) + expect(response.status).toBe(200) + + await expect(response.text()).resolves.toMatch( + /^------formdata-undici-\d{12}\r\nContent-Disposition: form-data; name="hello"\r\n\r\nworld\r\n------formdata-undici-\d{12}--$/, + ) + }), +) + +it( + 'supports responding to a remote request with ReadableStream', + remote.boundary(async () => { + const encoder = new TextEncoder() + remote.use( + http.get('https://example.com/resource', () => { + const stream = new ReadableStream({ + start(controller) { + controller.enqueue(encoder.encode('hello')) + controller.enqueue(encoder.encode(' ')) + controller.enqueue(encoder.encode('world')) + controller.close() + }, + }) + return new Response(stream, { + headers: { 'Content-Type': 'text/plain' }, + }) + }), + ) + + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) + + const response = await fetch(new URL('/resource', testApp.url)) + expect(response.status).toBe(200) + await expect(response.text()).resolves.toBe('hello world') + }), +) diff --git a/test/node/msw-api/setup-remote-server/use.app.js b/test/node/msw-api/setup-remote-server/use.app.js index 995dd8eca..d74266fca 100644 --- a/test/node/msw-api/setup-remote-server/use.app.js +++ b/test/node/msw-api/setup-remote-server/use.app.js @@ -13,9 +13,6 @@ const server = setupServer( server.listen({ remote: { enabled: true, - // If provided, use explicit context id to bound this - // runtime to a particular `remote.boundary()` in tests. - contextId: process.env.MSW_REMOTE_CONTEXT_ID, }, }) diff --git a/test/node/msw-api/setup-remote-server/utils.ts b/test/node/msw-api/setup-remote-server/utils.ts index 93fe015a7..99035e399 100644 --- a/test/node/msw-api/setup-remote-server/utils.ts +++ b/test/node/msw-api/setup-remote-server/utils.ts @@ -1,11 +1,9 @@ import { invariant } from 'outvariant' import { ChildProcess, spawn } from 'child_process' import { DeferredPromise } from '@open-draft/deferred-promise' +import { remoteContext } from 'msw/node' -export async function spawnTestApp( - appSourcePath: string, - options?: { contextId: string }, -) { +export async function spawnTestApp(appSourcePath: string) { let url: string | undefined const spawnPromise = new DeferredPromise().then((resolvedUrl) => { url = resolvedUrl @@ -19,7 +17,7 @@ export async function spawnTestApp( stdio: ['pipe', 'pipe', 'pipe', 'ipc'], env: { ...process.env, - MSW_REMOTE_CONTEXT_ID: options?.contextId, + [remoteContext.variableName]: remoteContext.getContextId(), }, }) From 310a2c0219e220e3651f1abe37b3bf7eef91a5b3 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 18 Dec 2024 23:19:05 +0100 Subject: [PATCH 195/210] feat: use random internal server port --- src/core/handlers/RemoteRequestHandler.ts | 8 +- src/node/SetupServerApi.ts | 31 +-- src/node/glossary.ts | 7 - src/node/index.ts | 2 +- src/node/remoteContext.ts | 66 +++++-- src/node/setupRemoteServer.ts | 97 +++++----- .../life-cycle-events/on.node.test.ts | 177 +++++++++--------- .../setup-remote-server/response.body.test.ts | 4 - .../setup-remote-server/use.node.test.ts | 65 ++++--- .../node/msw-api/setup-remote-server/utils.ts | 4 +- 10 files changed, 243 insertions(+), 218 deletions(-) diff --git a/src/core/handlers/RemoteRequestHandler.ts b/src/core/handlers/RemoteRequestHandler.ts index 6171d1c24..76787a5b0 100644 --- a/src/core/handlers/RemoteRequestHandler.ts +++ b/src/core/handlers/RemoteRequestHandler.ts @@ -21,12 +21,12 @@ export class RemoteRequestHandler extends RequestHandler< RemoteRequestHandlerResolverExtras > { protected remoteClient: RemoteClient - protected contextId?: string + protected boundaryId: string constructor( readonly args: { remoteClient: RemoteClient - contextId?: string + boundaryId: string }, ) { super({ @@ -37,7 +37,7 @@ export class RemoteRequestHandler extends RequestHandler< }) this.remoteClient = args.remoteClient - this.contextId = args.contextId + this.boundaryId = args.boundaryId } async parse(args: { @@ -60,7 +60,7 @@ export class RemoteRequestHandler extends RequestHandler< * parsing phase since that's the only async phase before predicate. */ const response = await this.remoteClient.handleRequest({ - contextId: this.contextId, + boundaryId: this.boundaryId, requestId: createRequestId(), request: args.request, }) diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index da47621ab..bdb77ff69 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -1,5 +1,4 @@ import { AsyncLocalStorage } from 'node:async_hooks' -import { invariant } from 'outvariant' import { ClientRequestInterceptor } from '@mswjs/interceptors/ClientRequest' import { XMLHttpRequestInterceptor } from '@mswjs/interceptors/XMLHttpRequest' import { FetchInterceptor } from '@mswjs/interceptors/fetch' @@ -8,10 +7,10 @@ import type { RequestHandler } from '~/core/handlers/RequestHandler' import type { ListenOptions, SetupServer } from './glossary' import type { WebSocketHandler } from '~/core/handlers/WebSocketHandler' import { SetupServerCommonApi } from './SetupServerCommonApi' -import { MSW_REMOTE_SERVER_PORT, RemoteClient } from './setupRemoteServer' +import { RemoteClient } from './setupRemoteServer' import { RemoteRequestHandler } from '~/core/handlers/RemoteRequestHandler' import { shouldBypassRequest } from '~/core/utils/internal/requestUtils' -import { remoteContext } from './remoteContext' +import { getRemoteContextFromEnvironment } from './remoteContext' const handlersStorage = new AsyncLocalStorage() @@ -110,22 +109,12 @@ export class SetupServerApi // run it in a special "remote" mode. That mode ensures that // an extraneous Node.js process can affect this process' traffic. if (this.resolvedOptions.remote?.enabled) { - const remotePort = - typeof this.resolvedOptions.remote === 'object' - ? this.resolvedOptions.remote.port || MSW_REMOTE_SERVER_PORT - : MSW_REMOTE_SERVER_PORT - - invariant( - typeof remotePort === 'number', - 'Failed to enable request interception: expected the "remotePort" option to be a valid port number, but got "%s". Make sure it is the same port number you provide as the "port" option to "remote.listen()" in your tests.', - remotePort, - ) - - const remoteClient = new RemoteClient({ - port: remotePort, - }) + // Get the remote context from the environment since `server.listen()` + // is called in a different process and cannot be wrapped in `remote.boundary()`. + const remoteContext = getRemoteContextFromEnvironment() + const remoteClient = new RemoteClient(remoteContext.serverUrl) - // Kick off connection to the server early. + // Kick off the connection to the remote server early. const remoteConnectionPromise = remoteClient.connect().then( () => { this.handlersController.currentHandlers = new Proxy( @@ -137,7 +126,7 @@ export class SetupServerApi remoteClient, // Get the remote boundary context ID from the environment. // This way, the user doesn't have to explicitly drill it here. - contextId: process.env[remoteContext.variableName], + boundaryId: remoteContext.boundary.id, }), Reflect.apply(target, thisArg, args), ) @@ -145,12 +134,10 @@ export class SetupServerApi }, ) }, - // Ignore connection errors. Continue operation as normal. - // The remote server is not required for `setupServer` to work. () => { // eslint-disable-next-line no-console console.error( - `Failed to connect to a remote server at port "${remotePort}"`, + `Failed to connect to a remote server at "${remoteContext.serverUrl}"`, ) }, ) diff --git a/src/node/glossary.ts b/src/node/glossary.ts index 283e0e140..46daf4734 100644 --- a/src/node/glossary.ts +++ b/src/node/glossary.ts @@ -18,13 +18,6 @@ export interface ListenOptions extends SharedOptions { */ remote?: { enabled: boolean - - /** - * Custom port number to synchronize this `setupServer` with - * the remote `setupRemoteServer`. - * @default 56957 - */ - port?: number } } diff --git a/src/node/index.ts b/src/node/index.ts index 6d4046822..df0fcff78 100644 --- a/src/node/index.ts +++ b/src/node/index.ts @@ -6,4 +6,4 @@ export { SetupRemoteServerApi, setupRemoteServer, } from './setupRemoteServer' -export { remoteContext } from './remoteContext' +export { getRemoteEnvironment } from './remoteContext' diff --git a/src/node/remoteContext.ts b/src/node/remoteContext.ts index 0dbfc3f54..6a42c4f56 100644 --- a/src/node/remoteContext.ts +++ b/src/node/remoteContext.ts @@ -1,16 +1,58 @@ import { invariant } from 'outvariant' import { remoteHandlersContext } from './setupRemoteServer' -export const remoteContext = { - variableName: 'MSW_REMOTE_CONTEXT_ID', - getContextId() { - const store = remoteHandlersContext.getStore() - - invariant( - store != null, - 'Failed to call ".getContextId()" on remote context: no context found. Did you call this outside of the `remote.boundary()` scope?', - ) - - return store.contextId - }, +export const MSW_REMOTE_SERVER_URL = 'MSW_REMOTE_SERVER_URL' +export const MSW_REMOTE_BOUNDARY_ID = 'MSW_REMOTE_BOUNDARY_ID' + +export interface RemoteContext { + serverUrl: URL + boundary: { + id: string + } +} + +export function getRemoteContext(): RemoteContext { + const store = remoteHandlersContext.getStore() + + invariant( + store, + 'Failed to retrieve remote context: no context found. Did you forget to call this within a `remote.boundary()`?', + ) + + return { + serverUrl: store.serverUrl, + boundary: { + id: store.boundaryId, + }, + } +} + +export function getRemoteContextFromEnvironment(): RemoteContext { + const serverUrl = process.env[MSW_REMOTE_SERVER_URL] + const boundaryId = process.env[MSW_REMOTE_BOUNDARY_ID] + + invariant( + serverUrl, + 'Failed to retrieve the remote context from environment: server URL is missing', + ) + invariant( + boundaryId, + 'Failed to retrieve the remote context from environment: boundary ID is missing', + ) + + return { + serverUrl: new URL(serverUrl), + boundary: { + id: boundaryId, + }, + } +} + +export function getRemoteEnvironment() { + const remoteContext = getRemoteContext() + + return { + [MSW_REMOTE_SERVER_URL]: remoteContext.serverUrl.toString(), + [MSW_REMOTE_BOUNDARY_ID]: remoteContext.boundary.id, + } } diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index c5b5dbf8b..e467c3106 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -18,14 +18,9 @@ import type { import { devUtils } from '~/core/utils/internal/devUtils' import { AsyncHandlersController } from './SetupServerApi' -/** - * @todo Make the remote port random. - * Consider getting it from the environment variable. - */ -export const MSW_REMOTE_SERVER_PORT = 56957 - interface RemoteServerBoundaryContext { - contextId: string + serverUrl: URL + boundaryId: string initialHandlers: Array handlers: Array } @@ -33,6 +28,8 @@ interface RemoteServerBoundaryContext { export const remoteHandlersContext = new AsyncLocalStorage() +const REMOTE_SERVER_HOSTNAME = 'localhost' + const kRemoteServer = Symbol('kRemoteServer') /** @@ -44,20 +41,11 @@ export function setupRemoteServer( return new SetupRemoteServerApi(handlers) } -export interface SetupRemoteServerListenOptions { - /** - * Custom port number to synchronize this this `setupRemoteServer` - * with the regular `setupServer`. - * @default 56957 - */ - port?: number -} - export interface SetupRemoteServer { events: LifeCycleEventEmitter - get contextId(): string + get boundaryId(): string - listen: (options: SetupRemoteServerListenOptions) => Promise + listen: () => Promise boundary: , R>( callback: (...args: Args) => R, @@ -66,10 +54,14 @@ export interface SetupRemoteServer { close: () => Promise } +const kServerUrl = Symbol('kServerUrl') + export class SetupRemoteServerApi extends SetupApi implements SetupRemoteServer { + [kServerUrl]: URL | undefined + protected executionContexts: Map RemoteServerBoundaryContext> constructor(handlers: Array) { @@ -83,30 +75,30 @@ export class SetupRemoteServerApi this.executionContexts = new Map() } - get contextId(): string { - const context = remoteHandlersContext.getStore() - + get serverUrl(): URL { invariant( - context != null, - 'Failed to get "contextId" on "SetupRemoteServerApi": no context found. Did you forget to wrap this closure in `remote.boundary()`?', + this[kServerUrl], + 'Failed to get a remote port in `setupRemoteServer`. Did you forget to `await remote.listen()`?', ) - return context.contextId + return this[kServerUrl] } - public async listen( - options: SetupRemoteServerListenOptions = {}, - ): Promise { - const resolvedPort = options.port || MSW_REMOTE_SERVER_PORT + get boundaryId(): string { + const context = remoteHandlersContext.getStore() invariant( - typeof resolvedPort === 'number', - 'Failed to initialize remote server: expected the "port" option to be a valid port number but got "%s". Make sure it is the same port number you provide as the "remotePort" option to "server.listen()" in your application.', - resolvedPort, + context != null, + 'Failed to get "contextId" on "SetupRemoteServerApi": no context found. Did you forget to wrap this closure in `remote.boundary()`?', ) + return context.boundaryId + } + + public async listen(): Promise { const dummyEmitter = new Emitter() - const server = await createSyncServer(resolvedPort) + const server = await createSyncServer() + this[kServerUrl] = getServerUrl(server) process .once('SIGTERM', () => closeSyncServer(server)) @@ -125,7 +117,7 @@ export class SetupRemoteServerApi const requestId = incoming.headers['x-msw-request-id'] const requestUrl = incoming.headers['x-msw-request-url'] - const contextId = incoming.headers['x-msw-context-id'] + const contextId = incoming.headers['x-msw-boundary-id'] if (typeof requestId !== 'string') { outgoing.writeHead(400) @@ -203,16 +195,17 @@ export class SetupRemoteServerApi public boundary, R>( callback: (...args: Args) => R, ): (...args: Args) => R { - const contextId = createRequestId() + const boundaryId = createRequestId() return (...args: Args): R => { - const context: RemoteServerBoundaryContext = { - contextId, + const context = { + serverUrl: this.serverUrl, + boundaryId, initialHandlers: this.handlersController.currentHandlers(), handlers: [], - } + } satisfies RemoteServerBoundaryContext - this.executionContexts.set(contextId, () => context) + this.executionContexts.set(boundaryId, () => context) return remoteHandlersContext.run(context, callback, ...args) } } @@ -268,7 +261,7 @@ export class SetupRemoteServerApi /** * Creates an internal HTTP server. */ -async function createSyncServer(port: number): Promise { +async function createSyncServer(): Promise { const syncServer = Reflect.get(globalThis, kRemoteServer) // Reuse the existing WebSocket server reference if it exists. @@ -280,7 +273,7 @@ async function createSyncServer(port: number): Promise { const serverReadyPromise = new DeferredPromise() const server = http.createServer() - server.listen(port, 'localhost', async () => { + server.listen(0, REMOTE_SERVER_HOSTNAME, async () => { serverReadyPromise.resolve(server) }) @@ -296,6 +289,18 @@ async function createSyncServer(port: number): Promise { return serverReadyPromise } +function getServerUrl(server: http.Server): URL { + const address = server.address() + + invariant(address, 'Failed to get server URL: server address is not defined') + + if (typeof address === 'string') { + return new URL(address) + } + + return new URL(`http://${REMOTE_SERVER_HOSTNAME}:${address.port}`) +} + async function closeSyncServer(server: http.Server): Promise { if (!server.listening) { return Promise.resolve() @@ -319,15 +324,9 @@ async function closeSyncServer(server: http.Server): Promise { export class RemoteClient { public connected: boolean - private port: number - constructor(readonly args: { port: number }) { + constructor(private readonly url: URL) { this.connected = false - this.port = args.port - } - - get url(): string { - return `http://localhost:${this.port}` } public async connect(): Promise { @@ -369,7 +368,7 @@ export class RemoteClient { public async handleRequest(args: { requestId: string - contextId?: string + boundaryId: string request: Request }): Promise { const request = args.request.clone() @@ -377,7 +376,7 @@ export class RemoteClient { request.headers.set('accept', 'msw/passthrough') request.headers.set('x-msw-request-url', args.request.url) request.headers.set('x-msw-request-id', args.requestId) - request.headers.set('x-msw-context-id', args.contextId || '') + request.headers.set('x-msw-boundary-id', args.boundaryId) const response = await fetch(this.url, request).catch(() => undefined) diff --git a/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts b/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts index 27af53e22..f8b9c1822 100644 --- a/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts +++ b/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts @@ -3,11 +3,10 @@ import { http, HttpResponse, SetupApi, LifeCycleEventsMap } from 'msw' import { setupRemoteServer } from 'msw/node' import { DeferredPromise } from '@open-draft/deferred-promise' import { HttpServer } from '@open-draft/test-server/http' -import { TestNodeApp } from '../utils' +import { spawnTestApp } from '../utils' const remote = setupRemoteServer() -const testApp = new TestNodeApp(require.resolve('../use.app.js')) const httpServer = new HttpServer((app) => { app.get('/greeting', (req, res) => { res.send('hello') @@ -74,94 +73,100 @@ function spyOnLifeCycleEvents(setupApi: SetupApi) { beforeAll(async () => { await remote.listen() await httpServer.listen() - await testApp.start() -}) - -afterEach(() => { - remote.resetHandlers() }) afterAll(async () => { await remote.close() await httpServer.close() - await testApp.close() -}) - -it('emits correct events for the request handled in the test process', async () => { - remote.use( - http.get('https://example.com/resource', () => { - return HttpResponse.json({ mocked: true }) - }), - ) - - const { listener, waitForRequestId } = spyOnLifeCycleEvents(remote) - - const response = await fetch(new URL('/resource', testApp.url)) - const requestId = await waitForRequestId() - - // Must return the mocked response defined in this test. - expect(response.status).toBe(200) - expect(response.statusText).toBe('OK') - expect(await response.json()).toEqual({ mocked: true }) - - // Must pipe all the relevant life-cycle events. - await vi.waitFor(() => { - expect(listener.mock.calls).toEqual([ - [`[request:start] GET https://example.com/resource ${requestId}`], - [`[request:match] GET https://example.com/resource ${requestId}`], - [`[request:end] GET https://example.com/resource ${requestId}`], - [ - `[response:mocked] GET https://example.com/resource ${requestId} 200 {"mocked":true}`, - ], - ]) - }) }) -it('emits correct events for the request handled in the remote process', async () => { - const { listener, waitForRequestId } = spyOnLifeCycleEvents(remote) - - const response = await fetch(new URL('/resource', testApp.url)) - const requestId = await waitForRequestId() - - expect(response.status).toBe(200) - expect(response.statusText).toBe('OK') - expect(await response.json()).toEqual([1, 2, 3]) - - await vi.waitFor(() => { - expect(listener.mock.calls).toEqual([ - [`[request:start] GET https://example.com/resource ${requestId}`], - [`[request:match] GET https://example.com/resource ${requestId}`], - [`[request:end] GET https://example.com/resource ${requestId}`], - [ - `[response:mocked] GET https://example.com/resource ${requestId} 200 [1,2,3]`, - ], - ]) - }) -}) - -it('emits correct events for the request unhandled by either parties', async () => { - const { listener, waitForRequestId } = spyOnLifeCycleEvents(remote) - - const resourceUrl = httpServer.http.url('/greeting') - // Request a special route in the running app that performs a proxy request - // to the resource specified in the "Location" request header. - const response = await fetch(new URL('/proxy', testApp.url), { - headers: { - Location: resourceUrl, - }, - }) - const requestId = await waitForRequestId() - - expect(response.status).toBe(200) - expect(response.statusText).toBe('OK') - expect(await response.text()).toEqual('hello') - - await vi.waitFor(() => { - expect(listener.mock.calls).toEqual([ - [`[request:start] GET ${resourceUrl} ${requestId}`], - [`[request:unhandled] GET ${resourceUrl} ${requestId}`], - [`[request:end] GET ${resourceUrl} ${requestId}`], - [`[response:bypass] GET ${resourceUrl} ${requestId} 200 hello`], - ]) - }) -}) +it( + 'emits correct events for the request handled in the test process', + remote.boundary(async () => { + remote.use( + http.get('https://example.com/resource', () => { + return HttpResponse.json({ mocked: true }) + }), + ) + + await using testApp = await spawnTestApp(require.resolve('../use.app.js')) + const { listener, waitForRequestId } = spyOnLifeCycleEvents(remote) + + const response = await fetch(new URL('/resource', testApp.url)) + const requestId = await waitForRequestId() + + // Must return the mocked response defined in this test. + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + expect(await response.json()).toEqual({ mocked: true }) + + // Must pipe all the relevant life-cycle events. + await vi.waitFor(() => { + expect(listener.mock.calls).toEqual([ + [`[request:start] GET https://example.com/resource ${requestId}`], + [`[request:match] GET https://example.com/resource ${requestId}`], + [`[request:end] GET https://example.com/resource ${requestId}`], + [ + `[response:mocked] GET https://example.com/resource ${requestId} 200 {"mocked":true}`, + ], + ]) + }) + }), +) + +it( + 'emits correct events for the request handled in the remote process', + remote.boundary(async () => { + await using testApp = await spawnTestApp(require.resolve('../use.app.js')) + const { listener, waitForRequestId } = spyOnLifeCycleEvents(remote) + + const response = await fetch(new URL('/resource', testApp.url)) + const requestId = await waitForRequestId() + + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + expect(await response.json()).toEqual([1, 2, 3]) + + await vi.waitFor(() => { + expect(listener.mock.calls).toEqual([ + [`[request:start] GET https://example.com/resource ${requestId}`], + [`[request:match] GET https://example.com/resource ${requestId}`], + [`[request:end] GET https://example.com/resource ${requestId}`], + [ + `[response:mocked] GET https://example.com/resource ${requestId} 200 [1,2,3]`, + ], + ]) + }) + }), +) + +it( + 'emits correct events for the request unhandled by either parties', + remote.boundary(async () => { + await using testApp = await spawnTestApp(require.resolve('../use.app.js')) + const { listener, waitForRequestId } = spyOnLifeCycleEvents(remote) + + const resourceUrl = httpServer.http.url('/greeting') + // Request a special route in the running app that performs a proxy request + // to the resource specified in the "Location" request header. + const response = await fetch(new URL('/proxy', testApp.url), { + headers: { + Location: resourceUrl, + }, + }) + const requestId = await waitForRequestId() + + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + expect(await response.text()).toEqual('hello') + + await vi.waitFor(() => { + expect(listener.mock.calls).toEqual([ + [`[request:start] GET ${resourceUrl} ${requestId}`], + [`[request:unhandled] GET ${resourceUrl} ${requestId}`], + [`[request:end] GET ${resourceUrl} ${requestId}`], + [`[response:bypass] GET ${resourceUrl} ${requestId} 200 hello`], + ]) + }) + }), +) diff --git a/test/node/msw-api/setup-remote-server/response.body.test.ts b/test/node/msw-api/setup-remote-server/response.body.test.ts index 36d21b4dc..59c402ffd 100644 --- a/test/node/msw-api/setup-remote-server/response.body.test.ts +++ b/test/node/msw-api/setup-remote-server/response.body.test.ts @@ -9,10 +9,6 @@ beforeAll(async () => { await remote.listen() }) -afterEach(() => { - remote.resetHandlers() -}) - afterAll(async () => { await remote.close() }) diff --git a/test/node/msw-api/setup-remote-server/use.node.test.ts b/test/node/msw-api/setup-remote-server/use.node.test.ts index 60b2c155e..5559031b2 100644 --- a/test/node/msw-api/setup-remote-server/use.node.test.ts +++ b/test/node/msw-api/setup-remote-server/use.node.test.ts @@ -1,45 +1,48 @@ // @vitest-environment node import { HttpResponse, http } from 'msw' import { setupRemoteServer } from 'msw/node' -import { TestNodeApp } from './utils' +import { spawnTestApp } from './utils' const remote = setupRemoteServer() -const testApp = new TestNodeApp(require.resolve('./use.app.js')) beforeAll(async () => { await remote.listen() - await testApp.start() -}) - -afterEach(() => { - remote.resetHandlers() }) afterAll(async () => { await remote.close() - await testApp.close() -}) - -it('returns a mocked response defined in the app by default', async () => { - const response = await fetch(new URL('/resource', testApp.url)) - expect(response.status).toBe(200) - expect(response.statusText).toBe('OK') - - const json = await response.json() - expect(json).toEqual([1, 2, 3]) }) -it('returns a mocked response from the matching runtime request handler', async () => { - remote.use( - http.get('https://example.com/resource', () => { - return HttpResponse.json({ mocked: true }) - }), - ) - - const response = await fetch(new URL('/resource', testApp.url)) - expect(response.status).toBe(200) - expect(response.statusText).toBe('OK') - - const json = await response.json() - expect(json).toEqual({ mocked: true }) -}) +it( + 'returns a mocked response defined in the app by default', + remote.boundary(async () => { + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) + + const response = await fetch(new URL('/resource', testApp.url)) + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + + const json = await response.json() + expect(json).toEqual([1, 2, 3]) + }), +) + +it( + 'returns a mocked response from the matching runtime request handler', + remote.boundary(async () => { + remote.use( + http.get('https://example.com/resource', () => { + return HttpResponse.json({ mocked: true }) + }), + ) + + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) + + const response = await fetch(new URL('/resource', testApp.url)) + expect(response.status).toBe(200) + expect(response.statusText).toBe('OK') + + const json = await response.json() + expect(json).toEqual({ mocked: true }) + }), +) diff --git a/test/node/msw-api/setup-remote-server/utils.ts b/test/node/msw-api/setup-remote-server/utils.ts index 99035e399..1be18d239 100644 --- a/test/node/msw-api/setup-remote-server/utils.ts +++ b/test/node/msw-api/setup-remote-server/utils.ts @@ -1,7 +1,7 @@ import { invariant } from 'outvariant' import { ChildProcess, spawn } from 'child_process' import { DeferredPromise } from '@open-draft/deferred-promise' -import { remoteContext } from 'msw/node' +import { getRemoteEnvironment } from 'msw/node' export async function spawnTestApp(appSourcePath: string) { let url: string | undefined @@ -17,7 +17,7 @@ export async function spawnTestApp(appSourcePath: string) { stdio: ['pipe', 'pipe', 'pipe', 'ipc'], env: { ...process.env, - [remoteContext.variableName]: remoteContext.getContextId(), + ...getRemoteEnvironment(), }, }) From 28875f9c500f6ac2a5ddaf56ab94a6b63712754f Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 4 Jan 2025 20:24:49 +0100 Subject: [PATCH 196/210] chore: rewrite `RemoteClient` to `node:http` --- package.json | 2 +- pnpm-lock.yaml | 10 +- src/node/SetupServerApi.ts | 64 +++--- src/node/setupRemoteServer.ts | 202 +++++++++++++++--- src/node/setupServer.ts | 1 - .../life-cycle-events/on.node.test.ts | 6 +- 6 files changed, 218 insertions(+), 67 deletions(-) diff --git a/package.json b/package.json index f8e1d296c..2dc5f7568 100644 --- a/package.json +++ b/package.json @@ -144,7 +144,7 @@ "@bundled-es-modules/statuses": "^1.0.1", "@bundled-es-modules/tough-cookie": "^0.1.6", "@inquirer/confirm": "^5.0.0", - "@mswjs/interceptors": "^0.37.3", + "@mswjs/interceptors": "^0.37.5", "@open-draft/deferred-promise": "^2.2.0", "@open-draft/until": "^2.1.0", "@types/cookie": "^0.6.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ed73c6f32..d384927a6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,8 +21,8 @@ importers: specifier: ^5.0.0 version: 5.0.2(@types/node@18.19.28) '@mswjs/interceptors': - specifier: ^0.37.3 - version: 0.37.3 + specifier: ^0.37.5 + version: 0.37.5 '@open-draft/deferred-promise': specifier: ^2.2.0 version: 2.2.0 @@ -999,8 +999,8 @@ packages: resolution: {integrity: sha512-stTxvLdJ2IcGOs76AnvGYAzGvx8JvQPRxC5DW0P5zdAAnhL33noqb5LKdPt3P37BKp9FzBKZHuihQI9oVqwm0g==} engines: {node: '>=16.13'} - '@mswjs/interceptors@0.37.3': - resolution: {integrity: sha512-USvgCL/uOGFtVa6SVyRrC8kIAedzRohxIXN5LISlg5C5vLZCn7dgMFVSNhSF9cuBEFrm/O2spDWEZeMnw4ZXYg==} + '@mswjs/interceptors@0.37.5': + resolution: {integrity: sha512-AAwRb5vXFcY4L+FvZ7LZusDuZ0vEe0Zm8ohn1FM6/X7A3bj4mqmkAcGRWuvC2JwSygNwHAAmMnAI73vPHeqsHA==} engines: {node: '>=18'} '@nodelib/fs.scandir@2.1.5': @@ -5910,7 +5910,7 @@ snapshots: - bufferutil - utf-8-validate - '@mswjs/interceptors@0.37.3': + '@mswjs/interceptors@0.37.5': dependencies: '@open-draft/deferred-promise': 2.2.0 '@open-draft/logger': 0.3.0 diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index bdb77ff69..4ae5af022 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -1,4 +1,5 @@ import { AsyncLocalStorage } from 'node:async_hooks' +import { invariant } from 'outvariant' import { ClientRequestInterceptor } from '@mswjs/interceptors/ClientRequest' import { XMLHttpRequestInterceptor } from '@mswjs/interceptors/XMLHttpRequest' import { FetchInterceptor } from '@mswjs/interceptors/fetch' @@ -11,6 +12,7 @@ import { RemoteClient } from './setupRemoteServer' import { RemoteRequestHandler } from '~/core/handlers/RemoteRequestHandler' import { shouldBypassRequest } from '~/core/utils/internal/requestUtils' import { getRemoteContextFromEnvironment } from './remoteContext' +import { LifeCycleEventsMap } from '~/core/sharedOptions' const handlersStorage = new AsyncLocalStorage() @@ -70,6 +72,8 @@ export class SetupServerApi extends SetupServerCommonApi implements SetupServer { + protected remoteClient?: RemoteClient + constructor(handlers: Array) { super( [ClientRequestInterceptor, XMLHttpRequestInterceptor, FetchInterceptor], @@ -113,10 +117,14 @@ export class SetupServerApi // is called in a different process and cannot be wrapped in `remote.boundary()`. const remoteContext = getRemoteContextFromEnvironment() const remoteClient = new RemoteClient(remoteContext.serverUrl) + this.remoteClient = remoteClient - // Kick off the connection to the remote server early. + // Connect to the remote server early. const remoteConnectionPromise = remoteClient.connect().then( () => { + // Forward the life-cycle events from this process to the remote. + // this.forwardLifeCycleEventsToRemote() + this.handlersController.currentHandlers = new Proxy( this.handlersController.currentHandlers, { @@ -152,32 +160,36 @@ export class SetupServerApi // This way, the remote process' handlers take priority. await remoteConnectionPromise } - - // Forward all life-cycle events from this process to the remote. - /** @todo */ - // this.forwardLifeCycleEvents() } } - // private async forwardLifeCycleEvents() { - // const socket = await this.socketPromise - - // // Forward life-cycle events after the socket connection has been open. - // // All outgoing requests are blocked by the connection promise so race - // // conditions are impossible here. - // onAnyEvent(this.emitter, async (type, listenerArgs) => { - // if (socket && !shouldBypassRequest(listenerArgs.request)) { - // const payload = (await serializeEventPayload(listenerArgs)) as any - - // socket.emit( - // 'lifeCycleEventForward', - // /** - // * @todo Annotating serialized/desirialized mirror channels is tough. - // */ - // type, - // payload, - // ) - // } - // }) - // } + private forwardLifeCycleEventsToRemote() { + const { remoteClient } = this + + invariant( + remoteClient, + 'Failed to initiate life-cycle events forwarding to the remote: remote client not found. This is likely an issue with MSW. Please report it on GitHub.', + ) + + const events: Array = [ + 'request:start', + 'request:match', + 'request:unhandled', + 'request:end', + 'response:bypass', + 'response:mocked', + 'unhandledException', + ] + + for (const event of events) { + this.emitter.on(event, (args) => { + if (!shouldBypassRequest(args.request)) { + // remoteClient.handleLifeCycleEvent({ + // type: event, + // args, + // }) + } + }) + } + } } diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index e467c3106..b379393f2 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -2,8 +2,7 @@ import * as http from 'node:http' import { Readable } from 'node:stream' import { AsyncLocalStorage } from 'node:async_hooks' import { invariant } from 'outvariant' -import { Emitter } from 'strict-event-emitter' -import { createRequestId } from '@mswjs/interceptors' +import { createRequestId, FetchResponse } from '@mswjs/interceptors' import { DeferredPromise } from '@open-draft/deferred-promise' import { SetupApi } from '~/core/SetupApi' import { delay } from '~/core/delay' @@ -34,6 +33,8 @@ const kRemoteServer = Symbol('kRemoteServer') /** * Enables API mocking in a remote Node.js process. + * + * @see {@link https://mswjs.io/docs/api/setup-remote-server `setupRemoteServer()` API reference} */ export function setupRemoteServer( ...handlers: Array @@ -96,7 +97,6 @@ export class SetupRemoteServerApi } public async listen(): Promise { - const dummyEmitter = new Emitter() const server = await createSyncServer() this[kServerUrl] = getServerUrl(server) @@ -115,6 +115,12 @@ export class SetupRemoteServerApi return } + // Handle life-cycle event requests forwarded from `setupServer`. + if (incoming.url === '/life-cycle-events') { + this.handleLifeCycleEventRequest(incoming, outgoing) + return + } + const requestId = incoming.headers['x-msw-request-id'] const requestUrl = incoming.headers['x-msw-request-url'] const contextId = incoming.headers['x-msw-boundary-id'] @@ -167,7 +173,7 @@ export class SetupRemoteServerApi handlers, /** @todo Support listen options */ { onUnhandledRequest() {} }, - dummyEmitter, + this.emitter, ) if (response) { @@ -188,8 +194,6 @@ export class SetupRemoteServerApi outgoing.writeHead(404).end() }) - - /** @todo Decide on life-cycle events forwarding */ } public boundary, R>( @@ -256,6 +260,22 @@ export class SetupRemoteServerApi return getContext().handlers } + + private async handleLifeCycleEventRequest( + _incoming: http.IncomingMessage, + _outgoing: http.ServerResponse & { + req: http.IncomingMessage + }, + ) { + // const stream = Readable.toWeb(incoming) + // const { event, requestId, request, response, error } = await new Request( + // incoming.url, + // { body: stream }, + // ).json() + // /** @todo Finish this. */ + // this.emitter.emit(event, {}) + // outgoing.writeHead(200).end() + } } /** @@ -325,7 +345,14 @@ async function closeSyncServer(server: http.Server): Promise { export class RemoteClient { public connected: boolean + protected agent: http.Agent + constructor(private readonly url: URL) { + this.agent = new http.Agent({ + // Reuse the same socket between requests so we can communicate + // request's life-cycle events via HTTP more efficiently. + keepAlive: true, + }) this.connected = false } @@ -338,27 +365,48 @@ export class RemoteClient { let retries = 0 const tryConnect = (): Promise => { - return fetch(this.url, { - method: 'HEAD', - headers: { - accept: 'msw/passthrough', - }, - cache: 'no-cache', - }).then( - (response) => { - invariant(response.ok, '') + const connectionPromise = new DeferredPromise() + + const request = http + .request(this.url, { + agent: this.agent, + method: 'HEAD', + headers: { + accept: 'msw/passthrough', + }, + timeout: 1000, + }) + .end() + + request + .once('response', (response) => { + if (response.statusCode === 200) { + connectionPromise.resolve() + } else { + connectionPromise.reject() + } + }) + .once('error', () => { + connectionPromise.reject() + }) + .once('timeout', () => { + connectionPromise.reject() + }) + + return connectionPromise.then( + () => { this.connected = true }, async () => { - if (retries === maxRetries) { - throw new Error( - `Failed to connect to remote server after ${maxRetries} retries`, - ) - } + invariant( + retries < maxRetries, + 'Failed to connect to the remote server after %s retries', + maxRetries, + ) retries++ - await delay(500) - return tryConnect() + request.removeAllListeners() + return delay(500).then(() => tryConnect()) }, ) } @@ -371,19 +419,111 @@ export class RemoteClient { boundaryId: string request: Request }): Promise { - const request = args.request.clone() + invariant( + this.connected, + 'Failed to handle request "%s %s": client is not connected', + args.request.method, + args.request.url, + ) - request.headers.set('accept', 'msw/passthrough') - request.headers.set('x-msw-request-url', args.request.url) - request.headers.set('x-msw-request-id', args.requestId) - request.headers.set('x-msw-boundary-id', args.boundaryId) + const fetchRequest = args.request.clone() + const responsePromise = new DeferredPromise() - const response = await fetch(this.url, request).catch(() => undefined) + fetchRequest.headers.set('accept', 'msw/passthrough') + fetchRequest.headers.set('x-msw-request-url', args.request.url) + fetchRequest.headers.set('x-msw-request-id', args.requestId) + fetchRequest.headers.set('x-msw-boundary-id', args.boundaryId) - if (!response || !response.ok) { - return + const request = http.request(this.url, { + method: fetchRequest.method, + headers: Object.fromEntries(fetchRequest.headers), + }) + + if (fetchRequest.body) { + Readable.fromWeb(fetchRequest.body as any).pipe(request, { end: true }) + } else { + request.end() } - return response + request + .once('response', (response) => { + if (response.statusCode === 404) { + responsePromise.resolve(undefined) + return + } + + const fetchResponse = new FetchResponse( + /** @fixme Node.js types incompatibility */ + Readable.toWeb(response) as ReadableStream, + { + url: fetchRequest.url, + status: response.statusCode, + statusText: response.statusMessage, + headers: FetchResponse.parseRawHeaders(response.rawHeaders), + }, + ) + responsePromise.resolve(fetchResponse) + }) + .once('error', () => { + responsePromise.resolve(undefined) + }) + .once('timeout', () => { + responsePromise.resolve(undefined) + }) + + return responsePromise } + + // public async handleLifeCycleEvent< + // EventType extends keyof LifeCycleEventsMap, + // >(event: { + // type: EventType + // args: LifeCycleEventsMap[EventType][0] + // }): Promise { + // const url = new URL('/life-cycle-events', this.url) + // const payload: Record = { + // event: event.type, + // requestId: event.args.requestId, + // request: { + // url: event.args.request.url, + // method: event.args.request.method, + // headers: Array.from(event.args.request.headers), + // body: await event.args.request.arrayBuffer(), + // }, + // } + + // switch (event.type) { + // case 'unhandledException': { + // payload.error = event.args.error + // break + // } + + // case 'response:bypass': + // case 'response:mocked': { + // payload.response = { + // status: event.args.response.status, + // statustext: event.args.response.statusText, + // headers: Array.from(event.args.response.headers), + // body: await event.args.response.arrayBuffer(), + // } + // break + // } + // } + + // const response = await fetch(url, { + // method: 'POST', + // headers: { + // 'content-type': 'application/json', + // }, + // body: JSON.stringify(payload), + // }) + + // invariant( + // response && response.ok, + // 'Failed to forward a life-cycle event "%s" (%s %s) to the remote', + // event.type, + // event.args.request.method, + // event.args.request.url, + // ) + // } } diff --git a/src/node/setupServer.ts b/src/node/setupServer.ts index cb2ee7ec4..e662b533c 100644 --- a/src/node/setupServer.ts +++ b/src/node/setupServer.ts @@ -4,7 +4,6 @@ import { SetupServerApi } from './SetupServerApi' /** * Sets up a requests interception in Node.js with the given request handlers. - * @param {RequestHandler[]} handlers List of request handlers. * * @see {@link https://mswjs.io/docs/api/setup-server `setupServer()` API reference} */ diff --git a/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts b/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts index f8b9c1822..d59e0c98f 100644 --- a/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts +++ b/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts @@ -80,7 +80,7 @@ afterAll(async () => { await httpServer.close() }) -it( +it.only( 'emits correct events for the request handled in the test process', remote.boundary(async () => { remote.use( @@ -95,12 +95,12 @@ it( const response = await fetch(new URL('/resource', testApp.url)) const requestId = await waitForRequestId() - // Must return the mocked response defined in this test. + // Must respond with the mocked response defined in the test. expect(response.status).toBe(200) expect(response.statusText).toBe('OK') expect(await response.json()).toEqual({ mocked: true }) - // Must pipe all the relevant life-cycle events. + // Must forward the life-cycle events to the test process. await vi.waitFor(() => { expect(listener.mock.calls).toEqual([ [`[request:start] GET https://example.com/resource ${requestId}`], From 69a26dc5178d30b29128f57fc154824b10038a35 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 6 Jan 2025 13:47:36 +0100 Subject: [PATCH 197/210] feat: forward life-cycle events over http --- src/core/SetupApi.ts | 18 +- src/core/utils/internal/pipeEvents.ts | 9 +- src/node/SetupServerApi.ts | 15 +- src/node/setupRemoteServer.ts | 286 +++++++++++++----- .../life-cycle-events/on.node.test.ts | 2 +- 5 files changed, 250 insertions(+), 80 deletions(-) diff --git a/src/core/SetupApi.ts b/src/core/SetupApi.ts index e908e5994..9c761233a 100644 --- a/src/core/SetupApi.ts +++ b/src/core/SetupApi.ts @@ -2,6 +2,7 @@ import { invariant } from 'outvariant' import { EventMap, Emitter } from 'strict-event-emitter' import { RequestHandler } from './handlers/RequestHandler' import { LifeCycleEventEmitter } from './sharedOptions' +import { isObject } from './utils/internal/isObject' import { devUtils } from './utils/internal/devUtils' import { pipeEvents } from './utils/internal/pipeEvents' import { toReadonlyArray } from './utils/internal/toReadonlyArray' @@ -65,7 +66,22 @@ export abstract class SetupApi extends Disposable { this.emitter = new Emitter() this.publicEmitter = new Emitter() - pipeEvents(this.emitter, this.publicEmitter) + pipeEvents(this.emitter, this.publicEmitter, (_, ...data) => { + /** + * @note Prevent forwarding of internal HTTP requests to the public emitter. + * Those requests, such as the one for remote interception handshake, must never + * surface to the developer. + * + * @fixme This isn't nice. It leaks specific event types into this generic API. + * Find a better way for this, and for life-cycle events in general. + */ + return !( + isObject(data[0]) && + 'request' in data[0] && + data[0].request instanceof Request && + data[0].request?.headers.get('accept')?.includes('msw/internal') + ) + }) this.events = this.createLifeCycleEvents() diff --git a/src/core/utils/internal/pipeEvents.ts b/src/core/utils/internal/pipeEvents.ts index 43b57cd4e..0efdbe1e5 100644 --- a/src/core/utils/internal/pipeEvents.ts +++ b/src/core/utils/internal/pipeEvents.ts @@ -6,6 +6,10 @@ import { Emitter, EventMap } from 'strict-event-emitter' export function pipeEvents( source: Emitter, destination: Emitter, + filterEvent: ( + event: E, + ...data: Events[E] + ) => boolean = () => true, ): void { const rawEmit: typeof source.emit & { _isPiped?: boolean } = source.emit @@ -15,7 +19,10 @@ export function pipeEvents( const sourceEmit: typeof source.emit & { _isPiped?: boolean } = function sourceEmit(this: typeof source, event, ...data) { - destination.emit(event, ...data) + if (filterEvent(event, ...data)) { + destination.emit(event, ...data) + } + return rawEmit.call(this, event, ...data) } diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 4ae5af022..56e79ebb1 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -123,7 +123,7 @@ export class SetupServerApi const remoteConnectionPromise = remoteClient.connect().then( () => { // Forward the life-cycle events from this process to the remote. - // this.forwardLifeCycleEventsToRemote() + this.forwardLifeCycleEventsToRemote() this.handlersController.currentHandlers = new Proxy( this.handlersController.currentHandlers, @@ -183,11 +183,14 @@ export class SetupServerApi for (const event of events) { this.emitter.on(event, (args) => { - if (!shouldBypassRequest(args.request)) { - // remoteClient.handleLifeCycleEvent({ - // type: event, - // args, - // }) + if ( + !shouldBypassRequest(args.request) && + !args.request.headers.get('accept')?.includes('msw/internal') + ) { + remoteClient.handleLifeCycleEvent({ + type: event, + args, + }) } }) } diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index b379393f2..d86ead0ed 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -1,11 +1,14 @@ import * as http from 'node:http' import { Readable } from 'node:stream' +import * as streamConsumers from 'node:stream/consumers' import { AsyncLocalStorage } from 'node:async_hooks' import { invariant } from 'outvariant' import { createRequestId, FetchResponse } from '@mswjs/interceptors' import { DeferredPromise } from '@open-draft/deferred-promise' +import { Emitter } from 'strict-event-emitter' import { SetupApi } from '~/core/SetupApi' import { delay } from '~/core/delay' +import { bypass } from '~/core/bypass' import type { RequestHandler } from '~/core/handlers/RequestHandler' import type { WebSocketHandler } from '~/core/handlers/WebSocketHandler' import { handleRequest } from '~/core/utils/handleRequest' @@ -24,6 +27,30 @@ interface RemoteServerBoundaryContext { handlers: Array } +export type ForwardedLifeCycleEventPayload = { + type: keyof LifeCycleEventsMap + args: { + requestId: string + request: { + method: string + url: string + headers: Array<[string, string]> + body: Uint8Array | null + } + response?: { + status: number + statusText: string + headers: Array<[string, string]> + body: Uint8Array | null + } + error?: { + name: string + message: string + stack?: string + } + } +} + export const remoteHandlersContext = new AsyncLocalStorage() @@ -97,6 +124,8 @@ export class SetupRemoteServerApi } public async listen(): Promise { + const dummyEmitter = new Emitter() + const server = await createSyncServer() this[kServerUrl] = getServerUrl(server) @@ -104,6 +133,9 @@ export class SetupRemoteServerApi .once('SIGTERM', () => closeSyncServer(server)) .once('SIGINT', () => closeSyncServer(server)) + // Close the server if the setup API is disposed. + this.subscriptions.push(() => closeSyncServer(server)) + server.on('request', async (incoming, outgoing) => { if (!incoming.method) { return @@ -173,7 +205,12 @@ export class SetupRemoteServerApi handlers, /** @todo Support listen options */ { onUnhandledRequest() {} }, - this.emitter, + /** + * @note Use a dummy emitter because this context + * is only one layer that can resolve a request. For example, + * request can be resolved in the remote process and not here. + */ + dummyEmitter, ) if (response) { @@ -262,19 +299,35 @@ export class SetupRemoteServerApi } private async handleLifeCycleEventRequest( - _incoming: http.IncomingMessage, - _outgoing: http.ServerResponse & { + incoming: http.IncomingMessage, + outgoing: http.ServerResponse & { req: http.IncomingMessage }, ) { - // const stream = Readable.toWeb(incoming) - // const { event, requestId, request, response, error } = await new Request( - // incoming.url, - // { body: stream }, - // ).json() - // /** @todo Finish this. */ - // this.emitter.emit(event, {}) - // outgoing.writeHead(200).end() + const event = (await streamConsumers.json( + incoming, + )) as ForwardedLifeCycleEventPayload + + invariant( + event.type, + 'Failed to emit a forwarded life-cycle event: request payload corrupted', + ) + + // Emit the forwarded life-cycle event on this emitter. + this.emitter.emit(event.type as any, { + requestId: event.args.requestId, + request: deserializeFetchRequest(event.args.request), + response: + event.args.response != null + ? deserializeFetchResponse(event.args.response) + : undefined, + error: + event.args.error != null + ? deserializeError(event.args.error) + : undefined, + }) + + outgoing.writeHead(200).end() } } @@ -426,14 +479,14 @@ export class RemoteClient { args.request.url, ) - const fetchRequest = args.request.clone() - const responsePromise = new DeferredPromise() - - fetchRequest.headers.set('accept', 'msw/passthrough') - fetchRequest.headers.set('x-msw-request-url', args.request.url) - fetchRequest.headers.set('x-msw-request-id', args.requestId) - fetchRequest.headers.set('x-msw-boundary-id', args.boundaryId) - + const fetchRequest = bypass(args.request, { + headers: { + accept: 'msw/internal', + 'x-msw-request-url': args.request.url, + 'x-msw-request-id': args.requestId, + 'x-msw-boundary-id': args.boundaryId, + }, + }) const request = http.request(this.url, { method: fetchRequest.method, headers: Object.fromEntries(fetchRequest.headers), @@ -445,6 +498,8 @@ export class RemoteClient { request.end() } + const responsePromise = new DeferredPromise() + request .once('response', (response) => { if (response.statusCode === 404) { @@ -474,56 +529,145 @@ export class RemoteClient { return responsePromise } - // public async handleLifeCycleEvent< - // EventType extends keyof LifeCycleEventsMap, - // >(event: { - // type: EventType - // args: LifeCycleEventsMap[EventType][0] - // }): Promise { - // const url = new URL('/life-cycle-events', this.url) - // const payload: Record = { - // event: event.type, - // requestId: event.args.requestId, - // request: { - // url: event.args.request.url, - // method: event.args.request.method, - // headers: Array.from(event.args.request.headers), - // body: await event.args.request.arrayBuffer(), - // }, - // } - - // switch (event.type) { - // case 'unhandledException': { - // payload.error = event.args.error - // break - // } - - // case 'response:bypass': - // case 'response:mocked': { - // payload.response = { - // status: event.args.response.status, - // statustext: event.args.response.statusText, - // headers: Array.from(event.args.response.headers), - // body: await event.args.response.arrayBuffer(), - // } - // break - // } - // } - - // const response = await fetch(url, { - // method: 'POST', - // headers: { - // 'content-type': 'application/json', - // }, - // body: JSON.stringify(payload), - // }) - - // invariant( - // response && response.ok, - // 'Failed to forward a life-cycle event "%s" (%s %s) to the remote', - // event.type, - // event.args.request.method, - // event.args.request.url, - // ) - // } + public async handleLifeCycleEvent< + EventType extends keyof LifeCycleEventsMap, + >(event: { + type: EventType + args: LifeCycleEventsMap[EventType][0] + }): Promise { + invariant( + this.connected, + 'Failed to forward life-cycle events for "%s %s": remote client not connected', + event.args.request.method, + event.args.request.url, + ) + + const url = new URL('/life-cycle-events', this.url) + const payload = JSON.stringify({ + type: event.type, + args: { + requestId: event.args.requestId, + request: await serializeFetchRequest(event.args.request), + response: + 'response' in event.args + ? await serializeFetchResponse(event.args.response) + : undefined, + error: + 'error' in event.args ? serializeError(event.args.error) : undefined, + }, + } satisfies ForwardedLifeCycleEventPayload) + + invariant( + payload, + 'Failed to serialize a life-cycle event "%s" for request "%s %s"', + event.type, + event.args.request.method, + event.args.request.url, + ) + + const donePromise = new DeferredPromise() + + http + .request( + url, + { + method: 'POST', + headers: { + accept: 'msw/passthrough, msw/internal', + 'content-type': 'application/json', + }, + }, + (response) => { + if (response.statusCode === 200) { + donePromise.resolve() + } else { + donePromise.reject( + new Error( + `Failed to forward life-cycle event "${event.type}" for request "${event.args.request.method} ${event.args.request.url}": expected a 200 response but got ${response.statusCode}`, + ), + ) + } + }, + ) + .end(payload) + .once('error', (error) => { + // eslint-disable-next-line no-console + console.error(error) + donePromise.reject( + new Error( + `Failed to forward life-cycle event "${event.type}" for request "${event.args.request.method} ${event.args.request.url}": unexpected error. There's likely additional information above.`, + ), + ) + }) + + return donePromise + } +} + +async function serializeFetchRequest( + request: Request, +): Promise { + return { + url: request.url, + method: request.method, + headers: Array.from(request.headers), + body: request.body + ? new Uint8Array(await request.clone().arrayBuffer()) + : null, + } +} + +function deserializeFetchRequest( + value: NonNullable, +): Request { + return new Request(value.url, { + method: value.method, + headers: value.headers, + body: value.body, + }) +} + +async function serializeFetchResponse( + response: Response, +): Promise { + return { + status: response.status, + statusText: response.statusText, + headers: Array.from(response.headers), + body: response.body + ? new Uint8Array(await response.clone().arrayBuffer()) + : null, + } +} + +function deserializeFetchResponse( + value: NonNullable, +): Response { + return new FetchResponse( + value.body ? new Uint8Array(Object.values(value.body)) : null, + { + status: value.status, + statusText: value.statusText, + headers: value.headers, + }, + ) +} + +function serializeError( + error: Error, +): ForwardedLifeCycleEventPayload['args']['error'] { + return { + name: error.name, + message: error.message, + stack: error.stack, + } +} + +function deserializeError( + value: NonNullable, +): Error { + const error = new Error(value.message) + error.name = value.name + error.stack = value.stack + return error } diff --git a/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts b/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts index d59e0c98f..ead1a4d18 100644 --- a/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts +++ b/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts @@ -80,7 +80,7 @@ afterAll(async () => { await httpServer.close() }) -it.only( +it( 'emits correct events for the request handled in the test process', remote.boundary(async () => { remote.use( From f6cb07cca1e165d65141771d457e4bb32ec09aae Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 8 Jan 2025 11:51:07 +0100 Subject: [PATCH 198/210] test: pass correct ArrayBuffer --- test/node/msw-api/setup-remote-server/response.body.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/node/msw-api/setup-remote-server/response.body.test.ts b/test/node/msw-api/setup-remote-server/response.body.test.ts index 59c402ffd..5e447e32b 100644 --- a/test/node/msw-api/setup-remote-server/response.body.test.ts +++ b/test/node/msw-api/setup-remote-server/response.body.test.ts @@ -53,7 +53,9 @@ it( remote.boundary(async () => { remote.use( http.get('https://example.com/resource', () => { - return HttpResponse.arrayBuffer(new TextEncoder().encode('hello world')) + return HttpResponse.arrayBuffer( + new TextEncoder().encode('hello world').buffer, + ) }), ) From c21f0bdf697b66e18b8709736ca7129fe7671070 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 8 Jan 2025 11:51:18 +0100 Subject: [PATCH 199/210] test: move the life-cycle event forwarding test --- ...on.node.test.ts => life-cycle-event-forwarding.node.test.ts} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename test/node/msw-api/setup-remote-server/{life-cycle-events/on.node.test.ts => life-cycle-event-forwarding.node.test.ts} (99%) diff --git a/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts b/test/node/msw-api/setup-remote-server/life-cycle-event-forwarding.node.test.ts similarity index 99% rename from test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts rename to test/node/msw-api/setup-remote-server/life-cycle-event-forwarding.node.test.ts index ead1a4d18..df6cbd43a 100644 --- a/test/node/msw-api/setup-remote-server/life-cycle-events/on.node.test.ts +++ b/test/node/msw-api/setup-remote-server/life-cycle-event-forwarding.node.test.ts @@ -3,7 +3,7 @@ import { http, HttpResponse, SetupApi, LifeCycleEventsMap } from 'msw' import { setupRemoteServer } from 'msw/node' import { DeferredPromise } from '@open-draft/deferred-promise' import { HttpServer } from '@open-draft/test-server/http' -import { spawnTestApp } from '../utils' +import { spawnTestApp } from './utils' const remote = setupRemoteServer() From 3826cad1e039fefb5ddda60dd224bedd9666136d Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 8 Jan 2025 11:56:44 +0100 Subject: [PATCH 200/210] fix(setupServer): print a dev utils error on failed remote connection --- src/node/SetupServerApi.ts | 7 ++++--- .../life-cycle-event-forwarding.node.test.ts | 6 +++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 56e79ebb1..fcbe696d8 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -13,6 +13,7 @@ import { RemoteRequestHandler } from '~/core/handlers/RemoteRequestHandler' import { shouldBypassRequest } from '~/core/utils/internal/requestUtils' import { getRemoteContextFromEnvironment } from './remoteContext' import { LifeCycleEventsMap } from '~/core/sharedOptions' +import { devUtils } from '~/core/utils/internal/devUtils' const handlersStorage = new AsyncLocalStorage() @@ -143,9 +144,9 @@ export class SetupServerApi ) }, () => { - // eslint-disable-next-line no-console - console.error( - `Failed to connect to a remote server at "${remoteContext.serverUrl}"`, + devUtils.error( + 'Failed to enable remote mode: could not connect to the remote server at "%s"', + remoteContext.serverUrl, ) }, ) diff --git a/test/node/msw-api/setup-remote-server/life-cycle-event-forwarding.node.test.ts b/test/node/msw-api/setup-remote-server/life-cycle-event-forwarding.node.test.ts index df6cbd43a..cd14fe332 100644 --- a/test/node/msw-api/setup-remote-server/life-cycle-event-forwarding.node.test.ts +++ b/test/node/msw-api/setup-remote-server/life-cycle-event-forwarding.node.test.ts @@ -89,7 +89,7 @@ it( }), ) - await using testApp = await spawnTestApp(require.resolve('../use.app.js')) + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) const { listener, waitForRequestId } = spyOnLifeCycleEvents(remote) const response = await fetch(new URL('/resource', testApp.url)) @@ -117,7 +117,7 @@ it( it( 'emits correct events for the request handled in the remote process', remote.boundary(async () => { - await using testApp = await spawnTestApp(require.resolve('../use.app.js')) + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) const { listener, waitForRequestId } = spyOnLifeCycleEvents(remote) const response = await fetch(new URL('/resource', testApp.url)) @@ -143,7 +143,7 @@ it( it( 'emits correct events for the request unhandled by either parties', remote.boundary(async () => { - await using testApp = await spawnTestApp(require.resolve('../use.app.js')) + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) const { listener, waitForRequestId } = spyOnLifeCycleEvents(remote) const resourceUrl = httpServer.http.url('/greeting') From d7d09fb21dfdf35476ca4fd6ef99e3fd01952a2d Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 8 Jan 2025 13:51:28 +0100 Subject: [PATCH 201/210] chore: hopefully, improve node and core ts configs --- src/browser/tsconfig.browser.json | 12 ++++-- src/core/HttpResponse.ts | 2 +- src/node/remoteContext.ts | 4 +- src/tsconfig.core.build.json | 2 +- src/tsconfig.core.json | 8 ++++ src/tsconfig.node.json | 17 ++++++--- src/tsconfig.src.json | 15 -------- .../ignore-internal-requests.test.ts | 38 +++++++++++++++++++ test/node/tsconfig.json | 2 +- test/support/utils.ts | 26 ++++++++++++- tsconfig.json | 16 ++------ tsconfig.test.unit.json | 6 +-- 12 files changed, 101 insertions(+), 47 deletions(-) create mode 100644 src/tsconfig.core.json delete mode 100644 src/tsconfig.src.json create mode 100644 test/node/msw-api/setup-server/life-cycle-events/ignore-internal-requests.test.ts diff --git a/src/browser/tsconfig.browser.json b/src/browser/tsconfig.browser.json index 8bafa054e..8c9a9092c 100644 --- a/src/browser/tsconfig.browser.json +++ b/src/browser/tsconfig.browser.json @@ -1,9 +1,15 @@ { - "extends": "../tsconfig.src.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { + "composite": true, // Expose browser-specific libraries only for the // source code under the "src/browser" directory. - "lib": ["DOM", "dom.iterable", "WebWorker"] + "lib": ["DOM", "dom.iterable", "WebWorker"], + "baseUrl": "./", + "paths": { + "~/core": ["../core"], + "~/core/*": ["../core/*"] + } }, - "include": ["../../global.d.ts", "./global.browser.d.ts", "./**/*.ts"] + "include": ["./global.browser.d.ts", "./**/*.ts"] } diff --git a/src/core/HttpResponse.ts b/src/core/HttpResponse.ts index 7df08d54f..159aed856 100644 --- a/src/core/HttpResponse.ts +++ b/src/core/HttpResponse.ts @@ -167,7 +167,7 @@ export class HttpResponse extends Response { responseInit.headers.set('Content-Length', body.byteLength.toString()) } - return new HttpResponse(body, responseInit) + return new HttpResponse(body as ArrayBuffer, responseInit) } /** diff --git a/src/node/remoteContext.ts b/src/node/remoteContext.ts index 6a42c4f56..6e4a10e04 100644 --- a/src/node/remoteContext.ts +++ b/src/node/remoteContext.ts @@ -33,11 +33,11 @@ export function getRemoteContextFromEnvironment(): RemoteContext { invariant( serverUrl, - 'Failed to retrieve the remote context from environment: server URL is missing', + 'Failed to enable remote mode: server URL is missing in the environment', ) invariant( boundaryId, - 'Failed to retrieve the remote context from environment: boundary ID is missing', + 'Failed to enable remote mode: boundary ID is missing in the environment', ) return { diff --git a/src/tsconfig.core.build.json b/src/tsconfig.core.build.json index 0852a1d01..06edbfc21 100644 --- a/src/tsconfig.core.build.json +++ b/src/tsconfig.core.build.json @@ -1,5 +1,5 @@ { - "extends": "./tsconfig.src.json", + "extends": "./tsconfig.core.json", "compilerOptions": { "composite": false } diff --git a/src/tsconfig.core.json b/src/tsconfig.core.json new file mode 100644 index 000000000..6694fdfc6 --- /dev/null +++ b/src/tsconfig.core.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig.base.json", + "include": ["./core"], + "exclude": ["**/*.test.ts"], + "compilerOptions": { + "composite": true + } +} diff --git a/src/tsconfig.node.json b/src/tsconfig.node.json index c98a860ae..aa657abd2 100644 --- a/src/tsconfig.node.json +++ b/src/tsconfig.node.json @@ -1,8 +1,15 @@ { - "extends": "./tsconfig.src.json", - "compilerOptions": { - "types": ["node"] - }, + "extends": "../tsconfig.base.json", "include": ["./node", "./native"], - "exclude": ["**/*.test.ts"] + "references": [{ "path": "./tsconfig.core.json" }], + "exclude": ["**/*.test.ts"], + "compilerOptions": { + "composite": true, + "types": ["@types/node"], + "baseUrl": "./", + "paths": { + "~/core": ["core"], + "~/core/*": ["core/*"] + } + } } diff --git a/src/tsconfig.src.json b/src/tsconfig.src.json deleted file mode 100644 index 1399d3535..000000000 --- a/src/tsconfig.src.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - // Common configuration for everything - // living in the "src" directory. - "extends": "../tsconfig.base.json", - "compilerOptions": { - "composite": true, - "baseUrl": "./", - "paths": { - "~/core": ["core"], - "~/core/*": ["core/*"] - } - }, - "include": ["../global.d.ts", "./**/*.ts"], - "exclude": ["./**/*.test.ts"] -} diff --git a/test/node/msw-api/setup-server/life-cycle-events/ignore-internal-requests.test.ts b/test/node/msw-api/setup-server/life-cycle-events/ignore-internal-requests.test.ts new file mode 100644 index 000000000..b30d81e28 --- /dev/null +++ b/test/node/msw-api/setup-server/life-cycle-events/ignore-internal-requests.test.ts @@ -0,0 +1,38 @@ +// @vitest-environment node +import { setupServer } from 'msw/node' +import { + MSW_REMOTE_SERVER_URL, + MSW_REMOTE_BOUNDARY_ID, +} from '../../../../../src/node/remoteContext' +import { spyOnLifeCycleEvents } from '../../../../support/utils' + +const server = setupServer() + +beforeAll(() => { + // Mock the environment variables required for the remote interception to work. + vi.stubEnv(MSW_REMOTE_SERVER_URL, 'http://localhost/noop') + vi.stubEnv(MSW_REMOTE_BOUNDARY_ID, 'abc-123') + + server.listen({ + // Enable remote interception to trigger internal requests. + // The connection is meant to fail here. + remote: { + enabled: true, + }, + }) +}) + +afterEach(() => { + server.resetHandlers() +}) + +afterAll(() => { + server.close() +}) + +it('does not emit life-cycle events for internal requests', async () => { + const listener = spyOnLifeCycleEvents(server) + + // Must emit no life-cycle events for internal requests. + expect(listener).not.toHaveBeenCalled() +}) diff --git a/test/node/tsconfig.json b/test/node/tsconfig.json index 8c9ede84d..fa2c8107a 100644 --- a/test/node/tsconfig.json +++ b/test/node/tsconfig.json @@ -17,5 +17,5 @@ "allowSyntheticDefaultImports": true, "types": ["node", "vitest/globals"] }, - "include": ["../../global.d.ts", "./**/*.test.ts"] + "include": ["./**/*.test.ts"] } diff --git a/test/support/utils.ts b/test/support/utils.ts index 4f631062b..549d32826 100644 --- a/test/support/utils.ts +++ b/test/support/utils.ts @@ -1,5 +1,7 @@ -import * as path from 'path' -import { ClientRequest, IncomingMessage } from 'http' +import * as path from 'node:path' +import { ClientRequest, IncomingMessage } from 'node:http' +import { vi, afterEach } from 'vitest' +import { LifeCycleEventsMap, SetupApi } from 'msw' export function sleep(duration: number) { return new Promise((resolve) => { @@ -44,3 +46,23 @@ export async function waitForClientRequest(request: ClientRequest): Promise<{ }) }) } + +export function spyOnLifeCycleEvents(api: SetupApi) { + const listener = vi.fn() + afterEach(() => listener.mockReset()) + + const wrapListener = (eventName: string) => { + return (...args: Array) => listener(eventName, ...args) + } + + api.events + .on('request:start', wrapListener('request:start')) + .on('request:match', wrapListener('request:match')) + .on('request:unhandled', wrapListener('request:unhandled')) + .on('request:end', wrapListener('request:end')) + .on('response:mocked', wrapListener('response:mocked')) + .on('response:bypass', wrapListener('response:bypass')) + .on('unhandledException', wrapListener('unhandledException')) + + return listener +} diff --git a/tsconfig.json b/tsconfig.json index 57a15aab2..5b14ecd70 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,17 +1,9 @@ { "extends": "./tsconfig.base.json", "references": [ - // Source. - { - "path": "./src/browser/tsconfig.browser.json" - }, - { - "path": "./src/tsconfig.node.json" - }, - - // Tests. - { - "path": "./tsconfig.test.unit.json" - } + { "path": "./src/tsconfig.core.json" }, + { "path": "./src/browser/tsconfig.browser.json" }, + { "path": "./src/tsconfig.node.json" }, + { "path": "./tsconfig.test.unit.json" } ] } diff --git a/tsconfig.test.unit.json b/tsconfig.test.unit.json index abea30c95..ba0d5c8fa 100644 --- a/tsconfig.test.unit.json +++ b/tsconfig.test.unit.json @@ -9,9 +9,5 @@ "types": ["vitest/globals"] }, "include": ["./src/**/*.test.ts", "./test/support"], - "references": [ - { - "path": "./src/tsconfig.src.json" - } - ] + "references": [{ "path": "./src/tsconfig.node.json" }] } From ac6da8bb0e1cbdfa447a956a076350c1981a62fb Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 8 Jan 2025 13:51:50 +0100 Subject: [PATCH 202/210] test(setupServer): add test for not emitting life cycle events on internal requests --- .../life-cycle-events/ignore-internal-requests.test.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/test/node/msw-api/setup-server/life-cycle-events/ignore-internal-requests.test.ts b/test/node/msw-api/setup-server/life-cycle-events/ignore-internal-requests.test.ts index b30d81e28..bc9959a17 100644 --- a/test/node/msw-api/setup-server/life-cycle-events/ignore-internal-requests.test.ts +++ b/test/node/msw-api/setup-server/life-cycle-events/ignore-internal-requests.test.ts @@ -1,17 +1,13 @@ // @vitest-environment node import { setupServer } from 'msw/node' -import { - MSW_REMOTE_SERVER_URL, - MSW_REMOTE_BOUNDARY_ID, -} from '../../../../../src/node/remoteContext' import { spyOnLifeCycleEvents } from '../../../../support/utils' const server = setupServer() beforeAll(() => { // Mock the environment variables required for the remote interception to work. - vi.stubEnv(MSW_REMOTE_SERVER_URL, 'http://localhost/noop') - vi.stubEnv(MSW_REMOTE_BOUNDARY_ID, 'abc-123') + vi.stubEnv('MSW_REMOTE_SERVER_URL', 'http://localhost/noop') + vi.stubEnv('MSW_REMOTE_BOUNDARY_ID', 'abc-123') server.listen({ // Enable remote interception to trigger internal requests. From b5ea6fc13ef022f0bfed6d5ab6a769b10eb36dd2 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 8 Jan 2025 14:10:38 +0100 Subject: [PATCH 203/210] fix: support `onUnhandledRequest` --- src/core/handlers/RemoteRequestHandler.ts | 2 +- src/node/setupRemoteServer.ts | 32 +++++++++++-- .../on-unhandled-request-default.test.ts | 47 +++++++++++++++++++ .../on-unhandled-request/default.node.test.ts | 11 +---- 4 files changed, 79 insertions(+), 13 deletions(-) create mode 100644 test/node/msw-api/setup-remote-server/on-unhandled-request-default.test.ts diff --git a/src/core/handlers/RemoteRequestHandler.ts b/src/core/handlers/RemoteRequestHandler.ts index 76787a5b0..b7eff4fab 100644 --- a/src/core/handlers/RemoteRequestHandler.ts +++ b/src/core/handlers/RemoteRequestHandler.ts @@ -5,7 +5,7 @@ import { type ResponseResolver, type RequestHandlerDefaultInfo, } from './RequestHandler' -import { RemoteClient } from 'node/setupRemoteServer' +import { RemoteClient } from '../../node/setupRemoteServer' interface RemoteRequestHandlerParsedResult { response: Response | undefined diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index d86ead0ed..c53f80fe3 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -2,6 +2,7 @@ import * as http from 'node:http' import { Readable } from 'node:stream' import * as streamConsumers from 'node:stream/consumers' import { AsyncLocalStorage } from 'node:async_hooks' +import type { RequiredDeep } from 'type-fest' import { invariant } from 'outvariant' import { createRequestId, FetchResponse } from '@mswjs/interceptors' import { DeferredPromise } from '@open-draft/deferred-promise' @@ -19,6 +20,10 @@ import type { } from '~/core/sharedOptions' import { devUtils } from '~/core/utils/internal/devUtils' import { AsyncHandlersController } from './SetupServerApi' +import { ListenOptions } from './glossary' +import { mergeRight } from '~/core/utils/internal/mergeRight' +import { DEFAULT_LISTEN_OPTIONS } from './SetupServerCommonApi' +import { onUnhandledRequest } from '~/core/utils/request/onUnhandledRequest' interface RemoteServerBoundaryContext { serverUrl: URL @@ -90,6 +95,7 @@ export class SetupRemoteServerApi { [kServerUrl]: URL | undefined + protected resolvedOptions!: RequiredDeep protected executionContexts: Map RemoteServerBoundaryContext> constructor(handlers: Array) { @@ -123,7 +129,11 @@ export class SetupRemoteServerApi return context.boundaryId } - public async listen(): Promise { + public async listen(options: Partial = {}): Promise { + this.resolvedOptions = mergeRight( + DEFAULT_LISTEN_OPTIONS, + options, + ) as RequiredDeep const dummyEmitter = new Emitter() const server = await createSyncServer() @@ -203,8 +213,15 @@ export class SetupRemoteServerApi request, requestId, handlers, - /** @todo Support listen options */ - { onUnhandledRequest() {} }, + { + /** + * @note Ignore the `onUnhandledRequest` callback during the + * request handling. This context isn't the only one handling + * the request. Instead, this logic is moved to the forwarded + * life-cycle event. + */ + onUnhandledRequest() {}, + }, /** * @note Use a dummy emitter because this context * is only one layer that can resolve a request. For example, @@ -231,6 +248,15 @@ export class SetupRemoteServerApi outgoing.writeHead(404).end() }) + + this.emitter.on('request:unhandled', async ({ request }) => { + /** + * @note React to unhandled requests in the "request:unhandled" listener. + * This event will be forwarded from the remote process after neither has + * handled the request. + */ + await onUnhandledRequest(request, this.resolvedOptions.onUnhandledRequest) + }) } public boundary, R>( diff --git a/test/node/msw-api/setup-remote-server/on-unhandled-request-default.test.ts b/test/node/msw-api/setup-remote-server/on-unhandled-request-default.test.ts new file mode 100644 index 000000000..96eb940e6 --- /dev/null +++ b/test/node/msw-api/setup-remote-server/on-unhandled-request-default.test.ts @@ -0,0 +1,47 @@ +// @vitest-environment node +import { HttpResponse, http } from 'msw' +import { setupRemoteServer } from 'msw/node' +import { spawnTestApp } from './utils' + +const remote = setupRemoteServer() + +beforeAll(async () => { + vi.spyOn(console, 'warn').mockImplementation(() => {}) + await remote.listen() +}) + +afterEach(() => { + vi.clearAllMocks() + remote.resetHandlers() +}) + +afterAll(async () => { + vi.restoreAllMocks() + await remote.close() +}) + +it( + 'warns on requests not handled by either party be default', + remote.boundary(async () => { + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) + + await fetch(new URL('/resource', testApp.url)) + + // Must print a warning since nobody has handled the request. + expect(console.warn).toHaveBeenCalledWith('') + }), +) + +it( + 'does not warn on the request not handled here but handled there', + remote.boundary(async () => { + throw new Error('Complete this') + + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) + + await fetch(new URL('/resource', testApp.url)) + + // Must print a warning since nobody has handled the request. + expect(console.warn).toHaveBeenCalledWith('') + }), +) diff --git a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/default.node.test.ts b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/default.node.test.ts index 30e4f0a5d..eb531f8da 100644 --- a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/default.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/default.node.test.ts @@ -17,7 +17,7 @@ beforeAll(() => { }) afterEach(() => { - vi.resetAllMocks() + vi.clearAllMocks() }) afterAll(() => { @@ -41,11 +41,4 @@ If you still wish to intercept this unhandled request, please create a request h Read more: https://mswjs.io/docs/getting-started/mocks`) }) -it('does not warn on unhandled "file://" requests', async () => { - // This request is expected to fail: - // Fetching non-existing file URL. - await fetch('file:///file/does/not/exist').catch(() => void 0) - - expect(console.error).not.toBeCalled() - expect(console.warn).not.toBeCalled() -}) +it.todo('does not warn on unhandled "file://" requests') From a70b5183750b8fb311c5b09481255f862d20c2a7 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 8 Jan 2025 14:21:15 +0100 Subject: [PATCH 204/210] chore: move `RemoteClient` to core --- src/core/RemoteClient.ts | 309 +++++++++++++++++++++ src/core/handlers/RemoteRequestHandler.ts | 2 +- src/node/SetupServerApi.ts | 2 +- src/node/setupRemoteServer.ts | 311 +--------------------- src/tsconfig.core.json | 3 +- src/tsconfig.node.json | 4 +- 6 files changed, 322 insertions(+), 309 deletions(-) create mode 100644 src/core/RemoteClient.ts diff --git a/src/core/RemoteClient.ts b/src/core/RemoteClient.ts new file mode 100644 index 000000000..542a4e62d --- /dev/null +++ b/src/core/RemoteClient.ts @@ -0,0 +1,309 @@ +import * as http from 'node:http' +import { Readable } from 'node:stream' +import { DeferredPromise } from '@open-draft/deferred-promise' +import { FetchResponse } from '@mswjs/interceptors' +import { invariant } from 'outvariant' +import type { LifeCycleEventsMap } from './sharedOptions' +import { bypass } from './bypass' +import { delay } from './delay' + +export type ForwardedLifeCycleEventPayload = { + type: keyof LifeCycleEventsMap + args: { + requestId: string + request: { + method: string + url: string + headers: Array<[string, string]> + body: Uint8Array | null + } + response?: { + status: number + statusText: string + headers: Array<[string, string]> + body: Uint8Array | null + } + error?: { + name: string + message: string + stack?: string + } + } +} + +export class RemoteClient { + public connected: boolean + + protected agent: http.Agent + + constructor(private readonly url: URL) { + this.agent = new http.Agent({ + // Reuse the same socket between requests so we can communicate + // request's life-cycle events via HTTP more efficiently. + keepAlive: true, + }) + this.connected = false + } + + public async connect(): Promise { + if (this.connected) { + return + } + + const maxRetries = 4 + let retries = 0 + + const tryConnect = (): Promise => { + const connectionPromise = new DeferredPromise() + + const request = http + .request(this.url, { + agent: this.agent, + method: 'HEAD', + headers: { + accept: 'msw/passthrough', + }, + timeout: 1000, + }) + .end() + + request + .once('response', (response) => { + if (response.statusCode === 200) { + connectionPromise.resolve() + } else { + connectionPromise.reject() + } + }) + .once('error', () => { + connectionPromise.reject() + }) + .once('timeout', () => { + connectionPromise.reject() + }) + + return connectionPromise.then( + () => { + this.connected = true + }, + async () => { + invariant( + retries < maxRetries, + 'Failed to connect to the remote server after %s retries', + maxRetries, + ) + + retries++ + request.removeAllListeners() + return delay(500).then(() => tryConnect()) + }, + ) + } + + return tryConnect() + } + + public async handleRequest(args: { + requestId: string + boundaryId: string + request: Request + }): Promise { + invariant( + this.connected, + 'Failed to handle request "%s %s": client is not connected', + args.request.method, + args.request.url, + ) + + const fetchRequest = bypass(args.request, { + headers: { + accept: 'msw/internal', + 'x-msw-request-url': args.request.url, + 'x-msw-request-id': args.requestId, + 'x-msw-boundary-id': args.boundaryId, + }, + }) + const request = http.request(this.url, { + method: fetchRequest.method, + headers: Object.fromEntries(fetchRequest.headers), + }) + + if (fetchRequest.body) { + Readable.fromWeb(fetchRequest.body as any).pipe(request, { end: true }) + } else { + request.end() + } + + const responsePromise = new DeferredPromise() + + request + .once('response', (response) => { + if (response.statusCode === 404) { + responsePromise.resolve(undefined) + return + } + + const fetchResponse = new FetchResponse( + /** @fixme Node.js types incompatibility */ + Readable.toWeb(response) as ReadableStream, + { + url: fetchRequest.url, + status: response.statusCode, + statusText: response.statusMessage, + headers: FetchResponse.parseRawHeaders(response.rawHeaders), + }, + ) + responsePromise.resolve(fetchResponse) + }) + .once('error', () => { + responsePromise.resolve(undefined) + }) + .once('timeout', () => { + responsePromise.resolve(undefined) + }) + + return responsePromise + } + + public async handleLifeCycleEvent< + EventType extends keyof LifeCycleEventsMap, + >(event: { + type: EventType + args: LifeCycleEventsMap[EventType][0] + }): Promise { + invariant( + this.connected, + 'Failed to forward life-cycle events for "%s %s": remote client not connected', + event.args.request.method, + event.args.request.url, + ) + + const url = new URL('/life-cycle-events', this.url) + const payload = JSON.stringify({ + type: event.type, + args: { + requestId: event.args.requestId, + request: await serializeFetchRequest(event.args.request), + response: + 'response' in event.args + ? await serializeFetchResponse(event.args.response) + : undefined, + error: + 'error' in event.args ? serializeError(event.args.error) : undefined, + }, + } satisfies ForwardedLifeCycleEventPayload) + + invariant( + payload, + 'Failed to serialize a life-cycle event "%s" for request "%s %s"', + event.type, + event.args.request.method, + event.args.request.url, + ) + + const donePromise = new DeferredPromise() + + http + .request( + url, + { + method: 'POST', + headers: { + accept: 'msw/passthrough, msw/internal', + 'content-type': 'application/json', + }, + }, + (response) => { + if (response.statusCode === 200) { + donePromise.resolve() + } else { + donePromise.reject( + new Error( + `Failed to forward life-cycle event "${event.type}" for request "${event.args.request.method} ${event.args.request.url}": expected a 200 response but got ${response.statusCode}`, + ), + ) + } + }, + ) + .end(payload) + .once('error', (error) => { + // eslint-disable-next-line no-console + console.error(error) + donePromise.reject( + new Error( + `Failed to forward life-cycle event "${event.type}" for request "${event.args.request.method} ${event.args.request.url}": unexpected error. There's likely additional information above.`, + ), + ) + }) + + return donePromise + } +} + +export async function serializeFetchRequest( + request: Request, +): Promise { + return { + url: request.url, + method: request.method, + headers: Array.from(request.headers), + body: request.body + ? new Uint8Array(await request.clone().arrayBuffer()) + : null, + } +} + +export function deserializeFetchRequest( + value: NonNullable, +): Request { + return new Request(value.url, { + method: value.method, + headers: value.headers, + body: value.body, + }) +} + +async function serializeFetchResponse( + response: Response, +): Promise { + return { + status: response.status, + statusText: response.statusText, + headers: Array.from(response.headers), + body: response.body + ? new Uint8Array(await response.clone().arrayBuffer()) + : null, + } +} + +export function deserializeFetchResponse( + value: NonNullable, +): Response { + return new FetchResponse( + value.body ? new Uint8Array(Object.values(value.body)) : null, + { + status: value.status, + statusText: value.statusText, + headers: value.headers, + }, + ) +} + +export function serializeError( + error: Error, +): ForwardedLifeCycleEventPayload['args']['error'] { + return { + name: error.name, + message: error.message, + stack: error.stack, + } +} + +export function deserializeError( + value: NonNullable, +): Error { + const error = new Error(value.message) + error.name = value.name + error.stack = value.stack + return error +} diff --git a/src/core/handlers/RemoteRequestHandler.ts b/src/core/handlers/RemoteRequestHandler.ts index b7eff4fab..7daddb1b2 100644 --- a/src/core/handlers/RemoteRequestHandler.ts +++ b/src/core/handlers/RemoteRequestHandler.ts @@ -5,7 +5,7 @@ import { type ResponseResolver, type RequestHandlerDefaultInfo, } from './RequestHandler' -import { RemoteClient } from '../../node/setupRemoteServer' +import type { RemoteClient } from '../RemoteClient' interface RemoteRequestHandlerParsedResult { response: Response | undefined diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index fcbe696d8..8cd4374bd 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -8,12 +8,12 @@ import type { RequestHandler } from '~/core/handlers/RequestHandler' import type { ListenOptions, SetupServer } from './glossary' import type { WebSocketHandler } from '~/core/handlers/WebSocketHandler' import { SetupServerCommonApi } from './SetupServerCommonApi' -import { RemoteClient } from './setupRemoteServer' import { RemoteRequestHandler } from '~/core/handlers/RemoteRequestHandler' import { shouldBypassRequest } from '~/core/utils/internal/requestUtils' import { getRemoteContextFromEnvironment } from './remoteContext' import { LifeCycleEventsMap } from '~/core/sharedOptions' import { devUtils } from '~/core/utils/internal/devUtils' +import { RemoteClient } from '~/core/RemoteClient' const handlersStorage = new AsyncLocalStorage() diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index c53f80fe3..f86bb0f72 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -4,12 +4,10 @@ import * as streamConsumers from 'node:stream/consumers' import { AsyncLocalStorage } from 'node:async_hooks' import type { RequiredDeep } from 'type-fest' import { invariant } from 'outvariant' -import { createRequestId, FetchResponse } from '@mswjs/interceptors' +import { createRequestId } from '@mswjs/interceptors' import { DeferredPromise } from '@open-draft/deferred-promise' import { Emitter } from 'strict-event-emitter' import { SetupApi } from '~/core/SetupApi' -import { delay } from '~/core/delay' -import { bypass } from '~/core/bypass' import type { RequestHandler } from '~/core/handlers/RequestHandler' import type { WebSocketHandler } from '~/core/handlers/WebSocketHandler' import { handleRequest } from '~/core/utils/handleRequest' @@ -24,6 +22,12 @@ import { ListenOptions } from './glossary' import { mergeRight } from '~/core/utils/internal/mergeRight' import { DEFAULT_LISTEN_OPTIONS } from './SetupServerCommonApi' import { onUnhandledRequest } from '~/core/utils/request/onUnhandledRequest' +import { + type ForwardedLifeCycleEventPayload, + deserializeError, + deserializeFetchRequest, + deserializeFetchResponse, +} from '~/core/RemoteClient' interface RemoteServerBoundaryContext { serverUrl: URL @@ -32,30 +36,6 @@ interface RemoteServerBoundaryContext { handlers: Array } -export type ForwardedLifeCycleEventPayload = { - type: keyof LifeCycleEventsMap - args: { - requestId: string - request: { - method: string - url: string - headers: Array<[string, string]> - body: Uint8Array | null - } - response?: { - status: number - statusText: string - headers: Array<[string, string]> - body: Uint8Array | null - } - error?: { - name: string - message: string - stack?: string - } - } -} - export const remoteHandlersContext = new AsyncLocalStorage() @@ -420,280 +400,3 @@ async function closeSyncServer(server: http.Server): Promise { Reflect.deleteProperty(globalThis, kRemoteServer) }) } - -export class RemoteClient { - public connected: boolean - - protected agent: http.Agent - - constructor(private readonly url: URL) { - this.agent = new http.Agent({ - // Reuse the same socket between requests so we can communicate - // request's life-cycle events via HTTP more efficiently. - keepAlive: true, - }) - this.connected = false - } - - public async connect(): Promise { - if (this.connected) { - return - } - - const maxRetries = 4 - let retries = 0 - - const tryConnect = (): Promise => { - const connectionPromise = new DeferredPromise() - - const request = http - .request(this.url, { - agent: this.agent, - method: 'HEAD', - headers: { - accept: 'msw/passthrough', - }, - timeout: 1000, - }) - .end() - - request - .once('response', (response) => { - if (response.statusCode === 200) { - connectionPromise.resolve() - } else { - connectionPromise.reject() - } - }) - .once('error', () => { - connectionPromise.reject() - }) - .once('timeout', () => { - connectionPromise.reject() - }) - - return connectionPromise.then( - () => { - this.connected = true - }, - async () => { - invariant( - retries < maxRetries, - 'Failed to connect to the remote server after %s retries', - maxRetries, - ) - - retries++ - request.removeAllListeners() - return delay(500).then(() => tryConnect()) - }, - ) - } - - return tryConnect() - } - - public async handleRequest(args: { - requestId: string - boundaryId: string - request: Request - }): Promise { - invariant( - this.connected, - 'Failed to handle request "%s %s": client is not connected', - args.request.method, - args.request.url, - ) - - const fetchRequest = bypass(args.request, { - headers: { - accept: 'msw/internal', - 'x-msw-request-url': args.request.url, - 'x-msw-request-id': args.requestId, - 'x-msw-boundary-id': args.boundaryId, - }, - }) - const request = http.request(this.url, { - method: fetchRequest.method, - headers: Object.fromEntries(fetchRequest.headers), - }) - - if (fetchRequest.body) { - Readable.fromWeb(fetchRequest.body as any).pipe(request, { end: true }) - } else { - request.end() - } - - const responsePromise = new DeferredPromise() - - request - .once('response', (response) => { - if (response.statusCode === 404) { - responsePromise.resolve(undefined) - return - } - - const fetchResponse = new FetchResponse( - /** @fixme Node.js types incompatibility */ - Readable.toWeb(response) as ReadableStream, - { - url: fetchRequest.url, - status: response.statusCode, - statusText: response.statusMessage, - headers: FetchResponse.parseRawHeaders(response.rawHeaders), - }, - ) - responsePromise.resolve(fetchResponse) - }) - .once('error', () => { - responsePromise.resolve(undefined) - }) - .once('timeout', () => { - responsePromise.resolve(undefined) - }) - - return responsePromise - } - - public async handleLifeCycleEvent< - EventType extends keyof LifeCycleEventsMap, - >(event: { - type: EventType - args: LifeCycleEventsMap[EventType][0] - }): Promise { - invariant( - this.connected, - 'Failed to forward life-cycle events for "%s %s": remote client not connected', - event.args.request.method, - event.args.request.url, - ) - - const url = new URL('/life-cycle-events', this.url) - const payload = JSON.stringify({ - type: event.type, - args: { - requestId: event.args.requestId, - request: await serializeFetchRequest(event.args.request), - response: - 'response' in event.args - ? await serializeFetchResponse(event.args.response) - : undefined, - error: - 'error' in event.args ? serializeError(event.args.error) : undefined, - }, - } satisfies ForwardedLifeCycleEventPayload) - - invariant( - payload, - 'Failed to serialize a life-cycle event "%s" for request "%s %s"', - event.type, - event.args.request.method, - event.args.request.url, - ) - - const donePromise = new DeferredPromise() - - http - .request( - url, - { - method: 'POST', - headers: { - accept: 'msw/passthrough, msw/internal', - 'content-type': 'application/json', - }, - }, - (response) => { - if (response.statusCode === 200) { - donePromise.resolve() - } else { - donePromise.reject( - new Error( - `Failed to forward life-cycle event "${event.type}" for request "${event.args.request.method} ${event.args.request.url}": expected a 200 response but got ${response.statusCode}`, - ), - ) - } - }, - ) - .end(payload) - .once('error', (error) => { - // eslint-disable-next-line no-console - console.error(error) - donePromise.reject( - new Error( - `Failed to forward life-cycle event "${event.type}" for request "${event.args.request.method} ${event.args.request.url}": unexpected error. There's likely additional information above.`, - ), - ) - }) - - return donePromise - } -} - -async function serializeFetchRequest( - request: Request, -): Promise { - return { - url: request.url, - method: request.method, - headers: Array.from(request.headers), - body: request.body - ? new Uint8Array(await request.clone().arrayBuffer()) - : null, - } -} - -function deserializeFetchRequest( - value: NonNullable, -): Request { - return new Request(value.url, { - method: value.method, - headers: value.headers, - body: value.body, - }) -} - -async function serializeFetchResponse( - response: Response, -): Promise { - return { - status: response.status, - statusText: response.statusText, - headers: Array.from(response.headers), - body: response.body - ? new Uint8Array(await response.clone().arrayBuffer()) - : null, - } -} - -function deserializeFetchResponse( - value: NonNullable, -): Response { - return new FetchResponse( - value.body ? new Uint8Array(Object.values(value.body)) : null, - { - status: value.status, - statusText: value.statusText, - headers: value.headers, - }, - ) -} - -function serializeError( - error: Error, -): ForwardedLifeCycleEventPayload['args']['error'] { - return { - name: error.name, - message: error.message, - stack: error.stack, - } -} - -function deserializeError( - value: NonNullable, -): Error { - const error = new Error(value.message) - error.name = value.name - error.stack = value.stack - return error -} diff --git a/src/tsconfig.core.json b/src/tsconfig.core.json index 6694fdfc6..11cc1e95c 100644 --- a/src/tsconfig.core.json +++ b/src/tsconfig.core.json @@ -1,6 +1,7 @@ { "extends": "../tsconfig.base.json", - "include": ["./core"], + "include": ["../global.d.ts", "./core"], + "references": [{ "path": "./tsconfig.node.json" }], "exclude": ["**/*.test.ts"], "compilerOptions": { "composite": true diff --git a/src/tsconfig.node.json b/src/tsconfig.node.json index aa657abd2..062f2b23f 100644 --- a/src/tsconfig.node.json +++ b/src/tsconfig.node.json @@ -1,11 +1,11 @@ { "extends": "../tsconfig.base.json", - "include": ["./node", "./native"], + "include": ["../global.d.ts", "./node", "./native"], "references": [{ "path": "./tsconfig.core.json" }], "exclude": ["**/*.test.ts"], "compilerOptions": { "composite": true, - "types": ["@types/node"], + "types": ["node"], "baseUrl": "./", "paths": { "~/core": ["core"], From 0d03db2e5ceace36835f7b27036621cf8106e391 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 9 Jan 2025 18:57:00 +0100 Subject: [PATCH 205/210] test: add `onUnhandledRequest` default behavior test --- .../on-unhandled-request-default.test.ts | 78 +++++++++++++++++-- 1 file changed, 70 insertions(+), 8 deletions(-) diff --git a/test/node/msw-api/setup-remote-server/on-unhandled-request-default.test.ts b/test/node/msw-api/setup-remote-server/on-unhandled-request-default.test.ts index 96eb940e6..7e15b1fc9 100644 --- a/test/node/msw-api/setup-remote-server/on-unhandled-request-default.test.ts +++ b/test/node/msw-api/setup-remote-server/on-unhandled-request-default.test.ts @@ -1,11 +1,16 @@ // @vitest-environment node -import { HttpResponse, http } from 'msw' +import { http } from 'msw' import { setupRemoteServer } from 'msw/node' import { spawnTestApp } from './utils' const remote = setupRemoteServer() beforeAll(async () => { + /** + * @note Console warnings from the app's context are forwarded + * as `console.error`. Ignore those for this test. + */ + vi.spyOn(console, 'error').mockImplementation(() => {}) vi.spyOn(console, 'warn').mockImplementation(() => {}) await remote.listen() }) @@ -25,23 +30,80 @@ it( remote.boundary(async () => { await using testApp = await spawnTestApp(require.resolve('./use.app.js')) - await fetch(new URL('/resource', testApp.url)) + // Hit a special endpoint that will perform a request to "Location" + // in the application's context. Neither party handles this request. + await fetch(new URL('/proxy', testApp.url), { + headers: { + location: 'http://localhost/unhandled', + }, + }) + + // Awaiting the unhandled life-cycle event from the app process takes time. + await vi.waitFor(() => { + // Must print a warning since nobody has handled the request. + expect(console.warn).toHaveBeenCalledWith(`\ +[MSW] Warning: intercepted a request without a matching request handler: + + • GET http://localhost/unhandled - // Must print a warning since nobody has handled the request. - expect(console.warn).toHaveBeenCalledWith('') +If you still wish to intercept this unhandled request, please create a request handler for it. +Read more: https://mswjs.io/docs/getting-started/mocks`) + }) }), ) it( - 'does not warn on the request not handled here but handled there', + 'does not warn on the request handled here', remote.boundary(async () => { - throw new Error('Complete this') + remote.use( + http.get('http://localhost/handled', () => { + return new Response('handled') + }), + ) await using testApp = await spawnTestApp(require.resolve('./use.app.js')) + // Hit a special endpoint that will perform a request to "Location" + // in the application's context. Neither party handles this request. + await fetch(new URL('/proxy', testApp.url), { + headers: { + location: 'http://localhost/handled', + }, + }) + + const unhandledWarningPromise = vi.waitFor(() => { + expect(console.warn).toHaveBeenCalledWith(`\ +[MSW] Warning: intercepted a request without a matching request handler: + +• GET http://localhost/handled + +If you still wish to intercept this unhandled request, please create a request handler for it. +Read more: https://mswjs.io/docs/getting-started/mocks`) + }) + + await expect(unhandledWarningPromise).rejects.toThrow() + expect(console.warn).not.toHaveBeenCalled() + }), +) + +it( + 'does not warn on the request not handled here but handled there', + remote.boundary(async () => { + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) + await fetch(new URL('/resource', testApp.url)) - // Must print a warning since nobody has handled the request. - expect(console.warn).toHaveBeenCalledWith('') + const unhandledWarningPromise = vi.waitFor(() => { + expect(console.warn).toHaveBeenCalledWith(`\ +[MSW] Warning: intercepted a request without a matching request handler: + +• GET https://example.com/resource + +If you still wish to intercept this unhandled request, please create a request handler for it. +Read more: https://mswjs.io/docs/getting-started/mocks`) + }) + + await expect(unhandledWarningPromise).rejects.toThrow() + expect(console.warn).not.toHaveBeenCalled() }), ) From b22d00c00ecb904f740a61a14c2a739725cb522b Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 9 Jan 2025 19:05:26 +0100 Subject: [PATCH 206/210] fix(node): export `ListenOptions` --- src/node/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/node/index.ts b/src/node/index.ts index df0fcff78..363da30a6 100644 --- a/src/node/index.ts +++ b/src/node/index.ts @@ -1,4 +1,4 @@ -export type { SetupServer } from './glossary' +export type { SetupServer, ListenOptions } from './glossary' export { SetupServerApi } from './SetupServerApi' export { setupServer } from './setupServer' export { From b0b038126b04801b9db2e8ec881105f69ae94b7e Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 9 Jan 2025 19:05:32 +0100 Subject: [PATCH 207/210] test: add warn/error/bypass `onUnhandledRequest` tests --- .../on-unhandled-request-bypass.test.ts | 108 ++++++++++++++++++ .../on-unhandled-request-error.test.ts | 100 ++++++++++++++++ .../on-unhandled-request-warn.test.ts | 105 +++++++++++++++++ .../msw-api/setup-remote-server/use.app.js | 5 + .../node/msw-api/setup-remote-server/utils.ts | 8 +- 5 files changed, 324 insertions(+), 2 deletions(-) create mode 100644 test/node/msw-api/setup-remote-server/on-unhandled-request-bypass.test.ts create mode 100644 test/node/msw-api/setup-remote-server/on-unhandled-request-error.test.ts create mode 100644 test/node/msw-api/setup-remote-server/on-unhandled-request-warn.test.ts diff --git a/test/node/msw-api/setup-remote-server/on-unhandled-request-bypass.test.ts b/test/node/msw-api/setup-remote-server/on-unhandled-request-bypass.test.ts new file mode 100644 index 000000000..52d712b48 --- /dev/null +++ b/test/node/msw-api/setup-remote-server/on-unhandled-request-bypass.test.ts @@ -0,0 +1,108 @@ +// @vitest-environment node +import { http } from 'msw' +import { setupRemoteServer } from 'msw/node' +import { spawnTestApp } from './utils' + +const remote = setupRemoteServer() + +beforeAll(async () => { + vi.spyOn(console, 'error').mockImplementation(() => {}) + await remote.listen({ + onUnhandledRequest: 'bypass', + }) +}) + +afterEach(() => { + remote.resetHandlers() +}) + +afterAll(async () => { + vi.restoreAllMocks() + await remote.close() +}) + +it( + 'does not error on the request not handled here and there', + remote.boundary(async () => { + await using testApp = await spawnTestApp(require.resolve('./use.app.js'), { + onUnhandledRequest: 'bypass', + }) + + await fetch(new URL('/proxy', testApp.url), { + headers: { + location: 'http://localhost/unhandled', + }, + }) + + const unhandledErrorPromise = vi.waitFor(() => { + expect(console.error).toHaveBeenCalledWith(`\ +[MSW] Error: intercepted a request without a matching request handler: + + • GET http://localhost/unhandled + +If you still wish to intercept this unhandled request, please create a request handler for it. +Read more: https://mswjs.io/docs/getting-started/mocks`) + }) + + await expect(unhandledErrorPromise).rejects.toThrow() + expect(console.error).not.toHaveBeenCalled() + }), +) + +it( + 'does not error on the request handled here', + remote.boundary(async () => { + remote.use( + http.get('http://localhost/handled', () => { + return new Response('handled') + }), + ) + + await using testApp = await spawnTestApp(require.resolve('./use.app.js'), { + onUnhandledRequest: 'bypass', + }) + + await fetch(new URL('/proxy', testApp.url), { + headers: { + location: 'http://localhost/handled', + }, + }) + + const unhandledErrorPromise = vi.waitFor(() => { + expect(console.error).toHaveBeenCalledWith(`\ +[MSW] Error: intercepted a request without a matching request handler: + +• GET http://localhost/handled + +If you still wish to intercept this unhandled request, please create a request handler for it. +Read more: https://mswjs.io/docs/getting-started/mocks`) + }) + + await expect(unhandledErrorPromise).rejects.toThrow() + expect(console.error).not.toHaveBeenCalled() + }), +) + +it( + 'does not error on the request handled there', + remote.boundary(async () => { + await using testApp = await spawnTestApp(require.resolve('./use.app.js'), { + onUnhandledRequest: 'bypass', + }) + + await fetch(new URL('/resource', testApp.url)) + + const unhandledErrorPromise = vi.waitFor(() => { + expect(console.error).toHaveBeenCalledWith(`\ +[MSW] Error: intercepted a request without a matching request handler: + +• GET https://example.com/resource + +If you still wish to intercept this unhandled request, please create a request handler for it. +Read more: https://mswjs.io/docs/getting-started/mocks`) + }) + + await expect(unhandledErrorPromise).rejects.toThrow() + expect(console.error).not.toHaveBeenCalled() + }), +) diff --git a/test/node/msw-api/setup-remote-server/on-unhandled-request-error.test.ts b/test/node/msw-api/setup-remote-server/on-unhandled-request-error.test.ts new file mode 100644 index 000000000..a266465a6 --- /dev/null +++ b/test/node/msw-api/setup-remote-server/on-unhandled-request-error.test.ts @@ -0,0 +1,100 @@ +// @vitest-environment node +import { http } from 'msw' +import { setupRemoteServer } from 'msw/node' +import { spawnTestApp } from './utils' + +const remote = setupRemoteServer() + +beforeAll(async () => { + vi.spyOn(console, 'error').mockImplementation(() => {}) + await remote.listen({ + onUnhandledRequest: 'error', + }) +}) + +afterEach(() => { + vi.clearAllMocks() + remote.resetHandlers() +}) + +afterAll(async () => { + vi.restoreAllMocks() + await remote.close() +}) + +it( + 'errors on the request not handled here and there', + remote.boundary(async () => { + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) + + await fetch(new URL('/proxy', testApp.url), { + headers: { + location: 'http://localhost/unhandled', + }, + }) + + await vi.waitFor(() => { + expect(console.error).toHaveBeenCalledWith(`\ +[MSW] Error: intercepted a request without a matching request handler: + + • GET http://localhost/unhandled + +If you still wish to intercept this unhandled request, please create a request handler for it. +Read more: https://mswjs.io/docs/getting-started/mocks`) + }) + }), +) + +it( + 'does not error on the request handled here', + remote.boundary(async () => { + remote.use( + http.get('http://localhost/handled', () => { + return new Response('handled') + }), + ) + + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) + + await fetch(new URL('/proxy', testApp.url), { + headers: { + location: 'http://localhost/handled', + }, + }) + + const unhandledErrorPromise = vi.waitFor(() => { + expect(console.error).toHaveBeenCalledWith(`\ +[MSW] Error: intercepted a request without a matching request handler: + +• GET http://localhost/handled + +If you still wish to intercept this unhandled request, please create a request handler for it. +Read more: https://mswjs.io/docs/getting-started/mocks`) + }) + + await expect(unhandledErrorPromise).rejects.toThrow() + expect(console.error).not.toHaveBeenCalled() + }), +) + +it( + 'does not error on the request handled there', + remote.boundary(async () => { + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) + + await fetch(new URL('/resource', testApp.url)) + + const unhandledErrorPromise = vi.waitFor(() => { + expect(console.error).toHaveBeenCalledWith(`\ +[MSW] Error: intercepted a request without a matching request handler: + +• GET https://example.com/resource + +If you still wish to intercept this unhandled request, please create a request handler for it. +Read more: https://mswjs.io/docs/getting-started/mocks`) + }) + + await expect(unhandledErrorPromise).rejects.toThrow() + expect(console.error).not.toHaveBeenCalled() + }), +) diff --git a/test/node/msw-api/setup-remote-server/on-unhandled-request-warn.test.ts b/test/node/msw-api/setup-remote-server/on-unhandled-request-warn.test.ts new file mode 100644 index 000000000..c7502e597 --- /dev/null +++ b/test/node/msw-api/setup-remote-server/on-unhandled-request-warn.test.ts @@ -0,0 +1,105 @@ +// @vitest-environment node +import { http } from 'msw' +import { setupRemoteServer } from 'msw/node' +import { spawnTestApp } from './utils' + +const remote = setupRemoteServer() + +beforeAll(async () => { + /** + * @note Console warnings from the app's context are forwarded + * as `console.error`. Ignore those for this test. + */ + vi.spyOn(console, 'error').mockImplementation(() => {}) + vi.spyOn(console, 'warn').mockImplementation(() => {}) + await remote.listen({ + onUnhandledRequest: 'warn', + }) +}) + +afterEach(() => { + vi.clearAllMocks() + remote.resetHandlers() +}) + +afterAll(async () => { + vi.restoreAllMocks() + await remote.close() +}) + +it( + 'warns on the request not handled here and there', + remote.boundary(async () => { + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) + + await fetch(new URL('/proxy', testApp.url), { + headers: { + location: 'http://localhost/unhandled', + }, + }) + + await vi.waitFor(() => { + expect(console.warn).toHaveBeenCalledWith(`\ +[MSW] Warning: intercepted a request without a matching request handler: + + • GET http://localhost/unhandled + +If you still wish to intercept this unhandled request, please create a request handler for it. +Read more: https://mswjs.io/docs/getting-started/mocks`) + }) + }), +) + +it( + 'does not warn on the request handled here', + remote.boundary(async () => { + remote.use( + http.get('http://localhost/handled', () => { + return new Response('handled') + }), + ) + + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) + + await fetch(new URL('/proxy', testApp.url), { + headers: { + location: 'http://localhost/handled', + }, + }) + + const unhandledWarningPromise = vi.waitFor(() => { + expect(console.warn).toHaveBeenCalledWith(`\ +[MSW] Warning: intercepted a request without a matching request handler: + +• GET http://localhost/handled + +If you still wish to intercept this unhandled request, please create a request handler for it. +Read more: https://mswjs.io/docs/getting-started/mocks`) + }) + + await expect(unhandledWarningPromise).rejects.toThrow() + expect(console.warn).not.toHaveBeenCalled() + }), +) + +it( + 'does not warn on the request handled there', + remote.boundary(async () => { + await using testApp = await spawnTestApp(require.resolve('./use.app.js')) + + await fetch(new URL('/resource', testApp.url)) + + const unhandledWarningPromise = vi.waitFor(() => { + expect(console.warn).toHaveBeenCalledWith(`\ +[MSW] Warning: intercepted a request without a matching request handler: + +• GET https://example.com/resource + +If you still wish to intercept this unhandled request, please create a request handler for it. +Read more: https://mswjs.io/docs/getting-started/mocks`) + }) + + await expect(unhandledWarningPromise).rejects.toThrow() + expect(console.warn).not.toHaveBeenCalled() + }), +) diff --git a/test/node/msw-api/setup-remote-server/use.app.js b/test/node/msw-api/setup-remote-server/use.app.js index d74266fca..ee623085d 100644 --- a/test/node/msw-api/setup-remote-server/use.app.js +++ b/test/node/msw-api/setup-remote-server/use.app.js @@ -3,6 +3,8 @@ const express = require('express') const { http, HttpResponse } = require('msw') const { setupServer } = require('msw/node') +const { SETUP_SERVER_LISTEN_OPTIONS } = process.env + // Enable API mocking as usual. const server = setupServer( http.get('https://example.com/resource', () => { @@ -11,6 +13,9 @@ const server = setupServer( ) server.listen({ + ...(SETUP_SERVER_LISTEN_OPTIONS + ? JSON.parse(SETUP_SERVER_LISTEN_OPTIONS) + : {}), remote: { enabled: true, }, diff --git a/test/node/msw-api/setup-remote-server/utils.ts b/test/node/msw-api/setup-remote-server/utils.ts index 1be18d239..6f975e484 100644 --- a/test/node/msw-api/setup-remote-server/utils.ts +++ b/test/node/msw-api/setup-remote-server/utils.ts @@ -1,9 +1,12 @@ import { invariant } from 'outvariant' import { ChildProcess, spawn } from 'child_process' import { DeferredPromise } from '@open-draft/deferred-promise' -import { getRemoteEnvironment } from 'msw/node' +import { type ListenOptions, getRemoteEnvironment } from 'msw/node' -export async function spawnTestApp(appSourcePath: string) { +export async function spawnTestApp( + appSourcePath: string, + listenOptions: Partial = {}, +) { let url: string | undefined const spawnPromise = new DeferredPromise().then((resolvedUrl) => { url = resolvedUrl @@ -18,6 +21,7 @@ export async function spawnTestApp(appSourcePath: string) { env: { ...process.env, ...getRemoteEnvironment(), + SETUP_SERVER_LISTEN_OPTIONS: JSON.stringify(listenOptions), }, }) From 61c8fe78dc74cf865ef22029d258fe4bd5785623 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 9 Jan 2025 19:17:16 +0100 Subject: [PATCH 208/210] test: add custom callback `onUnhandledRequest` test --- .../on-unhandled-request-callback.test.ts | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 test/node/msw-api/setup-remote-server/on-unhandled-request-callback.test.ts diff --git a/test/node/msw-api/setup-remote-server/on-unhandled-request-callback.test.ts b/test/node/msw-api/setup-remote-server/on-unhandled-request-callback.test.ts new file mode 100644 index 000000000..92d6a5334 --- /dev/null +++ b/test/node/msw-api/setup-remote-server/on-unhandled-request-callback.test.ts @@ -0,0 +1,90 @@ +// @vitest-environment node +import { http } from 'msw' +import { setupRemoteServer } from 'msw/node' +import { spawnTestApp } from './utils' + +const remote = setupRemoteServer() +const onUnhandledRequestCallback = vi.fn() + +beforeAll(async () => { + vi.spyOn(console, 'warn').mockImplementation(() => {}) + await remote.listen({ + onUnhandledRequest: onUnhandledRequestCallback, + }) +}) + +afterEach(() => { + vi.clearAllMocks() + remote.resetHandlers() +}) + +afterAll(async () => { + vi.restoreAllMocks() + await remote.close() +}) + +it( + 'calls the custom callback on the request not handled here and there', + remote.boundary(async () => { + await using testApp = await spawnTestApp(require.resolve('./use.app.js'), { + onUnhandledRequest: 'bypass', + }) + + await fetch(new URL('/proxy', testApp.url), { + headers: { + location: 'http://localhost/unhandled', + }, + }) + + await vi.waitFor(() => { + expect(onUnhandledRequestCallback).toHaveBeenCalledOnce() + }) + expect(console.warn).not.toHaveBeenCalled() + }), +) + +it( + 'does not call the custom callback on the request handled here', + remote.boundary(async () => { + remote.use( + http.get('http://localhost/handled', () => { + return new Response('handled') + }), + ) + + await using testApp = await spawnTestApp(require.resolve('./use.app.js'), { + onUnhandledRequest: 'bypass', + }) + + await fetch(new URL('/proxy', testApp.url), { + headers: { + location: 'http://localhost/handled', + }, + }) + + const unhandledCallbackPromise = vi.waitFor(() => { + expect(onUnhandledRequestCallback).toHaveBeenCalledOnce() + }) + + await expect(unhandledCallbackPromise).rejects.toThrow() + expect(console.warn).not.toHaveBeenCalled() + }), +) + +it( + 'does not call the custom callback on the request handled there', + remote.boundary(async () => { + await using testApp = await spawnTestApp(require.resolve('./use.app.js'), { + onUnhandledRequest: 'bypass', + }) + + await fetch(new URL('/resource', testApp.url)) + + const unhandledCallbackPromise = vi.waitFor(() => { + expect(onUnhandledRequestCallback).toHaveBeenCalledOnce() + }) + + await expect(unhandledCallbackPromise).rejects.toThrow() + expect(console.warn).not.toHaveBeenCalled() + }), +) From bc0e0a7a3baecf329e1fe65f27e585e7fcc2c096 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 9 Jan 2025 19:28:06 +0100 Subject: [PATCH 209/210] chore: move `spyOnLifeCycleEvents` to node utils --- .../life-cycle-event-forwarding.node.test.ts | 79 +++------------- .../node/msw-api/setup-remote-server/utils.ts | 89 +------------------ .../ignore-internal-requests.test.ts | 4 +- test/node/utils.ts | 58 ++++++++++++ test/support/utils.ts | 22 ----- 5 files changed, 72 insertions(+), 180 deletions(-) create mode 100644 test/node/utils.ts diff --git a/test/node/msw-api/setup-remote-server/life-cycle-event-forwarding.node.test.ts b/test/node/msw-api/setup-remote-server/life-cycle-event-forwarding.node.test.ts index cd14fe332..9831e88ba 100644 --- a/test/node/msw-api/setup-remote-server/life-cycle-event-forwarding.node.test.ts +++ b/test/node/msw-api/setup-remote-server/life-cycle-event-forwarding.node.test.ts @@ -1,8 +1,8 @@ // @vitest-environment node -import { http, HttpResponse, SetupApi, LifeCycleEventsMap } from 'msw' +import { http, HttpResponse } from 'msw' import { setupRemoteServer } from 'msw/node' -import { DeferredPromise } from '@open-draft/deferred-promise' import { HttpServer } from '@open-draft/test-server/http' +import { spyOnLifeCycleEvents } from '../../utils' import { spawnTestApp } from './utils' const remote = setupRemoteServer() @@ -13,63 +13,6 @@ const httpServer = new HttpServer((app) => { }) }) -function spyOnLifeCycleEvents(setupApi: SetupApi) { - const listener = vi.fn() - const requestIdPromise = new DeferredPromise() - - setupApi.events - .on('request:start', ({ request, requestId }) => { - if (request.headers.has('upgrade')) { - return - } - - requestIdPromise.resolve(requestId) - listener(`[request:start] ${request.method} ${request.url} ${requestId}`) - }) - .on('request:match', ({ request, requestId }) => { - listener(`[request:match] ${request.method} ${request.url} ${requestId}`) - }) - .on('request:unhandled', ({ request, requestId }) => { - listener( - `[request:unhandled] ${request.method} ${request.url} ${requestId}`, - ) - }) - .on('request:end', ({ request, requestId }) => { - if (request.headers.has('upgrade')) { - return - } - - listener(`[request:end] ${request.method} ${request.url} ${requestId}`) - }) - - setupApi.events - .on('response:mocked', async ({ response, request, requestId }) => { - listener( - `[response:mocked] ${request.method} ${request.url} ${requestId} ${ - response.status - } ${await response.clone().text()}`, - ) - }) - .on('response:bypass', async ({ response, request, requestId }) => { - if (request.headers.has('upgrade')) { - return - } - - listener( - `[response:bypass] ${request.method} ${request.url} ${requestId} ${ - response.status - } ${await response.clone().text()}`, - ) - }) - - return { - listener, - waitForRequestId() { - return requestIdPromise - }, - } -} - beforeAll(async () => { await remote.listen() await httpServer.listen() @@ -90,15 +33,15 @@ it( ) await using testApp = await spawnTestApp(require.resolve('./use.app.js')) - const { listener, waitForRequestId } = spyOnLifeCycleEvents(remote) + const { listener, requestIdPromise } = spyOnLifeCycleEvents(remote) const response = await fetch(new URL('/resource', testApp.url)) - const requestId = await waitForRequestId() + const requestId = await requestIdPromise // Must respond with the mocked response defined in the test. expect(response.status).toBe(200) expect(response.statusText).toBe('OK') - expect(await response.json()).toEqual({ mocked: true }) + await expect(response.json()).resolves.toEqual({ mocked: true }) // Must forward the life-cycle events to the test process. await vi.waitFor(() => { @@ -118,14 +61,14 @@ it( 'emits correct events for the request handled in the remote process', remote.boundary(async () => { await using testApp = await spawnTestApp(require.resolve('./use.app.js')) - const { listener, waitForRequestId } = spyOnLifeCycleEvents(remote) + const { listener, requestIdPromise } = spyOnLifeCycleEvents(remote) const response = await fetch(new URL('/resource', testApp.url)) - const requestId = await waitForRequestId() + const requestId = await requestIdPromise expect(response.status).toBe(200) expect(response.statusText).toBe('OK') - expect(await response.json()).toEqual([1, 2, 3]) + await expect(response.json()).resolves.toEqual([1, 2, 3]) await vi.waitFor(() => { expect(listener.mock.calls).toEqual([ @@ -144,17 +87,17 @@ it( 'emits correct events for the request unhandled by either parties', remote.boundary(async () => { await using testApp = await spawnTestApp(require.resolve('./use.app.js')) - const { listener, waitForRequestId } = spyOnLifeCycleEvents(remote) + const { listener, requestIdPromise } = spyOnLifeCycleEvents(remote) const resourceUrl = httpServer.http.url('/greeting') // Request a special route in the running app that performs a proxy request // to the resource specified in the "Location" request header. const response = await fetch(new URL('/proxy', testApp.url), { headers: { - Location: resourceUrl, + location: resourceUrl, }, }) - const requestId = await waitForRequestId() + const requestId = await requestIdPromise expect(response.status).toBe(200) expect(response.statusText).toBe('OK') diff --git a/test/node/msw-api/setup-remote-server/utils.ts b/test/node/msw-api/setup-remote-server/utils.ts index 6f975e484..c5ed36f70 100644 --- a/test/node/msw-api/setup-remote-server/utils.ts +++ b/test/node/msw-api/setup-remote-server/utils.ts @@ -1,5 +1,5 @@ import { invariant } from 'outvariant' -import { ChildProcess, spawn } from 'child_process' +import { spawn } from 'child_process' import { DeferredPromise } from '@open-draft/deferred-promise' import { type ListenOptions, getRemoteEnvironment } from 'msw/node' @@ -83,90 +83,3 @@ export async function spawnTestApp( }, } } - -// -// -// - -export class TestNodeApp { - private io: ChildProcess = null as any - private _url: URL | null = null - - constructor( - private readonly appSourcePath: string, - private readonly options?: { contextId: string }, - ) {} - - get url() { - invariant( - this._url, - 'Failed to return the URL for the test Node app: the app is not running. Did you forget to call ".spawn()"?', - ) - - return this._url - } - - public async start(): Promise { - const spawnPromise = new DeferredPromise() - - this.io = spawn('node', [this.appSourcePath], { - // Establish an IPC between the test and the test app. - // This IPC is not required for the remote interception to work. - // This IPC is required for the test app to be spawned at a random port - // and be able to communicate the port back to the test. - stdio: ['pipe', 'pipe', 'pipe', 'ipc'], - env: { - ...process.env, - MSW_REMOTE_CONTEXT_ID: this.options?.contextId, - }, - }) - - this.io.stdout?.on('data', (c) => console.log(c.toString())) - this.io.stderr?.on('data', (c) => console.error(c.toString())) - - this.io - .on('message', (message) => { - try { - const url = new URL(message.toString()) - spawnPromise.resolve(url) - } catch (error) { - return - } - }) - .on('error', (error) => spawnPromise.reject(error)) - .on('exit', (code) => { - if (code !== 0) { - spawnPromise.reject( - new Error(`Failed to spawn a test Node app (exit code: ${code})`), - ) - } - }) - - spawnPromise.then((url) => { - this._url = url - }) - - return Promise.race([ - spawnPromise, - new Promise((_, reject) => { - setTimeout(() => { - reject(new Error('Failed to spawn a test Node app within timeout')) - }, 5_000) - }), - ]) - } - - public async close() { - const closePromise = new DeferredPromise() - - this.io.send('SIGTERM', (error) => { - if (error) { - closePromise.reject(error) - } else { - closePromise.resolve() - } - }) - - return closePromise - } -} diff --git a/test/node/msw-api/setup-server/life-cycle-events/ignore-internal-requests.test.ts b/test/node/msw-api/setup-server/life-cycle-events/ignore-internal-requests.test.ts index bc9959a17..c9341310b 100644 --- a/test/node/msw-api/setup-server/life-cycle-events/ignore-internal-requests.test.ts +++ b/test/node/msw-api/setup-server/life-cycle-events/ignore-internal-requests.test.ts @@ -1,6 +1,6 @@ // @vitest-environment node import { setupServer } from 'msw/node' -import { spyOnLifeCycleEvents } from '../../../../support/utils' +import { spyOnLifeCycleEvents } from '../../../utils' const server = setupServer() @@ -27,7 +27,7 @@ afterAll(() => { }) it('does not emit life-cycle events for internal requests', async () => { - const listener = spyOnLifeCycleEvents(server) + const { listener } = spyOnLifeCycleEvents(server) // Must emit no life-cycle events for internal requests. expect(listener).not.toHaveBeenCalled() diff --git a/test/node/utils.ts b/test/node/utils.ts new file mode 100644 index 000000000..84c64843c --- /dev/null +++ b/test/node/utils.ts @@ -0,0 +1,58 @@ +import { DeferredPromise } from '@open-draft/deferred-promise' +import { vi, afterEach } from 'vitest' +import { LifeCycleEventsMap, SetupApi } from 'msw' + +export function spyOnLifeCycleEvents(api: SetupApi) { + const listener = vi.fn() + const requestIdPromise = new DeferredPromise() + + afterEach(() => listener.mockReset()) + + api.events + .on('request:start', ({ request, requestId }) => { + if (request.headers.has('upgrade')) { + return + } + + requestIdPromise.resolve(requestId) + listener(`[request:start] ${request.method} ${request.url} ${requestId}`) + }) + .on('request:match', ({ request, requestId }) => { + listener(`[request:match] ${request.method} ${request.url} ${requestId}`) + }) + .on('request:unhandled', ({ request, requestId }) => { + listener( + `[request:unhandled] ${request.method} ${request.url} ${requestId}`, + ) + }) + .on('request:end', ({ request, requestId }) => { + if (request.headers.has('upgrade')) { + return + } + + listener(`[request:end] ${request.method} ${request.url} ${requestId}`) + }) + .on('response:mocked', async ({ response, request, requestId }) => { + listener( + `[response:mocked] ${request.method} ${request.url} ${requestId} ${ + response.status + } ${await response.clone().text()}`, + ) + }) + .on('response:bypass', async ({ response, request, requestId }) => { + if (request.headers.has('upgrade')) { + return + } + + listener( + `[response:bypass] ${request.method} ${request.url} ${requestId} ${ + response.status + } ${await response.clone().text()}`, + ) + }) + + return { + listener, + requestIdPromise, + } +} diff --git a/test/support/utils.ts b/test/support/utils.ts index 549d32826..19d826a48 100644 --- a/test/support/utils.ts +++ b/test/support/utils.ts @@ -1,7 +1,5 @@ import * as path from 'node:path' import { ClientRequest, IncomingMessage } from 'node:http' -import { vi, afterEach } from 'vitest' -import { LifeCycleEventsMap, SetupApi } from 'msw' export function sleep(duration: number) { return new Promise((resolve) => { @@ -46,23 +44,3 @@ export async function waitForClientRequest(request: ClientRequest): Promise<{ }) }) } - -export function spyOnLifeCycleEvents(api: SetupApi) { - const listener = vi.fn() - afterEach(() => listener.mockReset()) - - const wrapListener = (eventName: string) => { - return (...args: Array) => listener(eventName, ...args) - } - - api.events - .on('request:start', wrapListener('request:start')) - .on('request:match', wrapListener('request:match')) - .on('request:unhandled', wrapListener('request:unhandled')) - .on('request:end', wrapListener('request:end')) - .on('response:mocked', wrapListener('response:mocked')) - .on('response:bypass', wrapListener('response:bypass')) - .on('unhandledException', wrapListener('unhandledException')) - - return listener -} From 3c76156efe769f6d9406314909e82070f90d8649 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 10 Jan 2025 19:06:55 +0100 Subject: [PATCH 210/210] fix: set "duplex" to "half" when handling requests --- src/node/setupRemoteServer.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/node/setupRemoteServer.ts b/src/node/setupRemoteServer.ts index f86bb0f72..f7dfcc166 100644 --- a/src/node/setupRemoteServer.ts +++ b/src/node/setupRemoteServer.ts @@ -174,6 +174,8 @@ export class SetupRemoteServerApi incoming.method !== 'HEAD' && incoming.method !== 'GET' ? (Readable.toWeb(incoming) as ReadableStream) : null, + // @ts-expect-error Missing Node.js types. + duplex: 'half' }) for (const headerName in incoming.headersDistinct) {