From ded1309963732792b75d073441579dab43062e86 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 7 Oct 2022 19:55:08 +0200 Subject: [PATCH 001/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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/180] 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 b25655c323affb266fabf5bf00fc1e7d928a0992 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 9 Jun 2023 13:26:49 +0200 Subject: [PATCH 132/180] 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 133/180] 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 134/180] 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 140/180] 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 141/180] 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 142/180] 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 143/180] 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 144/180] 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 145/180] 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 146/180] 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 147/180] 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 148/180] 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 149/180] 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 150/180] 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 151/180] 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 152/180] 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 153/180] 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 154/180] 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 155/180] 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 156/180] 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 07635577a533e076a2a0d6106efe1d57a0fed0d5 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 16 Sep 2023 18:37:49 +0200 Subject: [PATCH 157/180] chore: upgrade to "headers-polyfill" v4 (#1741) --- package.json | 2 +- pnpm-lock.yaml | 9 +++++++-- src/browser/tsconfig.json | 7 +++++++ src/core/bypass.test.ts | 1 - src/core/bypass.ts | 1 - src/core/handlers/GraphQLHandler.test.ts | 1 - src/core/utils/handleRequest.test.ts | 1 - src/core/utils/internal/parseGraphQLRequest.test.ts | 1 - src/core/utils/logging/serializeRequest.test.ts | 1 - src/core/utils/logging/serializeRequest.ts | 6 ++---- src/core/utils/logging/serializeResponse.ts | 5 ++--- src/core/utils/toResponseInit.ts | 4 +--- test/browser/rest-api/headers-multiple.test.ts | 3 +-- tsconfig.json | 2 +- 14 files changed, 22 insertions(+), 22 deletions(-) create mode 100644 src/browser/tsconfig.json diff --git a/package.json b/package.json index 31dbf8220..578eeda73 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.5", + "headers-polyfill": "^4.0.1", "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 39b0d9b6e..8b05beafa 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.5 + headers-polyfill: ^4.0.1 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.5 + headers-polyfill: 4.0.1 inquirer: 8.2.5 is-node-process: 1.2.0 js-levenshtein: 1.1.6 @@ -6384,6 +6384,11 @@ packages: /headers-polyfill/3.2.5: resolution: {integrity: sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==} + dev: true + + /headers-polyfill/4.0.1: + resolution: {integrity: sha512-CD3yq1U/nwyKZHRFIjESyveXz6Buk0ImoIwlEOEyNVNAqJLjNX3YkJkaH9Mg5rqU5JiVgTBq/6Z0jR1L6KS0Gg==} + dev: false /homedir-polyfill/1.0.3: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} diff --git a/src/browser/tsconfig.json b/src/browser/tsconfig.json new file mode 100644 index 000000000..30d12be0c --- /dev/null +++ b/src/browser/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "lib": ["dom", "WebWorker"] + }, + "include": ["./**/*.ts"] +} diff --git a/src/core/bypass.test.ts b/src/core/bypass.test.ts index a4de4d595..b69110b42 100644 --- a/src/core/bypass.test.ts +++ b/src/core/bypass.test.ts @@ -1,7 +1,6 @@ /** * @jest-environment jsdom */ -import { Headers } from 'headers-polyfill' import { bypass } from './bypass' it('returns bypassed request given a request url string', async () => { diff --git a/src/core/bypass.ts b/src/core/bypass.ts index 3e37866d3..c8562511f 100644 --- a/src/core/bypass.ts +++ b/src/core/bypass.ts @@ -1,5 +1,4 @@ import { invariant } from 'outvariant' -import { Headers } from 'headers-polyfill' export type BypassRequestInput = string | URL | Request diff --git a/src/core/handlers/GraphQLHandler.test.ts b/src/core/handlers/GraphQLHandler.test.ts index f81df17c2..592d82575 100644 --- a/src/core/handlers/GraphQLHandler.test.ts +++ b/src/core/handlers/GraphQLHandler.test.ts @@ -3,7 +3,6 @@ */ import { encodeBuffer } from '@mswjs/interceptors' import { OperationTypeNode, parse } from 'graphql' -import { Headers } from 'headers-polyfill' import { GraphQLHandler, GraphQLRequestBody, diff --git a/src/core/utils/handleRequest.test.ts b/src/core/utils/handleRequest.test.ts index 5c5b7c613..159f44b3e 100644 --- a/src/core/utils/handleRequest.test.ts +++ b/src/core/utils/handleRequest.test.ts @@ -1,7 +1,6 @@ /** * @jest-environment jsdom */ -import { Headers } from 'headers-polyfill' import { Emitter } from 'strict-event-emitter' import { LifeCycleEventsMap, SharedOptions } from '../sharedOptions' import { RequestHandler } from '../handlers/RequestHandler' diff --git a/src/core/utils/internal/parseGraphQLRequest.test.ts b/src/core/utils/internal/parseGraphQLRequest.test.ts index d2a4564b3..7bb624d96 100644 --- a/src/core/utils/internal/parseGraphQLRequest.test.ts +++ b/src/core/utils/internal/parseGraphQLRequest.test.ts @@ -3,7 +3,6 @@ */ import { encodeBuffer } from '@mswjs/interceptors' import { OperationTypeNode } from 'graphql' -import { Headers } from 'headers-polyfill' import { ParsedGraphQLRequest, parseGraphQLRequest, diff --git a/src/core/utils/logging/serializeRequest.test.ts b/src/core/utils/logging/serializeRequest.test.ts index 3a964033a..aac41d891 100644 --- a/src/core/utils/logging/serializeRequest.test.ts +++ b/src/core/utils/logging/serializeRequest.test.ts @@ -1,5 +1,4 @@ import { encodeBuffer } from '@mswjs/interceptors' -import { Headers } from 'headers-polyfill' import { serializeRequest } from './serializeRequest' test('serializes given Request instance into a plain object', async () => { diff --git a/src/core/utils/logging/serializeRequest.ts b/src/core/utils/logging/serializeRequest.ts index f0e5d9780..a2c2afd01 100644 --- a/src/core/utils/logging/serializeRequest.ts +++ b/src/core/utils/logging/serializeRequest.ts @@ -1,9 +1,7 @@ -import { HeadersObject, headersToObject } from 'headers-polyfill' - export interface LoggedRequest { url: URL method: string - headers: HeadersObject + headers: Record body: string } @@ -19,7 +17,7 @@ export async function serializeRequest( return { url: new URL(request.url), method: request.method, - headers: headersToObject(request.headers), + headers: Object.fromEntries(request.headers.entries()), body: requestText, } } diff --git a/src/core/utils/logging/serializeResponse.ts b/src/core/utils/logging/serializeResponse.ts index 4b0e4034d..754dbd32e 100644 --- a/src/core/utils/logging/serializeResponse.ts +++ b/src/core/utils/logging/serializeResponse.ts @@ -1,12 +1,11 @@ import statuses from '@bundled-es-modules/statuses' -import { HeadersObject, headersToObject } from 'headers-polyfill' const { message } = statuses export interface SerializedResponse { status: number statusText: string - headers: HeadersObject + headers: Record body: string } @@ -26,7 +25,7 @@ export async function serializeResponse( return { status: responseStatus, statusText: responseStatusText, - headers: headersToObject(responseClone.headers), + headers: Object.fromEntries(responseClone.headers.entries()), body: responseText, } } diff --git a/src/core/utils/toResponseInit.ts b/src/core/utils/toResponseInit.ts index 986ad0fc7..e7e6f9a7a 100644 --- a/src/core/utils/toResponseInit.ts +++ b/src/core/utils/toResponseInit.ts @@ -1,9 +1,7 @@ -import { flattenHeadersObject, headersToObject } from 'headers-polyfill' - export function toResponseInit(response: Response): ResponseInit { return { status: response.status, statusText: response.statusText, - headers: flattenHeadersObject(headersToObject(response.headers)), + headers: Object.fromEntries(response.headers.entries()), } } diff --git a/test/browser/rest-api/headers-multiple.test.ts b/test/browser/rest-api/headers-multiple.test.ts index 78410fd8e..3d5d0ddb3 100644 --- a/test/browser/rest-api/headers-multiple.test.ts +++ b/test/browser/rest-api/headers-multiple.test.ts @@ -1,4 +1,3 @@ -import { Headers } from 'headers-polyfill' import { test, expect } from '../playwright.extend' const EXAMPLE_PATH = require.resolve('./headers-multiple.mocks.ts') @@ -14,7 +13,7 @@ test('receives all headers from the request header with multiple values', async const res = await fetch('https://test.mswjs.io', { method: 'POST', - headers: headers.all(), + headers: Object.fromEntries(headers.entries()), }) const status = res.status() const body = await res.json() diff --git a/tsconfig.json b/tsconfig.json index e024d9f99..c5e2f59a9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,7 @@ "declaration": true, "declarationDir": "lib/types", "noEmit": true, - "lib": ["es2017", "ESNext.AsyncIterable", "dom", "webworker"], + "lib": ["DOM", "DOM.Iterable", "ESNext.AsyncIterable"], "baseUrl": "./src", "paths": { "~/core": ["./core"], From 8f2b94daf5b53b1596d566e4d37d344599213e64 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sat, 16 Sep 2023 18:46:32 +0200 Subject: [PATCH 158/180] feat: set minimal supported typescript version to 4.7 (#1742) --- .github/workflows/compat.yml | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/compat.yml b/.github/workflows/compat.yml index 85c1a24eb..2cc378ed1 100644 --- a/.github/workflows/compat.yml +++ b/.github/workflows/compat.yml @@ -49,7 +49,7 @@ jobs: strategy: fail-fast: false matrix: - ts: ['4.4', '4.5', '4.6', '4.7', '4.8', '4.9', '5.0', '5.1', '5.2'] + ts: ['4.7', '4.8', '4.9', '5.0', '5.1', '5.2'] steps: - name: Checkout uses: actions/checkout@v3 diff --git a/package.json b/package.json index 578eeda73..c0c7e7689 100644 --- a/package.json +++ b/package.json @@ -189,7 +189,7 @@ "webpack-http-server": "^0.5.0" }, "peerDependencies": { - "typescript": ">= 4.4.x <= 5.2.x" + "typescript": ">= 4.7.x <= 5.2.x" }, "peerDependenciesMeta": { "typescript": { From cbb25fb1d10f800517d0771c710ef6d9e323a5b9 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 20 Sep 2023 14:41:01 +0200 Subject: [PATCH 159/180] fix(bypass): make bypass synchronous (#1745) --- MIGRATING.md | 4 +- src/core/bypass.test.ts | 40 +++++---- src/core/bypass.ts | 89 ++++--------------- .../graphql-api/response-patching.mocks.ts | 3 +- .../rest-api/response-patching.mocks.ts | 26 +++--- .../response-patching.node.test.ts | 3 +- .../scenarios/response-patching..node.test.ts | 17 ++-- 7 files changed, 63 insertions(+), 119 deletions(-) diff --git a/MIGRATING.md b/MIGRATING.md index 5af1b007f..d95dced21 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -489,10 +489,8 @@ import { http, HttpResponse, bypass } from 'msw' export const handlers = [ http.get('/resource', async ({ request }) => { - const fetchArgs = await bypass(request) - // Use the regular "fetch" from your environment. - const originalResponse = await fetch(...fetchArgs) + const originalResponse = await fetch(bypass(request)) const json = await originalResponse.json() // ...handle the original response, maybe return a mocked one. diff --git a/src/core/bypass.test.ts b/src/core/bypass.test.ts index b69110b42..aca432070 100644 --- a/src/core/bypass.test.ts +++ b/src/core/bypass.test.ts @@ -4,20 +4,23 @@ import { bypass } from './bypass' it('returns bypassed request given a request url string', async () => { - const [url, init] = await bypass('/user') - const headers = new Headers(init.headers) + const request = bypass('https://api.example.com/resource') // Relative URLs are rebased against the current location. - expect(url).toBe('/user') - expect(headers.get('x-msw-intention')).toBe('bypass') + expect(request.method).toBe('GET') + expect(request.url).toBe('https://api.example.com/resource') + expect(Object.fromEntries(request.headers.entries())).toEqual({ + 'x-msw-intention': 'bypass', + }) }) 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) + const request = bypass(new URL('/resource', 'https://api.example.com')) - expect(url).toBe('https://api.github.com/user') - expect(headers.get('x-msw-intention')).toBe('bypass') + expect(request.url).toBe('https://api.example.com/resource') + expect(Object.fromEntries(request.headers)).toEqual({ + 'x-msw-intention': 'bypass', + }) }) it('returns bypassed request given request instance', async () => { @@ -28,12 +31,17 @@ it('returns bypassed request given request instance', async () => { }, body: 'hello world', }) - 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(await original.arrayBuffer()) - expect(headers.get('x-msw-intention')).toBe('bypass') - expect(headers.get('x-my-header')).toBe('value') + const request = bypass(original) + + expect(request.method).toBe('POST') + expect(request.url).toBe('http://localhost/resource') + + const bypassedRequestBody = await request.text() + expect(original.bodyUsed).toBe(false) + + expect(bypassedRequestBody).toEqual(await original.text()) + expect(Object.fromEntries(request.headers.entries())).toEqual({ + ...Object.fromEntries(original.headers.entries()), + 'x-msw-intention': 'bypass', + }) }) diff --git a/src/core/bypass.ts b/src/core/bypass.ts index c8562511f..848d79d45 100644 --- a/src/core/bypass.ts +++ b/src/core/bypass.ts @@ -3,89 +3,32 @@ import { invariant } from 'outvariant' 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. + * Creates a `Request` instance that will always be bypassed by MSW. * * @example - * 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'))) + * fetch(bypass('/resource')) + * fetch(bypass(new URL('/resource', 'https://example.com))) + * fetch(bypass(new Request('https://example.com/resource'))) */ -export async function bypass( - input: BypassRequestInput, - init?: 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, - ) - } +export function bypass(input: BypassRequestInput, init?: RequestInit): Request { + const request = input instanceof Request ? input : new Request(input, init) + + invariant( + !request.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.', + request.method, + request.url, + ) - const url = isRequest(input) ? input.url : input.toString() - const resolvedInit: RequestInit = - typeof init !== 'undefined' ? init : await getRequestInit(input) + const requestClone = request.clone() // 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. - const headers = new Headers(resolvedInit.headers) - headers.set('x-msw-intention', 'bypass') - resolvedInit.headers = headers - - return [url, resolvedInit] -} - -function isRequest(input: BypassRequestInput): input is Request { - return ( - typeof input === 'object' && - input.constructor.name === 'Request' && - 'clone' in input && - 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 - } + requestClone.headers.set('x-msw-intention', 'bypass') - return init + return requestClone } diff --git a/test/browser/graphql-api/response-patching.mocks.ts b/test/browser/graphql-api/response-patching.mocks.ts index 03473e939..5db10c3bc 100644 --- a/test/browser/graphql-api/response-patching.mocks.ts +++ b/test/browser/graphql-api/response-patching.mocks.ts @@ -11,8 +11,7 @@ interface GetUserQuery { const worker = setupWorker( graphql.query('GetUser', async ({ request }) => { - const fetchArgs = await bypass(request) - const originalResponse = await fetch(...fetchArgs) + const originalResponse = await fetch(bypass(request)) const originalJson = await originalResponse.json() return HttpResponse.json({ diff --git a/test/browser/rest-api/response-patching.mocks.ts b/test/browser/rest-api/response-patching.mocks.ts index 05643d431..1ca6bccfb 100644 --- a/test/browser/rest-api/response-patching.mocks.ts +++ b/test/browser/rest-api/response-patching.mocks.ts @@ -3,8 +3,7 @@ import { setupWorker } from 'msw/browser' const worker = setupWorker( http.get('*/user', async ({ request }) => { - const fetchArgs = await bypass(request.url) - const originalResponse = await fetch(...fetchArgs) + const originalResponse = await fetch(bypass(request.url)) const body = await originalResponse.json() return HttpResponse.json( @@ -22,8 +21,7 @@ const worker = setupWorker( }), http.get('*/repos/:owner/:repoName', async ({ request }) => { - const fetchArgs = await bypass(request) - const originalResponse = await fetch(...fetchArgs) + const originalResponse = await fetch(bypass(request)) const body = await originalResponse.json() return HttpResponse.json( @@ -41,11 +39,12 @@ const worker = setupWorker( http.get('*/headers', async ({ request }) => { const proxyUrl = new URL('/headers-proxy', request.url) - const fetchArgs = await bypass(proxyUrl, { - method: 'POST', - headers: request.headers, - }) - const originalResponse = await fetch(...fetchArgs) + const originalResponse = await fetch( + bypass(proxyUrl, { + method: 'POST', + headers: request.headers, + }), + ) const body = await originalResponse.json() return HttpResponse.json(body, { @@ -56,8 +55,7 @@ const worker = setupWorker( }), http.post('*/posts', async ({ request }) => { - const fetchArgs = await bypass(request) - const originalResponse = await fetch(...fetchArgs) + const originalResponse = await fetch(bypass(request)) const body = await originalResponse.json() return HttpResponse.json( @@ -75,8 +73,7 @@ const worker = setupWorker( }), http.get('*/posts', async ({ request }) => { - const fetchArgs = await bypass(request) - const originalResponse = await fetch(...fetchArgs) + const originalResponse = await fetch(bypass(request)) const body = await originalResponse.json() return HttpResponse.json( @@ -93,8 +90,7 @@ const worker = setupWorker( }), http.head('*/posts', async ({ request }) => { - const fetchArgs = await bypass(request) - const originalResponse = await fetch(...fetchArgs) + const originalResponse = await fetch(bypass(request)) return HttpResponse.json( { diff --git a/test/node/graphql-api/response-patching.node.test.ts b/test/node/graphql-api/response-patching.node.test.ts index c2d836466..abf349fa7 100644 --- a/test/node/graphql-api/response-patching.node.test.ts +++ b/test/node/graphql-api/response-patching.node.test.ts @@ -9,8 +9,7 @@ import { createGraphQLClient, gql } from '../../support/graphql' const server = setupServer( graphql.query('GetUser', async ({ request }) => { - const requestInfo = await bypass(request) - const originalResponse = await fetch(...requestInfo) + const originalResponse = await fetch(bypass(request)) const { requestHeaders, queryResult } = await originalResponse.json() return HttpResponse.json({ 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 a2814b4ac..0c9891509 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 @@ -21,8 +21,7 @@ interface ResponseBody { const server = setupServer( http.get('https://test.mswjs.io/user', async () => { - const fetchArgs = await bypass(httpServer.http.url('/user')) - const originalResponse = await fetch(...fetchArgs) + const originalResponse = await fetch(bypass(httpServer.http.url('/user'))) const body = await originalResponse.json() return HttpResponse.json({ @@ -34,13 +33,15 @@ const server = setupServer( const url = new URL(request.url) const shouldBypass = url.searchParams.get('bypass') === 'true' - const fetchArgs = await bypass( - new Request(httpServer.http.url('/user'), { - method: 'POST', - }), - ) const performRequest = shouldBypass - ? () => fetch(...fetchArgs).then((res) => res.json()) + ? () => + fetch( + bypass( + new Request(httpServer.http.url('/user'), { + method: 'POST', + }), + ), + ).then((res) => res.json()) : () => fetch('https://httpbin.org/post', { method: 'POST' }).then((res) => res.json(), From 581450fe7be8452758fdabc01cc471daf80b07e3 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 20 Sep 2023 14:43:50 +0200 Subject: [PATCH 160/180] chore(release): v0.0.0-fetch.rc-20 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c0c7e7689..9952a2d21 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-19", + "version": "0.0.0-fetch.rc-20", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/core/index.js", "module": "./lib/core/index.mjs", From 2405bbced27f03bdac56eae24bc7bfae0086b476 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kevin=20=C3=98sterkilde?= Date: Thu, 21 Sep 2023 15:12:12 +0200 Subject: [PATCH 161/180] chore: update MIGRATING.md (#1737) --- MIGRATING.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/MIGRATING.md b/MIGRATING.md index d95dced21..bf0e77f2d 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -72,7 +72,7 @@ The `setupWorker` API, alongside any related type definitions, are no longer exp +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`. +> Note that the request handlers like `http` and `graphql`, as well as the utility functions like `bypass` and `passthrough` must still be imported from the root-level `msw`. ## Response resolver @@ -237,7 +237,7 @@ Relying on a single universal `Response` class will allow you to write request h 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' +import { HttpResponse, http } from 'msw' export const handlers = [ http.get( @@ -286,7 +286,7 @@ export const handlers = [ 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' +import { HttpResponse, http } from 'msw' export const handlers = [ http.post('/user', () => { @@ -353,7 +353,7 @@ export const handlers = [ 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' +import { HttpResponse, http } from 'msw' export const handlers = [ http.get('/resource', () => { @@ -587,7 +587,7 @@ export function augmentResponse(json) { ``` ```js -import { rest } from 'msw' +import { http } from 'msw' import { augmentResponse } from './utils' export const handlers = [ @@ -614,7 +614,7 @@ You can now read the intercepted request body as you would a regular `Request` i For example, this is how you would read the request as `Blob`: ```js -import { rest } from 'msw' +import { http } from 'msw' export const handlers = [ http.get('/resource', async ({ request }) => { @@ -628,7 +628,7 @@ 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 { http, HttpResponse, ReadableStream, delay } from 'msw' +import { http, HttpResponse, delay } from 'msw' http.get('/greeting', () => { const encoder = new TextEncoder() From 96caf8a19d7108f49228e5bc48f79875e88f174e Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 4 Oct 2023 12:02:39 +0200 Subject: [PATCH 162/180] docs: update jsdoc links --- src/browser/setupWorker/glossary.ts | 24 +++++++++--- src/browser/setupWorker/setupWorker.ts | 3 +- src/core/HttpResponse.ts | 8 +++- src/core/bypass.ts | 4 +- src/core/delay.ts | 3 ++ src/core/graphql.test.ts | 2 +- src/core/graphql.ts | 52 +++++++++++++++++++------- src/core/http.ts | 9 +++++ src/core/passthrough.ts | 4 +- src/native/index.ts | 3 +- src/node/glossary.ts | 24 +++++++++--- src/node/setupServer.ts | 3 +- 12 files changed, 107 insertions(+), 32 deletions(-) diff --git a/src/browser/setupWorker/glossary.ts b/src/browser/setupWorker/glossary.ts index cf301f274..9bedc369c 100644 --- a/src/browser/setupWorker/glossary.ts +++ b/src/browser/setupWorker/glossary.ts @@ -204,41 +204,53 @@ export type StopHandler = () => void export interface SetupWorker { /** * Registers and activates the mock Service Worker. - * @see {@link https://mswjs.io/docs/api/setup-worker/start `worker.start()`} + * + * @see {@link https://mswjs.io/docs/api/setup-worker/start `worker.start()` API reference} */ start: (options?: StartOptions) => StartReturnType /** * Stops requests interception for the current client. - * @see {@link https://mswjs.io/docs/api/setup-worker/stop `worker.stop()`} + * + * @see {@link https://mswjs.io/docs/api/setup-worker/stop `worker.stop()` API reference} */ stop: StopHandler /** * Prepends given request handlers to the list of existing handlers. * @param {RequestHandler[]} handlers List of runtime request handlers. - * @see {@link https://mswjs.io/docs/api/setup-worker/use `worker.use()`} + * + * @see {@link https://mswjs.io/docs/api/setup-worker/use `worker.use()` API reference} */ use: (...handlers: RequestHandler[]) => void /** * Marks all request handlers that respond using `res.once()` as unused. - * @see {@link https://mswjs.io/docs/api/setup-worker/restore-handlers `worker.restoreHandlers()`} + * + * @see {@link https://mswjs.io/docs/api/setup-worker/restore-handlers `worker.restoreHandlers()` API reference} */ restoreHandlers: () => void /** * Resets request handlers to the initial list given to the `setupWorker` call, or to the explicit next request handlers list, if given. * @param {RequestHandler[]} nextHandlers List of the new initial request handlers. - * @see {@link https://mswjs.io/docs/api/setup-worker/reset-handlers `worker.resetHandlers()`} + * + * @see {@link https://mswjs.io/docs/api/setup-worker/reset-handlers `worker.resetHandlers()` API reference} */ resetHandlers: (...nextHandlers: RequestHandler[]) => void /** * Returns a readonly list of currently active request handlers. - * @see {@link https://mswjs.io/docs/api/setup-worker/list-handlers `worker.listHandlers()`} + * + * @see {@link https://mswjs.io/docs/api/setup-worker/list-handlers `worker.listHandlers()` API reference} */ listHandlers(): ReadonlyArray> + /** + * Life-cycle events. + * Life-cycle events allow you to subscribe to the internal library events occurring during the request/response handling. + * + * @see {@link https://mswjs.io/docs/api/life-cycle-events Life-cycle Events API reference} + */ events: LifeCycleEventEmitter } diff --git a/src/browser/setupWorker/setupWorker.ts b/src/browser/setupWorker/setupWorker.ts index d85169d64..301e4e520 100644 --- a/src/browser/setupWorker/setupWorker.ts +++ b/src/browser/setupWorker/setupWorker.ts @@ -187,7 +187,8 @@ export class SetupWorkerApi /** * Sets up a requests interception in the browser with the given request handlers. * @param {RequestHandler[]} handlers List of request handlers. - * @see {@link https://mswjs.io/docs/api/setup-worker `setupWorker`} + * + * @see {@link https://mswjs.io/docs/api/setup-worker `setupWorker()` API reference} */ export function setupWorker(...handlers: Array): SetupWorker { return new SetupWorkerApi(...handlers) diff --git a/src/core/HttpResponse.ts b/src/core/HttpResponse.ts index 8342d66be..e5e51c482 100644 --- a/src/core/HttpResponse.ts +++ b/src/core/HttpResponse.ts @@ -24,9 +24,15 @@ export interface StrictResponse } /** - * A `Response` class superset with a stricter response body type. + * A drop-in replacement for the standard `Response` class + * to allow additional features, like mocking the response `Set-Cookie` header. + * * @example * new HttpResponse('Hello world', { status: 201 }) + * HttpResponse.json({ name: 'John' }) + * HttpResponse.formData(form) + * + * @see {@link https://mswjs.io/docs/api/http-response `HttpResponse` API reference} */ export class HttpResponse extends Response { constructor(body?: BodyInit | null, init?: HttpResponseInit) { diff --git a/src/core/bypass.ts b/src/core/bypass.ts index 848d79d45..e467cf30c 100644 --- a/src/core/bypass.ts +++ b/src/core/bypass.ts @@ -3,7 +3,7 @@ import { invariant } from 'outvariant' export type BypassRequestInput = string | URL | Request /** - * Creates a `Request` instance that will always be bypassed by MSW. + * Creates a `Request` instance that will always be ignored by MSW. * * @example * import { bypass } from 'msw' @@ -11,6 +11,8 @@ export type BypassRequestInput = string | URL | Request * fetch(bypass('/resource')) * fetch(bypass(new URL('/resource', 'https://example.com))) * fetch(bypass(new Request('https://example.com/resource'))) + * + * @see {@link https://mswjs.io/docs/api/bypass `bypass()` API reference} */ export function bypass(input: BypassRequestInput, init?: RequestInit): Request { const request = input instanceof Request ? input : new Request(input, init) diff --git a/src/core/delay.ts b/src/core/delay.ts index 9bbe68bf8..0244567ed 100644 --- a/src/core/delay.ts +++ b/src/core/delay.ts @@ -20,10 +20,13 @@ 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 + * + * @see {@link https://mswjs.io/docs/api/delay `delay()` API reference} */ export async function delay( durationOrMode?: DelayMode | number, diff --git a/src/core/graphql.test.ts b/src/core/graphql.test.ts index 0658b09a5..e783d0fbd 100644 --- a/src/core/graphql.test.ts +++ b/src/core/graphql.test.ts @@ -3,9 +3,9 @@ import { graphql } from './graphql' test('exports supported GraphQL operation types', () => { expect(graphql).toBeDefined() expect(Object.keys(graphql)).toEqual([ - 'operation', 'query', 'mutation', + 'operation', 'link', ]) }) diff --git a/src/core/graphql.ts b/src/core/graphql.ts index c9ae77070..bd79d5050 100644 --- a/src/core/graphql.ts +++ b/src/core/graphql.ts @@ -67,35 +67,42 @@ function createGraphQLOperationHandler(url: Path) { } const standardGraphQLHandlers = { - /** - * Captures any GraphQL operation, regardless of its name, under the current scope. - * @example - * graphql.operation(() => { - * return HttpResponse.json({ data: { name: 'John' } }) - * }) - * @see {@link https://mswjs.io/docs/api/graphql/operation `graphql.operation()`} - */ - operation: createGraphQLOperationHandler('*'), - /** * Captures a GraphQL query by a given name. + * * @example * graphql.query('GetUser', () => { * return HttpResponse.json({ data: { user: { name: 'John' } } }) * }) - * @see {@link https://mswjs.io/docs/api/graphql/query `graphql.query()`} + * + * @see {@link https://mswjs.io/docs/api/graphql#graphqlqueryqueryname-resolver `graphql.query()` API reference} */ query: createScopedGraphQLHandler('query' as OperationTypeNode, '*'), /** - * Captures a GraphQL mutation by a given name. + * Intercepts a GraphQL mutation by its name. + * * @example * graphql.mutation('SavePost', () => { * return HttpResponse.json({ data: { post: { id: 'abc-123 } } }) * }) - * @see {@link https://mswjs.io/docs/api/graphql/mutation `graphql.mutation()`} + * + * @see {@link https://mswjs.io/docs/api/graphql#graphqlmutationmutationname-resolver `graphql.query()` API reference} + * */ mutation: createScopedGraphQLHandler('mutation' as OperationTypeNode, '*'), + + /** + * Intercepts any GraphQL operation, regardless of its type or name. + * + * @example + * graphql.operation(() => { + * return HttpResponse.json({ data: { name: 'John' } }) + * }) + * + * @see {@link https://mswjs.io/docs/api/graphql#graphloperationresolver `graphql.operation()` API reference} + */ + operation: createGraphQLOperationHandler('*'), } function createGraphQLLink(url: Path): typeof standardGraphQLHandlers { @@ -106,7 +113,26 @@ function createGraphQLLink(url: Path): typeof standardGraphQLHandlers { } } +/** + * A namespace to intercept and mock GraphQL operations + * + * @example + * graphql.query('GetUser', resolver) + * graphql.mutation('DeletePost', resolver) + * + * @see {@link https://mswjs.io/docs/api/graphql `graphql` API reference} + */ export const graphql = { ...standardGraphQLHandlers, + + /** + * Intercepts GraphQL operations scoped by the given URL. + * + * @example + * const github = graphql.link('https://api.github.com/graphql') + * github.query('GetRepo', resolver) + * + * @see {@link https://mswjs.io/docs/api/graphql#graphqllinkurl `graphql.link()` API reference} + */ link: createGraphQLLink, } diff --git a/src/core/http.ts b/src/core/http.ts index f268c3105..d4f7c58f8 100644 --- a/src/core/http.ts +++ b/src/core/http.ts @@ -30,6 +30,15 @@ function createHttpHandler( } } +/** + * A namespace to intercept and mock HTTP requests. + * + * @example + * http.get('/user', resolver) + * http.post('/post/:id', resolver) + * + * @see {@link https://mswjs.io/docs/api/http `http` API reference} + */ export const http = { all: createHttpHandler(/.+/), head: createHttpHandler(HttpMethods.HEAD), diff --git a/src/core/passthrough.ts b/src/core/passthrough.ts index e6f6e08ec..d67afdde1 100644 --- a/src/core/passthrough.ts +++ b/src/core/passthrough.ts @@ -1,5 +1,5 @@ /** - * Performs the captured request as-is. + * Performs the intercepted request as-is. * * This stops request handler lookup so no other handlers * can affect this request past this point. @@ -9,6 +9,8 @@ * http.get('/resource', () => { * return passthrough() * }) + * + * @see {@link https://mswjs.io/docs/api/passthrough `passthrough()` API reference} */ export function passthrough(): Response { return new Response(null, { diff --git a/src/native/index.ts b/src/native/index.ts index e2448e9c7..245c1fb93 100644 --- a/src/native/index.ts +++ b/src/native/index.ts @@ -5,7 +5,8 @@ import { SetupServerApi } from '../node/SetupServerApi' /** * Sets up a requests interception in React Native with the given request handlers. * @param {RequestHandler[]} handlers List of request handlers. - * @see {@link https://mswjs.io/docs/api/setup-server `setupServer`} + * + * @see {@link https://mswjs.io/docs/api/setup-server `setupServer()` API reference} */ export function setupServer( ...handlers: Array diff --git a/src/node/glossary.ts b/src/node/glossary.ts index 32a55ebcf..0edda3ce8 100644 --- a/src/node/glossary.ts +++ b/src/node/glossary.ts @@ -12,39 +12,51 @@ import { 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()`} + * + * @see {@link https://mswjs.io/docs/api/setup-server/listen `server.listen()` API reference} */ listen(options?: PartialDeep): void /** * Stops requests interception by restoring all augmented modules. - * @see {@link https://mswjs.io/docs/api/setup-server/close `server.close()`} + * + * @see {@link https://mswjs.io/docs/api/setup-server/close `server.close()` API reference} */ close(): void /** * Prepends given request handlers to the list of existing handlers. - * @see {@link https://mswjs.io/docs/api/setup-server/use `server.use()`} + * + * @see {@link https://mswjs.io/docs/api/setup-server/use `server.use()` API reference} */ use(...handlers: Array): void /** * Marks all request handlers that respond using `res.once()` as unused. - * @see {@link https://mswjs.io/docs/api/setup-server/restore-handlers `server.restore-handlers()`} + * + * @see {@link https://mswjs.io/docs/api/setup-server/restore-handlers `server.restore-handlers()` API reference} */ restoreHandlers(): void /** * 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()`} + * + * @see {@link https://mswjs.io/docs/api/setup-server/reset-handlers `server.reset-handlers()` API reference} */ resetHandlers(...nextHandlers: Array): void /** * Returns a readonly list of currently active request handlers. - * @see {@link https://mswjs.io/docs/api/setup-server/list-handlers `server.listHandlers()`} + * + * @see {@link https://mswjs.io/docs/api/setup-server/list-handlers `server.listHandlers()` API reference} */ listHandlers(): ReadonlyArray> + /** + * Life-cycle events. + * Life-cycle events allow you to subscribe to the internal library events occurring during the request/response handling. + * + * @see {@link https://mswjs.io/docs/api/life-cycle-events Life-cycle Events API reference} + */ events: LifeCycleEventEmitter } diff --git a/src/node/setupServer.ts b/src/node/setupServer.ts index 6e88f9cb3..06b2546af 100644 --- a/src/node/setupServer.ts +++ b/src/node/setupServer.ts @@ -8,7 +8,8 @@ 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`} + * + * @see {@link https://mswjs.io/docs/api/setup-server `setupServer()` API reference} */ export const setupServer = ( ...handlers: Array From 2bcc39c9d440edfc7850a4c30335aaa4c2d83488 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 4 Oct 2023 12:12:52 +0200 Subject: [PATCH 163/180] docs: use "intercept" instead of "capture" --- MIGRATING.md | 4 ++-- README.md | 4 ++-- src/browser/setupWorker/glossary.ts | 4 ++-- src/browser/utils/deferNetworkRequestsUntil.test.ts | 2 +- src/core/graphql.ts | 2 +- src/core/handlers/RequestHandler.ts | 4 ++-- src/core/utils/request/onUnhandledRequest.test.ts | 6 +++--- src/core/utils/request/onUnhandledRequest.ts | 2 +- test/browser/graphql-api/anonymous-operation.test.ts | 6 +++--- test/browser/graphql-api/mutation.test.ts | 2 +- test/browser/graphql-api/query.test.ts | 2 +- .../setup-worker/fallback-mode/fallback-mode.test.ts | 2 +- .../start/on-unhandled-request/callback-print.test.ts | 4 ++-- .../start/on-unhandled-request/default.test.ts | 2 +- .../on-unhandled-request/suggestions.graphql.test.ts | 8 ++++---- .../start/on-unhandled-request/suggestions.rest.test.ts | 8 ++++---- .../setup-worker/start/on-unhandled-request/warn.test.ts | 8 ++++---- test/browser/msw-api/setup-worker/start/quiet.test.ts | 2 +- test/browser/rest-api/cookies-request.mocks.ts | 2 +- test/browser/rest-api/logging.test.ts | 2 +- .../on-unhandled-request/callback-throws.node.test.ts | 2 +- .../scenarios/on-unhandled-request/default.node.test.ts | 2 +- .../scenarios/on-unhandled-request/error.node.test.ts | 2 +- .../scenarios/on-unhandled-request/warn.node.test.ts | 2 +- 24 files changed, 42 insertions(+), 42 deletions(-) diff --git a/MIGRATING.md b/MIGRATING.md index bf0e77f2d..8ddc0e003 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -82,7 +82,7 @@ A response resolver now exposes a single object argument instead of `(req, res, #### General -- `request`, a Fetch API `Request` instance representing a captured request. +- `request`, a Fetch API `Request` instance representing an intercepted request. - `cookies`, a parsed cookies object based on the request cookies. #### REST-specific @@ -100,7 +100,7 @@ To mock responses, you should now return a Fetch API `Response` instance from th ```js http.get('/greet/:name', ({ request, params }) => { - console.log('Captured %s %s', request.method, request.url) + console.log('Intercepted %s %s', request.method, request.url) return new Response(`hello, ${params.name}!`) }) ``` diff --git a/README.md b/README.md index 3480e72fb..ae35703cf 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ - **Seamless**. A dedicated layer of requests interception at your disposal. Keep your application's code and tests unaware of whether something is mocked or not. - **Deviation-free**. Request the same production resources and test the actual behavior of your app. Augment an existing API, or design it as you go when there is none. -- **Familiar & Powerful**. Use [Express](https://github.com/expressjs/express)-like routing syntax to capture requests. Use parameters, wildcards, and regular expressions to match requests, and respond with necessary status codes, headers, cookies, delays, or completely custom resolvers. +- **Familiar & Powerful**. Use [Express](https://github.com/expressjs/express)-like routing syntax to intercept requests. Use parameters, wildcards, and regular expressions to match requests, and respond with necessary status codes, headers, cookies, delays, or completely custom resolvers. --- @@ -53,7 +53,7 @@ This README will give you a brief overview on the library but there's no better ### How does it work? -In-browser usage is what sets Mock Service Worker apart from other tools. Utilizing the [Service Worker API](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API), which can intercept requests for the purpose of caching, Mock Service Worker responds to captured requests with your mock definition on the network level. This way your application knows nothing about the mocking. +In-browser usage is what sets Mock Service Worker apart from other tools. Utilizing the [Service Worker API](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API), which can intercept requests for the purpose of caching, Mock Service Worker responds to intercepted requests with your mock definition on the network level. This way your application knows nothing about the mocking. **Take a look at this quick presentation on how Mock Service Worker functions in a browser:** diff --git a/src/browser/setupWorker/glossary.ts b/src/browser/setupWorker/glossary.ts index 9bedc369c..084f3cc65 100644 --- a/src/browser/setupWorker/glossary.ts +++ b/src/browser/setupWorker/glossary.ts @@ -35,7 +35,7 @@ type RequestWithoutMethods = Omit< export interface ServiceWorkerIncomingRequest extends RequestWithoutMethods { /** * Unique ID of the request generated once the request is - * captured by the "fetch" event in the Service Worker. + * intercepted by the "fetch" event in the Service Worker. */ id: string body?: ArrayBuffer | null @@ -174,7 +174,7 @@ export interface StartOptions extends SharedOptions { } /** - * Disables the logging of captured requests + * Disables the logging of the intercepted requests * into browser's console. * @default false */ diff --git a/src/browser/utils/deferNetworkRequestsUntil.test.ts b/src/browser/utils/deferNetworkRequestsUntil.test.ts index 8ba23be8a..c5f0e963c 100644 --- a/src/browser/utils/deferNetworkRequestsUntil.test.ts +++ b/src/browser/utils/deferNetworkRequestsUntil.test.ts @@ -31,7 +31,7 @@ test('defers any requests that happen while a given promise is pending', async ( events.push('promise resolved') }) - // Calling this functions captures all requests that happen while + // Calling this functions intercepts all requests that happen while // the given promise is pending, and defers their execution // until the promise is resolved. deferNetworkRequestsUntil(workerPromise) diff --git a/src/core/graphql.ts b/src/core/graphql.ts index bd79d5050..b3409eb7f 100644 --- a/src/core/graphql.ts +++ b/src/core/graphql.ts @@ -68,7 +68,7 @@ function createGraphQLOperationHandler(url: Path) { const standardGraphQLHandlers = { /** - * Captures a GraphQL query by a given name. + * Intercepts a GraphQL query by a given name. * * @example * graphql.query('GetUser', () => { diff --git a/src/core/handlers/RequestHandler.ts b/src/core/handlers/RequestHandler.ts index f3d6269ca..b2216e631 100644 --- a/src/core/handlers/RequestHandler.ts +++ b/src/core/handlers/RequestHandler.ts @@ -120,7 +120,7 @@ export abstract class RequestHandler< } /** - * Determine if the captured request should be mocked. + * Determine if the intercepted request should be mocked. */ abstract predicate( request: Request, @@ -138,7 +138,7 @@ export abstract class RequestHandler< ): void /** - * Parse the captured request to extract additional information from it. + * Parse the intercepted request to extract additional information from it. * Parsed result is then exposed to other methods of this request handler. */ async parse( diff --git a/src/core/utils/request/onUnhandledRequest.test.ts b/src/core/utils/request/onUnhandledRequest.test.ts index 48c0123cd..5649ea866 100644 --- a/src/core/utils/request/onUnhandledRequest.test.ts +++ b/src/core/utils/request/onUnhandledRequest.test.ts @@ -12,7 +12,7 @@ const resolver: ResponseResolver = () => void 0 const fixtures = { warningWithoutSuggestions: `\ -[MSW] Warning: captured a request without a matching request handler: +[MSW] Warning: intercepted a request without a matching request handler: • GET /api @@ -20,7 +20,7 @@ If you still wish to intercept this unhandled request, please create a request h Read more: https://mswjs.io/docs/getting-started/mocks`, errorWithoutSuggestions: `\ -[MSW] Error: captured a request without a matching request handler: +[MSW] Error: intercepted a request without a matching request handler: • GET /api @@ -28,7 +28,7 @@ If you still wish to intercept this unhandled request, please create a request h Read more: https://mswjs.io/docs/getting-started/mocks`, warningWithSuggestions: (suggestions: string) => `\ -[MSW] Warning: captured a request without a matching request handler: +[MSW] Warning: intercepted a request without a matching request handler: • GET /api diff --git a/src/core/utils/request/onUnhandledRequest.ts b/src/core/utils/request/onUnhandledRequest.ts index 3230bbcdf..89a571360 100644 --- a/src/core/utils/request/onUnhandledRequest.ts +++ b/src/core/utils/request/onUnhandledRequest.ts @@ -188,7 +188,7 @@ export async function onUnhandledRequest( const handlerSuggestion = generateHandlerSuggestion() const messageTemplate = [ - `captured a request without a matching request handler:`, + `intercepted a request without a matching request handler:`, ` \u2022 ${requestHeader}`, handlerSuggestion, `\ diff --git a/test/browser/graphql-api/anonymous-operation.test.ts b/test/browser/graphql-api/anonymous-operation.test.ts index c5702e34f..efc6a2479 100644 --- a/test/browser/graphql-api/anonymous-operation.test.ts +++ b/test/browser/graphql-api/anonymous-operation.test.ts @@ -67,7 +67,7 @@ test('does not warn on anonymous GraphQL operation when no GraphQL handlers are // 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: +[MSW] Warning: intercepted a request without a matching request handler: • anonymous query (POST ${endpointUrl}) @@ -76,7 +76,7 @@ Read more: https://mswjs.io/docs/getting-started/mocks`, ]) }) - // // Must print the warning because anonymous operations cannot be captured + // // Must print the warning because anonymous operations cannot be intercepted // // using standard "graphql.query()" and "graphql.mutation()" handlers. // await waitFor(() => { // expect(consoleSpy.get('warning')).toEqual( @@ -205,6 +205,6 @@ test('does not print a warning on anonymous GraphQL operation handled by "graphq }) // Must not print any warnings because a permissive "graphql.operation()" - // handler was used to capture and mock the anonymous GraphQL operation. + // handler was used to intercept and mock the anonymous GraphQL operation. expect(consoleSpy.get('warning')).toBeUndefined() }) diff --git a/test/browser/graphql-api/mutation.test.ts b/test/browser/graphql-api/mutation.test.ts index 791f9ccbf..4a5a9af77 100644 --- a/test/browser/graphql-api/mutation.test.ts +++ b/test/browser/graphql-api/mutation.test.ts @@ -49,7 +49,7 @@ test('sends a mocked response to a GraphQL mutation', async ({ }) }) -test('prints a warning when captured an anonymous GraphQL mutation', async ({ +test('prints a warning when intercepted an anonymous GraphQL mutation', async ({ loadExample, spyOnConsole, query, diff --git a/test/browser/graphql-api/query.test.ts b/test/browser/graphql-api/query.test.ts index 44d3244b9..b1dbc6171 100644 --- a/test/browser/graphql-api/query.test.ts +++ b/test/browser/graphql-api/query.test.ts @@ -85,7 +85,7 @@ test('mocks a GraphQL query issued with a POST request', async ({ }) }) -test('prints a warning when captured an anonymous GraphQL query', async ({ +test('prints a warning when intercepted an anonymous GraphQL query', async ({ loadExample, spyOnConsole, query, 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 a5fcfe8f5..b1ffc8bb4 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 @@ -144,7 +144,7 @@ test('warns on the unhandled request by default', async ({ expect(consoleSpy.get('warning')).toEqual( expect.arrayContaining([ expect.stringContaining(`\ -[MSW] Warning: captured a request without a matching request handler: +[MSW] Warning: intercepted a request without a matching request handler: • GET ${server.http.url('/unknown-resource')} diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback-print.test.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback-print.test.ts index de8f756e8..da68cdfbe 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback-print.test.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/callback-print.test.ts @@ -24,7 +24,7 @@ test('executes a default "warn" strategy in a custom callback', async ({ expect(consoleSpy.get('warning')).toEqual( expect.arrayContaining([ expect.stringContaining(`\ -[MSW] Warning: captured a request without a matching request handler: +[MSW] Warning: intercepted a request without a matching request handler: • GET https://mswjs.io/use-warn @@ -58,7 +58,7 @@ test('executes a default "error" strategy in a custom callback', async ({ expect(consoleSpy.get('error')).toEqual( expect.arrayContaining([ expect.stringContaining(`\ -[MSW] Error: captured a request without a matching request handler: +[MSW] Error: intercepted a request without a matching request handler: • GET https://mswjs.io/use-error diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/default.test.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/default.test.ts index 46cafea89..ebaff06b9 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/default.test.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/default.test.ts @@ -14,7 +14,7 @@ test('warns on unhandled requests by default', async ({ expect(consoleSpy.get('warning')).toEqual( expect.arrayContaining([ expect.stringMatching( - /\[MSW\] Warning: captured a request without a matching request handler/, + /\[MSW\] Warning: intercepted a request without a matching request handler/, ), ]), ) 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 1bbdfd001..77bd1c96c 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 @@ -46,7 +46,7 @@ test.describe('GraphQL API', () => { expect(consoleSpy.get('warning')).toEqual( expect.arrayContaining([ expect.stringContaining(`\ -[MSW] Warning: captured a request without a matching request handler: +[MSW] Warning: intercepted a request without a matching request handler: • query PaymentHistory (POST /graphql) @@ -92,7 +92,7 @@ Read more: https://mswjs.io/docs/getting-started/mocks`), expect(consoleSpy.get('warning')).toEqual( expect.arrayContaining([ expect.stringContaining(`\ -[MSW] Warning: captured a request without a matching request handler: +[MSW] Warning: intercepted a request without a matching request handler: • query GetUsers (POST /graphql) @@ -140,7 +140,7 @@ Read more: https://mswjs.io/docs/getting-started/mocks`), expect(consoleSpy.get('warning')).toEqual( expect.arrayContaining([ expect.stringContaining(`\ -[MSW] Warning: captured a request without a matching request handler: +[MSW] Warning: intercepted a request without a matching request handler: • query SubmitCheckout (POST /graphql) @@ -188,7 +188,7 @@ Read more: https://mswjs.io/docs/getting-started/mocks`), expect(consoleSpy.get('warning')).toEqual( expect.arrayContaining([ expect.stringContaining(`\ -[MSW] Warning: captured a request without a matching request handler: +[MSW] Warning: intercepted a request without a matching request handler: • query ActiveUsers (POST /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 0bef29269..cec86e941 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 @@ -32,7 +32,7 @@ test.describe('REST API', () => { expect(consoleSpy.get('warning')).toEqual( expect.arrayContaining([ expect.stringContaining(`\ -[MSW] Warning: captured a request without a matching request handler: +[MSW] Warning: intercepted a request without a matching request handler: • GET /user-details @@ -61,7 +61,7 @@ Read more: https://mswjs.io/docs/getting-started/mocks`), expect(consoleSpy.get('warning')).toEqual( expect.arrayContaining([ expect.stringContaining(`\ -[MSW] Warning: captured a request without a matching request handler: +[MSW] Warning: intercepted a request without a matching request handler: • GET /users @@ -97,7 +97,7 @@ Read more: https://mswjs.io/docs/getting-started/mocks`), expect(consoleSpy.get('warning')).toEqual( expect.arrayContaining([ expect.stringContaining(`\ -[MSW] Warning: captured a request without a matching request handler: +[MSW] Warning: intercepted a request without a matching request handler: • POST /users @@ -131,7 +131,7 @@ Read more: https://mswjs.io/docs/getting-started/mocks`), expect(consoleSpy.get('warning')).toEqual( expect.arrayContaining([ expect.stringContaining(`\ -[MSW] Warning: captured a request without a matching request handler: +[MSW] Warning: intercepted a request without a matching request handler: • GET /pamyents diff --git a/test/browser/msw-api/setup-worker/start/on-unhandled-request/warn.test.ts b/test/browser/msw-api/setup-worker/start/on-unhandled-request/warn.test.ts index 2a5502de4..7c6a68830 100644 --- a/test/browser/msw-api/setup-worker/start/on-unhandled-request/warn.test.ts +++ b/test/browser/msw-api/setup-worker/start/on-unhandled-request/warn.test.ts @@ -15,7 +15,7 @@ test('warns on an unhandled REST API request with an absolute URL', async ({ expect(consoleSpy.get('warning')).toEqual( expect.arrayContaining([ expect.stringContaining(`\ -[MSW] Warning: captured a request without a matching request handler: +[MSW] Warning: intercepted a request without a matching request handler: • GET https://mswjs.io/non-existing-page @@ -40,7 +40,7 @@ test('warns on an unhandled REST API request with a relative URL', async ({ expect(consoleSpy.get('warning')).toEqual( expect.arrayContaining([ expect.stringContaining(`\ -[MSW] Warning: captured a request without a matching request handler: +[MSW] Warning: intercepted a request without a matching request handler: • GET /user-details @@ -65,7 +65,7 @@ test('does not warn on request which handler explicitly returns no mocked respon expect(consoleSpy.get('warning')).toEqual( expect.not.arrayContaining([ expect.stringContaining( - '[MSW] Warning: captured a request without a matching request handler', + '[MSW] Warning: intercepted a request without a matching request handler', ), ]), ) @@ -86,7 +86,7 @@ test('does not warn on request which handler implicitly returns no mocked respon expect(consoleSpy.get('warning')).toEqual( expect.not.arrayContaining([ expect.stringContaining( - '[MSW] Warning: captured a request without a matching request handler', + '[MSW] Warning: intercepted a request without a matching request handler', ), ]), ) 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 0d4e3c61d..12d1e830e 100644 --- a/test/browser/msw-api/setup-worker/start/quiet.test.ts +++ b/test/browser/msw-api/setup-worker/start/quiet.test.ts @@ -7,7 +7,7 @@ declare namespace window { } } -test('does not log the captured request when the "quiet" option is set to "true"', async ({ +test('does not log the intercepted request when the "quiet" option is set to "true"', async ({ loadExample, spyOnConsole, page, diff --git a/test/browser/rest-api/cookies-request.mocks.ts b/test/browser/rest-api/cookies-request.mocks.ts index 06ba33770..18b89e3e2 100644 --- a/test/browser/rest-api/cookies-request.mocks.ts +++ b/test/browser/rest-api/cookies-request.mocks.ts @@ -2,7 +2,7 @@ import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( - // Use wildcard so that we capture any "GET /user" requests + // Use wildcard so that we intercept any "GET /user" requests // regardless of the origin, and can assert "same-origin" credentials. http.get('*/user', ({ cookies }) => { return HttpResponse.json({ cookies }) diff --git a/test/browser/rest-api/logging.test.ts b/test/browser/rest-api/logging.test.ts index a0ef1b8bc..ff230dce8 100644 --- a/test/browser/rest-api/logging.test.ts +++ b/test/browser/rest-api/logging.test.ts @@ -2,7 +2,7 @@ import { test, expect } from '../playwright.extend' import { StatusCodeColor } from '../../../src/core/utils/logging/getStatusCodeColor' import { waitFor } from '../../support/waitFor' -test('prints a captured request info into browser console', async ({ +test('prints the intercepted request info into browser console', async ({ loadExample, spyOnConsole, fetch, 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 8a44c0355..c941910c3 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 @@ -16,7 +16,7 @@ beforeAll(() => onUnhandledRequest(request) { /** * @fixme @todo For some reason, the exception from the "onUnhandledRequest" - * callback doesn't propagate to the captured request but instead is thrown + * callback doesn't propagate to the intercepted request but instead is thrown * in this test's context. */ throw new Error(`Custom error for ${request.method} ${request.url}`) 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 53e0f121f..460c85e6b 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 @@ -30,7 +30,7 @@ test('warns on unhandled requests by default', async () => { expect(console.error).not.toBeCalled() expect(console.warn).toBeCalledWith(`\ -[MSW] Warning: captured a request without a matching request handler: +[MSW] Warning: intercepted a request without a matching request handler: • GET https://test.mswjs.io/ 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 47658b1ed..c6bb16f9f 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 @@ -62,7 +62,7 @@ test('errors on unhandled request when using the "error" value', async () => { `request to ${endpointUrl} failed, reason: [MSW] Cannot bypass a request when using the "error" strategy for the "onUnhandledRequest" option.`, ) expect(console.error) - .toHaveBeenCalledWith(`[MSW] Error: captured a request without a matching request handler: + .toHaveBeenCalledWith(`[MSW] Error: intercepted a request without a matching request handler: • GET ${endpointUrl} 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 091864ce0..28fd440f9 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 @@ -26,7 +26,7 @@ test('warns on unhandled request when using the "warn" value', async () => { expect(res).toHaveProperty('status', 404) expect(console.warn).toBeCalledWith(`\ -[MSW] Warning: captured a request without a matching request handler: +[MSW] Warning: intercepted a request without a matching request handler: • GET https://test.mswjs.io/ From e1e4bb320b333223cd469491efa557886c4a31a1 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 4 Oct 2023 12:55:16 +0200 Subject: [PATCH 164/180] docs: add v2 announcement to readme (#1759) --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index ae35703cf..8616605b7 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ +> [!IMPORTANT]\ +> **MSW 2.0 is finally here! 🎉** Read the [Release notes](https://github.com/mswjs/msw/releases/tag/v2.0.0) and please follow the [**Migration guidelines**](https://mswjs.io/docs/migrations/1.x-to-2.x) to upgrade. If you're having any questions while upgrading, please reach out in our [Discord server](https://discord.gg/z29WbnfDC5). +

From eca6a9e8ddab63ee57cd298688dce1b8b907630e Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 6 Oct 2023 19:20:15 +0200 Subject: [PATCH 165/180] feat(RequestHandler): make class method arguments an object (#1761) --- .../start/createFallbackRequestListener.ts | 8 +- .../start/createRequestListener.ts | 8 +- src/core/handlers/GraphQLHandler.test.ts | 77 ++++++++---- src/core/handlers/GraphQLHandler.ts | 59 ++++----- src/core/handlers/HttpHandler.test.ts | 79 +++++++----- src/core/handlers/HttpHandler.ts | 39 +++--- src/core/handlers/RequestHandler.ts | 116 ++++++++++-------- src/core/utils/getResponse.ts | 6 +- src/core/utils/handleRequest.test.ts | 8 +- 9 files changed, 232 insertions(+), 168 deletions(-) diff --git a/src/browser/setupWorker/start/createFallbackRequestListener.ts b/src/browser/setupWorker/start/createFallbackRequestListener.ts index 93564371b..c722b2772 100644 --- a/src/browser/setupWorker/start/createFallbackRequestListener.ts +++ b/src/browser/setupWorker/start/createFallbackRequestListener.ts @@ -28,10 +28,14 @@ export function createFallbackRequestListener( options, context.emitter, { - onMockedResponse(_, { handler, parsedRequest }) { + onMockedResponse(_, { handler, parsedResult }) { if (!options.quiet) { context.emitter.once('response:mocked', ({ response }) => { - handler.log(requestCloneForLogs, response, parsedRequest) + handler.log({ + request: requestCloneForLogs, + response, + parsedResult, + }) }) } }, diff --git a/src/browser/setupWorker/start/createRequestListener.ts b/src/browser/setupWorker/start/createRequestListener.ts index 1fa973045..dccd989de 100644 --- a/src/browser/setupWorker/start/createRequestListener.ts +++ b/src/browser/setupWorker/start/createRequestListener.ts @@ -41,7 +41,7 @@ export const createRequestListener = ( onPassthroughResponse() { messageChannel.postMessage('NOT_FOUND') }, - async onMockedResponse(response, { handler, parsedRequest }) { + async onMockedResponse(response, { handler, parsedResult }) { // 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. @@ -62,7 +62,11 @@ export const createRequestListener = ( if (!options.quiet) { context.emitter.once('response:mocked', ({ response }) => { - handler.log(requestCloneForLogs, response, parsedRequest) + handler.log({ + request: requestCloneForLogs, + response, + parsedResult, + }) }) } }, diff --git a/src/core/handlers/GraphQLHandler.test.ts b/src/core/handlers/GraphQLHandler.test.ts index 592d82575..cebac6440 100644 --- a/src/core/handlers/GraphQLHandler.test.ts +++ b/src/core/handlers/GraphQLHandler.test.ts @@ -159,7 +159,7 @@ describe('parse', () => { query: GET_USER, }) - expect(await handler.parse(request)).toEqual({ + expect(await handler.parse({ request })).toEqual({ operationType: 'query', operationName: 'GetUser', query: GET_USER, @@ -181,7 +181,7 @@ describe('parse', () => { }, }) - expect(await handler.parse(request)).toEqual({ + expect(await handler.parse({ request })).toEqual({ operationType: 'query', operationName: 'GetUser', query: GET_USER, @@ -202,7 +202,7 @@ describe('parse', () => { query: GET_USER, }) - expect(await handler.parse(request)).toEqual({ + expect(await handler.parse({ request })).toEqual({ operationType: 'query', operationName: 'GetUser', query: GET_USER, @@ -224,7 +224,7 @@ describe('parse', () => { }, }) - expect(await handler.parse(request)).toEqual({ + expect(await handler.parse({ request })).toEqual({ operationType: 'query', operationName: 'GetUser', query: GET_USER, @@ -247,7 +247,7 @@ describe('parse', () => { query: LOGIN, }) - expect(await handler.parse(request)).toEqual({ + expect(await handler.parse({ request })).toEqual({ operationType: 'mutation', operationName: 'Login', query: LOGIN, @@ -269,7 +269,7 @@ describe('parse', () => { }, }) - expect(await handler.parse(request)).toEqual({ + expect(await handler.parse({ request })).toEqual({ operationType: 'mutation', operationName: 'Login', query: LOGIN, @@ -290,7 +290,7 @@ describe('parse', () => { query: LOGIN, }) - expect(await handler.parse(request)).toEqual({ + expect(await handler.parse({ request })).toEqual({ operationType: 'mutation', operationName: 'Login', query: LOGIN, @@ -312,7 +312,7 @@ describe('parse', () => { }, }) - expect(await handler.parse(request)).toEqual({ + expect(await handler.parse({ request })).toEqual({ operationType: 'mutation', operationName: 'Login', query: LOGIN, @@ -339,9 +339,17 @@ describe('predicate', () => { query: LOGIN, }) - expect(handler.predicate(request, await handler.parse(request))).toBe(true) expect( - handler.predicate(alienRequest, await handler.parse(alienRequest)), + handler.predicate({ + request, + parsedResult: await handler.parse({ request }), + }), + ).toBe(true) + expect( + handler.predicate({ + request: alienRequest, + parsedResult: await handler.parse({ request: alienRequest }), + }), ).toBe(false) }) @@ -365,9 +373,17 @@ describe('predicate', () => { `, }) - expect(handler.predicate(request, await handler.parse(request))).toBe(true) expect( - handler.predicate(alienRequest, await handler.parse(alienRequest)), + handler.predicate({ + request, + parsedResult: await handler.parse({ request }), + }), + ).toBe(true) + expect( + handler.predicate({ + request: alienRequest, + parsedResult: await handler.parse({ request: alienRequest }), + }), ).toBe(false) }) @@ -384,7 +400,12 @@ describe('predicate', () => { `, }) - expect(handler.predicate(request, await handler.parse(request))).toBe(true) + expect( + handler.predicate({ + request, + parsedResult: await handler.parse({ request }), + }), + ).toBe(true) }) test('respects custom endpoint', async () => { @@ -404,9 +425,17 @@ describe('predicate', () => { query: GET_USER, }) - expect(handler.predicate(request, await handler.parse(request))).toBe(true) expect( - handler.predicate(alienRequest, await handler.parse(alienRequest)), + handler.predicate({ + request, + parsedResult: await handler.parse({ request }), + }), + ).toBe(true) + expect( + handler.predicate({ + request: alienRequest, + parsedResult: await handler.parse({ request: alienRequest }), + }), ).toBe(false) }) }) @@ -426,8 +455,8 @@ describe('test', () => { query: LOGIN, }) - expect(await handler.test(request)).toBe(true) - expect(await handler.test(alienRequest)).toBe(false) + expect(await handler.test({ request })).toBe(true) + expect(await handler.test({ request: alienRequest })).toBe(false) }) test('respects operation name', async () => { @@ -450,8 +479,8 @@ describe('test', () => { `, }) - expect(await handler.test(request)).toBe(true) - expect(await handler.test(alienRequest)).toBe(false) + expect(await handler.test({ request })).toBe(true) + expect(await handler.test({ request: alienRequest })).toBe(false) }) test('respects custom endpoint', async () => { @@ -471,8 +500,8 @@ describe('test', () => { query: GET_USER, }) - expect(await handler.test(request)).toBe(true) - expect(await handler.test(alienRequest)).toBe(false) + expect(await handler.test({ request })).toBe(true) + expect(await handler.test({ request: alienRequest })).toBe(false) }) }) @@ -490,7 +519,7 @@ describe('run', () => { userId: 'abc-123', }, }) - const result = await handler.run(request) + const result = await handler.run({ request }) expect(result!.handler).toEqual(handler) expect(result!.parsedResult).toEqual({ @@ -524,7 +553,7 @@ describe('run', () => { const request = createPostGraphQLRequest({ query: LOGIN, }) - const result = await handler.run(request) + const result = await handler.run({ request }) expect(result).toBeNull() }) @@ -571,7 +600,7 @@ describe('request', () => { `, }) - await handler.run(request) + await handler.run({ request }) expect(matchAllResolver).toHaveBeenCalledTimes(1) expect(matchAllResolver.mock.calls[0][0]).toHaveProperty( diff --git a/src/core/handlers/GraphQLHandler.ts b/src/core/handlers/GraphQLHandler.ts index 4a405a842..0c3e56e3b 100644 --- a/src/core/handlers/GraphQLHandler.ts +++ b/src/core/handlers/GraphQLHandler.ts @@ -114,37 +114,40 @@ export class GraphQLHandler extends RequestHandler< this.endpoint = endpoint } - async parse(request: Request) { - return parseGraphQLRequest(request).catch((error) => { + async parse(args: { request: Request }) { + return parseGraphQLRequest(args.request).catch((error) => { console.error(error) return undefined }) } - predicate(request: Request, parsedResult: ParsedGraphQLRequest) { - if (!parsedResult) { + predicate(args: { request: Request; parsedResult: ParsedGraphQLRequest }) { + if (!args.parsedResult) { return false } - if (!parsedResult.operationName && this.info.operationType !== 'all') { - const publicUrl = getPublicUrlFromRequest(request) + if (!args.parsedResult.operationName && this.info.operationType !== 'all') { + const publicUrl = getPublicUrlFromRequest(args.request) devUtils.warn(`\ -Failed to intercept a GraphQL request at "${request.method} ${publicUrl}": anonymous GraphQL operations are not supported. +Failed to intercept a GraphQL request at "${args.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`) return false } - const hasMatchingUrl = matchRequestUrl(new URL(request.url), this.endpoint) + const hasMatchingUrl = matchRequestUrl( + new URL(args.request.url), + this.endpoint, + ) const hasMatchingOperationType = this.info.operationType === 'all' || - parsedResult.operationType === this.info.operationType + args.parsedResult.operationType === this.info.operationType const hasMatchingOperationName = this.info.operationName instanceof RegExp - ? this.info.operationName.test(parsedResult.operationName || '') - : parsedResult.operationName === this.info.operationName + ? this.info.operationName.test(args.parsedResult.operationName || '') + : args.parsedResult.operationName === this.info.operationName return ( hasMatchingUrl.matches && @@ -153,28 +156,28 @@ Consider naming this operation or using "graphql.operation()" request handler to ) } - protected extendInfo( - _request: Request, - parsedResult: ParsedGraphQLRequest, - ) { + protected extendResolverArgs(args: { + request: Request + parsedResult: ParsedGraphQLRequest + }) { return { - query: parsedResult?.query || '', - operationName: parsedResult?.operationName || '', - variables: parsedResult?.variables || {}, + query: args.parsedResult?.query || '', + operationName: args.parsedResult?.operationName || '', + variables: args.parsedResult?.variables || {}, } } - async log( - request: Request, - response: Response, - parsedRequest: ParsedGraphQLRequest, - ) { - const loggedRequest = await serializeRequest(request) - const loggedResponse = await serializeResponse(response) + async log(args: { + request: Request + response: Response + parsedResult: ParsedGraphQLRequest + }) { + const loggedRequest = await serializeRequest(args.request) + const loggedResponse = await serializeResponse(args.response) const statusColor = getStatusCodeColor(loggedResponse.status) - const requestInfo = parsedRequest?.operationName - ? `${parsedRequest?.operationType} ${parsedRequest?.operationName}` - : `anonymous ${parsedRequest?.operationType}` + const requestInfo = args.parsedResult?.operationName + ? `${args.parsedResult?.operationType} ${args.parsedResult?.operationName}` + : `anonymous ${args.parsedResult?.operationType}` console.groupCollapsed( devUtils.formatMessage('%s %s (%c%s%c)'), diff --git a/src/core/handlers/HttpHandler.test.ts b/src/core/handlers/HttpHandler.test.ts index 2ba461c52..0d0ac2d49 100644 --- a/src/core/handlers/HttpHandler.test.ts +++ b/src/core/handlers/HttpHandler.test.ts @@ -27,7 +27,7 @@ describe('parse', () => { 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({ + expect(await handler.parse({ request })).toEqual({ match: { matches: true, params: { @@ -44,7 +44,7 @@ describe('parse', () => { method: 'POST', }) - expect(await handler.parse(request)).toEqual({ + expect(await handler.parse({ request })).toEqual({ match: { matches: true, params: { @@ -59,7 +59,7 @@ describe('parse', () => { const handler = new HttpHandler('GET', '/user/:userId', resolver) const request = new Request(new URL('/login', location.href)) - expect(await handler.parse(request)).toEqual({ + expect(await handler.parse({ request })).toEqual({ match: { matches: false, params: {}, @@ -76,7 +76,12 @@ describe('predicate', () => { method: 'POST', }) - expect(handler.predicate(request, await handler.parse(request))).toBe(true) + expect( + handler.predicate({ + request, + parsedResult: await handler.parse({ request }), + }), + ).toBe(true) }) test('respects RegExp as the request method', async () => { @@ -88,9 +93,12 @@ describe('predicate', () => { ] for (const request of requests) { - expect(handler.predicate(request, await handler.parse(request))).toBe( - true, - ) + expect( + handler.predicate({ + request, + parsedResult: await handler.parse({ request }), + }), + ).toBe(true) } }) @@ -98,19 +106,24 @@ describe('predicate', () => { 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) + expect( + handler.predicate({ + request, + parsedResult: await handler.parse({ request }), + }), + ).toBe(false) }) }) describe('test', () => { test('returns true given a matching request', async () => { const handler = new HttpHandler('GET', '/user/:userId', resolver) - const firstTest = await handler.test( - new Request(new URL('/user/abc-123', location.href)), - ) - const secondTest = await handler.test( - new Request(new URL('/user/def-456', location.href)), - ) + const firstTest = await handler.test({ + request: new Request(new URL('/user/abc-123', location.href)), + }) + const secondTest = await handler.test({ + request: new Request(new URL('/user/def-456', location.href)), + }) expect(firstTest).toBe(true) expect(secondTest).toBe(true) @@ -118,15 +131,15 @@ describe('test', () => { test('returns false given a non-matching request', async () => { const handler = new HttpHandler('GET', '/user/:userId', resolver) - const firstTest = await handler.test( - new Request(new URL('/login', location.href)), - ) - const secondTest = await handler.test( - new Request(new URL('/user/', location.href)), - ) - const thirdTest = await handler.test( - new Request(new URL('/user/abc-123/extra', location.href)), - ) + const firstTest = await handler.test({ + request: new Request(new URL('/login', location.href)), + }) + const secondTest = await handler.test({ + request: new Request(new URL('/user/', location.href)), + }) + const thirdTest = await handler.test({ + request: new Request(new URL('/user/abc-123/extra', location.href)), + }) expect(firstTest).toBe(false) expect(secondTest).toBe(false) @@ -138,7 +151,7 @@ describe('run', () => { test('returns a mocked response given a matching request', async () => { 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) + const result = await handler.run({ request }) expect(result!.handler).toEqual(handler) expect(result!.parsedResult).toEqual({ @@ -159,18 +172,18 @@ describe('run', () => { test('returns null given a non-matching request', async () => { const handler = new HttpHandler('POST', '/login', resolver) - const result = await handler.run( - new Request(new URL('/users', location.href)), - ) + const result = await handler.run({ + request: new Request(new URL('/users', location.href)), + }) expect(result).toBeNull() }) test('returns an empty "params" object given request with no URL parameters', async () => { const handler = new HttpHandler('GET', '/users', resolver) - const result = await handler.run( - new Request(new URL('/users', location.href)), - ) + const result = await handler.run({ + request: new Request(new URL('/users', location.href)), + }) expect(result?.parsedResult?.match?.params).toEqual({}) }) @@ -188,9 +201,9 @@ describe('run', () => { }) const run = async () => { - const result = await handler.run( - new Request(new URL('/users', location.href)), - ) + const result = await handler.run({ + request: new Request(new URL('/users', location.href)), + }) return result?.response?.text() } diff --git a/src/core/handlers/HttpHandler.ts b/src/core/handlers/HttpHandler.ts index cfb3700f9..963814785 100644 --- a/src/core/handlers/HttpHandler.ts +++ b/src/core/handlers/HttpHandler.ts @@ -106,14 +106,17 @@ export class HttpHandler extends RequestHandler< ) } - async parse(request: Request, resolutionContext?: ResponseResolutionContext) { - const url = new URL(request.url) + async parse(args: { + request: Request + resolutionContext?: ResponseResolutionContext + }) { + const url = new URL(args.request.url) const match = matchRequestUrl( url, this.info.path, - resolutionContext?.baseUrl, + args.resolutionContext?.baseUrl, ) - const cookies = getAllRequestCookies(request) + const cookies = getAllRequestCookies(args.request) return { match, @@ -121,9 +124,9 @@ export class HttpHandler extends RequestHandler< } } - predicate(request: Request, parsedResult: HttpRequestParsedResult) { - const hasMatchingMethod = this.matchMethod(request.method) - const hasMatchingUrl = parsedResult.match.matches + predicate(args: { request: Request; parsedResult: HttpRequestParsedResult }) { + const hasMatchingMethod = this.matchMethod(args.request.method) + const hasMatchingUrl = args.parsedResult.match.matches return hasMatchingMethod && hasMatchingUrl } @@ -133,26 +136,26 @@ export class HttpHandler extends RequestHandler< : isStringEqual(this.info.method, actualMethod) } - protected extendInfo( - _request: Request, - parsedResult: HttpRequestParsedResult, - ) { + protected extendResolverArgs(args: { + request: Request + parsedResult: HttpRequestParsedResult + }) { return { - params: parsedResult.match?.params || {}, - cookies: parsedResult.cookies, + params: args.parsedResult.match?.params || {}, + cookies: args.parsedResult.cookies, } } - async log(request: Request, response: Response) { - const publicUrl = getPublicUrlFromRequest(request) - const loggedRequest = await serializeRequest(request) - const loggedResponse = await serializeResponse(response) + async log(args: { request: Request; response: Response }) { + const publicUrl = getPublicUrlFromRequest(args.request) + const loggedRequest = await serializeRequest(args.request) + const loggedResponse = await serializeResponse(args.response) const statusColor = getStatusCodeColor(loggedResponse.status) console.groupCollapsed( devUtils.formatMessage('%s %s %s (%c%s%c)'), getTimestamp(), - request.method, + args.request.method, publicUrl, `color:${statusColor}`, `${loggedResponse.status} ${loggedResponse.statusText}`, diff --git a/src/core/handlers/RequestHandler.ts b/src/core/handlers/RequestHandler.ts index b2216e631..8369ec233 100644 --- a/src/core/handlers/RequestHandler.ts +++ b/src/core/handlers/RequestHandler.ts @@ -122,50 +122,55 @@ export abstract class RequestHandler< /** * Determine if the intercepted request should be mocked. */ - abstract predicate( - request: Request, - parsedResult: ParsedResult, - resolutionContext?: ResponseResolutionContext, - ): boolean + abstract predicate(args: { + request: Request + parsedResult: ParsedResult + resolutionContext?: ResponseResolutionContext + }): boolean /** * Print out the successfully handled request. */ - abstract log( - request: Request, - response: Response, - parsedResult: ParsedResult, - ): void + abstract log(args: { + request: Request + response: Response + parsedResult: ParsedResult + }): void /** * Parse the intercepted request to extract additional information from it. * Parsed result is then exposed to other methods of this request handler. */ - async parse( - _request: Request, - _resolutionContext?: ResponseResolutionContext, - ): Promise { + async parse(_args: { + request: Request + resolutionContext?: ResponseResolutionContext + }): Promise { return {} as ParsedResult } /** * Test if this handler matches the given request. */ - public async test( - request: Request, - resolutionContext?: ResponseResolutionContext, - ): Promise { - return this.predicate( - request, - await this.parse(request.clone(), resolutionContext), - resolutionContext, - ) + public async test(args: { + request: Request + resolutionContext?: ResponseResolutionContext + }): Promise { + const parsedResult = await this.parse({ + request: args.request.clone(), + resolutionContext: args.resolutionContext, + }) + + return this.predicate({ + request: args.request, + parsedResult, + resolutionContext: args.resolutionContext, + }) } - protected extendInfo( - _request: Request, - _parsedResult: ParsedResult, - ): ResolverExtras { + protected extendResolverArgs(_args: { + request: Request + parsedResult: ParsedResult + }): ResolverExtras { return {} as ResolverExtras } @@ -173,30 +178,30 @@ export abstract class RequestHandler< * Execute this request handler and produce a mocked response * using the given resolver function. */ - public async run( - request: StrictRequest, - resolutionContext?: ResponseResolutionContext, - ): Promise | null> { + public async run(args: { + request: StrictRequest + resolutionContext?: ResponseResolutionContext + }): Promise | null> { if (this.isUsed && this.options?.once) { return null } - const mainRequestRef = request.clone() + const mainRequestRef = args.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 parsedResult = await this.parse( - mainRequestRef.clone(), - resolutionContext, - ) - const shouldInterceptRequest = this.predicate( - mainRequestRef.clone(), + const parsedResult = await this.parse({ + request: mainRequestRef.clone(), + resolutionContext: args.resolutionContext, + }) + const shouldInterceptRequest = this.predicate({ + request: mainRequestRef.clone(), parsedResult, - resolutionContext, - ) + resolutionContext: args.resolutionContext, + }) if (!shouldInterceptRequest) { return null @@ -206,19 +211,22 @@ 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.extendResolverArgs({ + request: args.request, + parsedResult, + }) const mockedResponse = (await executeResolver({ ...resolverExtras, - request, + request: args.request, })) as Response - const executionResult = this.createExecutionResult( + const executionResult = this.createExecutionResult({ // Pass the cloned request to the result so that logging // and other consumers could read its body once more. - mainRequestRef, + request: mainRequestRef, + response: mockedResponse, parsedResult, - mockedResponse, - ) + }) return executionResult } @@ -272,16 +280,16 @@ export abstract class RequestHandler< } } - private createExecutionResult( - request: Request, - parsedResult: ParsedResult, - response?: Response, - ): RequestHandlerExecutionResult { + private createExecutionResult(args: { + request: Request + parsedResult: ParsedResult + response?: Response + }): RequestHandlerExecutionResult { return { handler: this, - parsedResult, - request, - response, + request: args.request, + response: args.response, + parsedResult: args.parsedResult, } } } diff --git a/src/core/utils/getResponse.ts b/src/core/utils/getResponse.ts index 2644ebf28..131804d8b 100644 --- a/src/core/utils/getResponse.ts +++ b/src/core/utils/getResponse.ts @@ -5,7 +5,7 @@ import { export interface ResponseLookupResult { handler: RequestHandler - parsedRequest?: any + parsedResult?: any response?: Response } @@ -25,7 +25,7 @@ export const getResponse = async >( let result: RequestHandlerExecutionResult | null = null for (const handler of handlers) { - result = await handler.run(request, resolutionContext) + result = await handler.run({ request, resolutionContext }) // If the handler produces some result for this request, // it automatically becomes matching. @@ -46,7 +46,7 @@ export const getResponse = async >( if (matchingHandler) { return { handler: matchingHandler, - parsedRequest: result?.parsedResult, + parsedResult: result?.parsedResult, response: result?.response, } } diff --git a/src/core/utils/handleRequest.test.ts b/src/core/utils/handleRequest.test.ts index 159f44b3e..a89bd00f3 100644 --- a/src/core/utils/handleRequest.test.ts +++ b/src/core/utils/handleRequest.test.ts @@ -187,7 +187,7 @@ test('returns the mocked response for a request with a matching request handler' handler: handlers[0], response: mockedResponse, request, - parsedRequest: { + parsedResult: { match: { matches: true, params: {} }, cookies: {}, }, @@ -222,7 +222,7 @@ test('returns the mocked response for a request with a matching request handler' expect(lookupResultParam).toEqual({ handler: lookupResult.handler, - parsedRequest: lookupResult.parsedRequest, + parsedResult: lookupResult.parsedResult, response: expect.objectContaining({ status: lookupResult.response.status, statusText: lookupResult.response.statusText, @@ -252,7 +252,7 @@ test('returns a transformed response if the "transformResponse" option is provid handler: handlers[0], response: mockedResponse, request, - parsedRequest: { + parsedResult: { match: { matches: true, params: {} }, cookies: {}, }, @@ -305,7 +305,7 @@ test('returns a transformed response if the "transformResponse" option is provid expect(lookupResultParam).toEqual({ handler: lookupResult.handler, - parsedRequest: lookupResult.parsedRequest, + parsedResult: lookupResult.parsedResult, response: expect.objectContaining({ status: lookupResult.response.status, statusText: lookupResult.response.statusText, From 078e541e065d8c4328bcb555da3cdccd07f36b51 Mon Sep 17 00:00:00 2001 From: Laryssa Rocha Date: Tue, 10 Oct 2023 07:00:53 -0300 Subject: [PATCH 166/180] fix(worker): replace `Math.random()` with `crypto.randomUUID()` (#1762) --- src/mockServiceWorker.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mockServiceWorker.js b/src/mockServiceWorker.js index 41ee9a29d..faa67b6c8 100644 --- a/src/mockServiceWorker.js +++ b/src/mockServiceWorker.js @@ -107,7 +107,7 @@ self.addEventListener('fetch', function (event) { } // Generate unique request ID. - const requestId = Math.random().toString(16).slice(2) + const requestId = crypto.randomUUID() event.respondWith(handleRequest(event, requestId)) }) From 17d5f3ab918137161df52836fa617505a7fb8a86 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 10 Oct 2023 14:43:01 +0200 Subject: [PATCH 167/180] fix(setupServer): set max listeners on the "request.signal" (#1765) --- src/core/handlers/RequestHandler.ts | 8 ++- src/node/SetupServerApi.ts | 13 +++++ .../msw-api/many-request-handlers.test.ts | 58 +++++++++++++++++++ 3 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 test/node/msw-api/many-request-handlers.test.ts diff --git a/src/core/handlers/RequestHandler.ts b/src/core/handlers/RequestHandler.ts index 8369ec233..917d6edc4 100644 --- a/src/core/handlers/RequestHandler.ts +++ b/src/core/handlers/RequestHandler.ts @@ -156,7 +156,7 @@ export abstract class RequestHandler< resolutionContext?: ResponseResolutionContext }): Promise { const parsedResult = await this.parse({ - request: args.request.clone(), + request: args.request, resolutionContext: args.resolutionContext, }) @@ -186,6 +186,8 @@ export abstract class RequestHandler< return null } + // Clone the request instance before it's passed to the handler phases + // and the response resolver so we can always read it for logging. const mainRequestRef = args.request.clone() // Immediately mark the handler as used. @@ -194,11 +196,11 @@ export abstract class RequestHandler< this.isUsed = true const parsedResult = await this.parse({ - request: mainRequestRef.clone(), + request: args.request, resolutionContext: args.resolutionContext, }) const shouldInterceptRequest = this.predicate({ - request: mainRequestRef.clone(), + request: args.request, parsedResult, resolutionContext: args.resolutionContext, }) diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index ebf2d7650..ebacb5c57 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -1,3 +1,4 @@ +import { setMaxListeners, defaultMaxListeners } from 'node:events' import { invariant } from 'outvariant' import { BatchInterceptor, @@ -50,6 +51,18 @@ export class SetupServerApi */ private init(): void { this.interceptor.on('request', async ({ request, requestId }) => { + // Bump the maximum number of event listeners on the + // request's "AbortSignal". This prepares the request + // for each request handler cloning it at least once. + // Note that cloning a request automatically appends a + // new "abort" event listener to the parent request's + // "AbortController" so if the parent aborts, all the + // clones are automatically aborted. + setMaxListeners( + Math.max(defaultMaxListeners, this.currentHandlers.length), + request.signal, + ) + const response = await handleRequest( request, requestId, diff --git a/test/node/msw-api/many-request-handlers.test.ts b/test/node/msw-api/many-request-handlers.test.ts new file mode 100644 index 000000000..ecdd4d793 --- /dev/null +++ b/test/node/msw-api/many-request-handlers.test.ts @@ -0,0 +1,58 @@ +/** + * @jest-environment node + */ +import { graphql, http, HttpResponse } from 'msw' +import { setupServer } from 'msw/node' + +// Create a large number of request handlers. +const restHandlers = new Array(100).fill(null).map((_, index) => { + return http.post( + `https://example.com/resource/${index}`, + async ({ request }) => { + const text = await request.text() + return HttpResponse.text(text + index.toString()) + }, + ) +}) + +const graphqlHanlers = new Array(100).fill(null).map((_, index) => { + return graphql.query(`Get${index}`, () => { + return HttpResponse.json({ data: { index } }) + }) +}) + +const server = setupServer(...restHandlers, ...graphqlHanlers) + +beforeAll(() => { + server.listen() + jest.spyOn(process.stderr, 'write') +}) + +afterAll(() => { + server.close() + jest.restoreAllMocks() +}) + +it('does not print a memory leak warning when having many request handlers', async () => { + const httpResponse = await fetch('https://example.com/resource/42', { + method: 'POST', + body: 'request-body-', + }).then((response) => response.text()) + + const graphqlResponse = await fetch('https://example.com', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + query: `query Get42 { index }`, + }), + }).then((response) => response.json()) + + // Must not print any memory leak warnings. + expect(process.stderr.write).not.toHaveBeenCalled() + + // Must return the mocked response. + expect(httpResponse).toBe('request-body-42') + expect(graphqlResponse).toEqual({ data: { index: 42 } }) +}) From 89be69f00d978f86be10670ffb9364991f2ae4be Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 10 Oct 2023 17:21:13 +0200 Subject: [PATCH 168/180] chore(release): v0.0.0-fetch.rc-21 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b826ed43d..4dbda2045 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-20", + "version": "0.0.0-fetch.rc-21", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/core/index.js", "module": "./lib/core/index.mjs", From b04c168c4b7a645fb727d50622d5d7ba93ec916b Mon Sep 17 00:00:00 2001 From: Matthew Costabile Date: Thu, 12 Oct 2023 04:26:52 -0400 Subject: [PATCH 169/180] chore: re-add inquirer (#1766) --- package.json | 1 + pnpm-lock.yaml | 42 ++---------------------------------------- 2 files changed, 3 insertions(+), 40 deletions(-) diff --git a/package.json b/package.json index 4dbda2045..cb7853d38 100644 --- a/package.json +++ b/package.json @@ -124,6 +124,7 @@ "formdata-node": "4.4.1", "graphql": "^16.8.1", "headers-polyfill": "^4.0.1", + "inquirer": "^8.2.0", "is-node-process": "^1.2.0", "js-levenshtein": "^1.1.6", "node-fetch": "^2.6.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a83e0c628..84896c459 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,6 +53,7 @@ specifiers: glob: ^9.3.4 graphql: ^16.8.1 headers-polyfill: ^4.0.1 + inquirer: ^8.2.0 is-node-process: ^1.2.0 jest: ^29.4.3 jest-environment-jsdom: ^29.4.3 @@ -94,6 +95,7 @@ dependencies: formdata-node: 4.4.1 graphql: 16.8.1 headers-polyfill: 4.0.1 + inquirer: 8.2.5 is-node-process: 1.2.0 js-levenshtein: 1.1.6 node-fetch: 2.6.9 @@ -3449,7 +3451,6 @@ packages: engines: {node: '>=8'} dependencies: type-fest: 0.21.3 - dev: true /ansi-html-community/0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} @@ -3985,7 +3986,6 @@ packages: /base64-js/1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true /base64id/2.0.0: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} @@ -4014,7 +4014,6 @@ packages: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.0 - dev: true /body-parser/1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} @@ -4134,7 +4133,6 @@ packages: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true /builtin-modules/3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} @@ -4276,7 +4274,6 @@ packages: /chardet/0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true /chokidar/3.4.1: resolution: {integrity: sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==} @@ -4326,12 +4323,10 @@ packages: engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 - dev: true /cli-spinners/2.7.0: resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==} engines: {node: '>=6'} - dev: true /cli-truncate/2.1.0: resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} @@ -4352,7 +4347,6 @@ packages: /cli-width/3.0.0: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} - dev: true /cliui/5.0.0: resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} @@ -4382,7 +4376,6 @@ packages: /clone/1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} - dev: true /clone/2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} @@ -4956,7 +4949,6 @@ packages: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 - dev: true /define-lazy-prop/2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} @@ -5375,7 +5367,6 @@ packages: /escape-string-regexp/1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - dev: true /escape-string-regexp/2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} @@ -5763,7 +5754,6 @@ packages: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 - dev: true /extglob/2.0.4_supports-color@6.1.0: resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} @@ -5841,7 +5831,6 @@ packages: engines: {node: '>=8'} dependencies: escape-string-regexp: 1.0.5 - dev: true /file-entry-cache/6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} @@ -6551,7 +6540,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 - dev: true /iconv-lite/0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} @@ -6562,7 +6550,6 @@ packages: /ieee754/1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true /ignore/4.0.6: resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} @@ -6623,7 +6610,6 @@ packages: /inherits/2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true /ini/1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} @@ -6648,7 +6634,6 @@ packages: strip-ansi: 6.0.1 through: 2.3.8 wrap-ansi: 7.0.0 - dev: true /internal-ip/4.3.0: resolution: {integrity: sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==} @@ -6858,7 +6843,6 @@ packages: /is-interactive/1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} - dev: true /is-module/1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} @@ -7002,7 +6986,6 @@ packages: /is-unicode-supported/0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} - dev: true /is-utf8/0.2.1: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} @@ -7970,7 +7953,6 @@ packages: /lodash/4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true /log-symbols/4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} @@ -7978,7 +7960,6 @@ packages: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: true /log-update/4.0.0: resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} @@ -8176,7 +8157,6 @@ packages: /mimic-fn/2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - dev: true /mimic-fn/4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} @@ -8283,7 +8263,6 @@ packages: /mute-stream/0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - dev: true /mz/2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -8523,7 +8502,6 @@ packages: engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - dev: true /onetime/6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} @@ -8589,12 +8567,10 @@ 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 /outvariant/1.4.0: resolution: {integrity: sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==} @@ -9143,7 +9119,6 @@ packages: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true /readdirp/3.4.0: resolution: {integrity: sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==} @@ -9337,7 +9312,6 @@ packages: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true /ret/0.1.15: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} @@ -9391,7 +9365,6 @@ packages: /run-async/2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} - dev: true /run-parallel/1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -9403,7 +9376,6 @@ packages: resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: tslib: 2.5.0 - dev: true /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -9411,7 +9383,6 @@ packages: /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true /safe-regex-test/1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} @@ -9434,7 +9405,6 @@ packages: /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true /saxes/6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} @@ -9668,7 +9638,6 @@ packages: /signal-exit/3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true /simple-git-hooks/2.8.1: resolution: {integrity: sha512-DYpcVR1AGtSfFUNzlBdHrQGPsOhuuEJ/FkmPOOlFysP60AHd3nsEpkGq/QEOdtUyT1Qhk7w9oLmFoMG+75BDog==} @@ -10050,7 +10019,6 @@ packages: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 - dev: true /strip-ansi/3.0.1: resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} @@ -10276,7 +10244,6 @@ packages: /through/2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true /through2/2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} @@ -10300,7 +10267,6 @@ packages: engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 - dev: true /tmpl/1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} @@ -10461,7 +10427,6 @@ packages: /tslib/2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - dev: true /tsscmp/1.0.6: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} @@ -10547,7 +10512,6 @@ packages: /type-fest/0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - dev: true /type-fest/0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} @@ -10733,7 +10697,6 @@ packages: /util-deprecate/1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true /util.promisify/1.1.1: resolution: {integrity: sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==} @@ -10821,7 +10784,6 @@ packages: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 - dev: true /web-streams-polyfill/4.0.0-beta.3: resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} From 595d6f397ffbb7045a5615797b0be9f4b1290cab Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 12 Oct 2023 19:14:31 +0200 Subject: [PATCH 170/180] chore(release): v0.0.0-fetch.rc-22 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cb7853d38..9a76850ff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-21", + "version": "0.0.0-fetch.rc-22", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/core/index.js", "module": "./lib/core/index.mjs", From b028c663c116304c4b130628c4cf72a1fe00d2c7 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sun, 15 Oct 2023 13:31:40 +0200 Subject: [PATCH 171/180] test(browser): add ReadableStream response body test (#1770) --- .../response/body/body-stream.mocks.ts | 29 ++++++++++++ .../response/body/body-stream.test.ts | 46 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 test/browser/rest-api/response/body/body-stream.mocks.ts create mode 100644 test/browser/rest-api/response/body/body-stream.test.ts diff --git a/test/browser/rest-api/response/body/body-stream.mocks.ts b/test/browser/rest-api/response/body/body-stream.mocks.ts new file mode 100644 index 000000000..cd88c669f --- /dev/null +++ b/test/browser/rest-api/response/body/body-stream.mocks.ts @@ -0,0 +1,29 @@ +import { http, HttpResponse, delay } from 'msw' +import { setupWorker } from 'msw/browser' + +const encoder = new TextEncoder() +const chunks = ['hello', 'streaming', 'world'] + +const worker = setupWorker( + http.get('/stream', () => { + const stream = new ReadableStream({ + async start(controller) { + for (const chunk of chunks) { + controller.enqueue(encoder.encode(chunk)) + await delay(250) + } + + controller.close() + }, + }) + + return new HttpResponse(stream, { + headers: { + 'Content-Type': 'application/octet-stream', + 'Content-Length': chunks.join('').length.toString(), + }, + }) + }), +) + +worker.start() diff --git a/test/browser/rest-api/response/body/body-stream.test.ts b/test/browser/rest-api/response/body/body-stream.test.ts new file mode 100644 index 000000000..43b76d5a1 --- /dev/null +++ b/test/browser/rest-api/response/body/body-stream.test.ts @@ -0,0 +1,46 @@ +import { test, expect } from '../../../playwright.extend' + +test('responds with a mocked ReadableStream response', async ({ + loadExample, + page, +}) => { + await loadExample(require.resolve('./body-stream.mocks.ts')) + + const chunks = await page.evaluate(() => { + return fetch('/stream').then(async (res) => { + if (res.body === null) { + return [] + } + + const decoder = new TextDecoder() + const chunks: Array<{ text: string; timestamp: number }> = [] + const reader = res.body.getReader() + + while (true) { + const { value, done } = await reader.read() + + if (done) { + return chunks + } + + chunks.push({ + text: decoder.decode(value), + timestamp: Date.now(), + }) + } + }) + }) + + // Must stream the mocked response in three chunks. + const chunksText = chunks.map((chunk) => chunk.text) + expect(chunksText).toEqual(['hello', 'streaming', 'world']) + + const chunkDeltas = chunks.map((chunk, index) => { + const prevChunk = chunks[index - 1] + return prevChunk ? chunk.timestamp - prevChunk.timestamp : 0 + }) + + expect(chunkDeltas[0]).toBe(0) + expect(chunkDeltas[1]).toBeGreaterThanOrEqual(200) + expect(chunkDeltas[2]).toBeGreaterThanOrEqual(200) +}) From 6405bea457336020559999770d34ae5823b493b7 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Sun, 15 Oct 2023 16:03:50 +0200 Subject: [PATCH 172/180] fix: transfer response buffer on safari (#1771) --- src/browser/setupWorker/glossary.ts | 7 +++-- src/browser/setupWorker/setupWorker.ts | 12 ++++--- .../start/createRequestListener.ts | 31 +++++++++++++------ .../utils/supportsReadableStreamTransfer.ts | 17 ++++++++++ 4 files changed, 51 insertions(+), 16 deletions(-) create mode 100644 src/browser/utils/supportsReadableStreamTransfer.ts diff --git a/src/browser/setupWorker/glossary.ts b/src/browser/setupWorker/glossary.ts index 084f3cc65..23017c6ec 100644 --- a/src/browser/setupWorker/glossary.ts +++ b/src/browser/setupWorker/glossary.ts @@ -72,7 +72,7 @@ export type ServiceWorkerOutgoingEventTypes = | 'CLIENT_CLOSED' export interface StringifiedResponse extends ResponseInit { - body: string | ReadableStream | null + body: string | ArrayBuffer | ReadableStream | null } /** @@ -146,7 +146,10 @@ export interface SetupWorkerInternalContext { ServiceWorkerMessage > } - useFallbackMode: boolean + supports: { + serviceWorkerApi: boolean + readableStreamTransfer: boolean + } fallbackInterceptor?: Interceptor } diff --git a/src/browser/setupWorker/setupWorker.ts b/src/browser/setupWorker/setupWorker.ts index 301e4e520..b89376641 100644 --- a/src/browser/setupWorker/setupWorker.ts +++ b/src/browser/setupWorker/setupWorker.ts @@ -20,6 +20,7 @@ import { SetupApi } from '~/core/SetupApi' import { mergeRight } from '~/core/utils/internal/mergeRight' import { LifeCycleEventsMap } from '~/core/sharedOptions' import { SetupWorker } from './glossary' +import { supportsReadableStreamTransfer } from '../utils/supportsReadableStreamTransfer' interface Listener { target: EventTarget @@ -142,8 +143,11 @@ export class SetupWorkerApi }) }, }, - useFallbackMode: - !('serviceWorker' in navigator) || location.protocol === 'file:', + supports: { + serviceWorkerApi: + !('serviceWorker' in navigator) || location.protocol === 'file:', + readableStreamTransfer: supportsReadableStreamTransfer(), + }, } /** @@ -156,11 +160,11 @@ export class SetupWorkerApi }, }) - this.startHandler = context.useFallbackMode + this.startHandler = context.supports.serviceWorkerApi ? createFallbackStart(context) : createStartHandler(context) - this.stopHandler = context.useFallbackMode + this.stopHandler = context.supports.serviceWorkerApi ? createFallbackStop(context) : createStop(context) diff --git a/src/browser/setupWorker/start/createRequestListener.ts b/src/browser/setupWorker/start/createRequestListener.ts index dccd989de..b6ee1e56a 100644 --- a/src/browser/setupWorker/start/createRequestListener.ts +++ b/src/browser/setupWorker/start/createRequestListener.ts @@ -47,18 +47,29 @@ export const createRequestListener = ( // ".log()" method of the request handler. const responseClone = response.clone() const responseInit = toResponseInit(response) - const responseStream = responseClone.body - messageChannel.postMessage( - 'MOCK_RESPONSE', - { + /** + * @note Safari doesn't support transferring a "ReadableStream". + * Check that the browser supports that before sending it to the worker. + */ + if (context.supports.readableStreamTransfer) { + const responseStream = response.body + messageChannel.postMessage( + 'MOCK_RESPONSE', + { + ...responseInit, + body: responseStream, + }, + responseStream ? [responseStream] : undefined, + ) + } else { + // As a fallback, send the response body buffer to the worker. + const responseBuffer = await responseClone.arrayBuffer() + messageChannel.postMessage('MOCK_RESPONSE', { ...responseInit, - body: responseStream, - }, - // Transfer response's buffer so it could - // be sent over to the worker. - responseStream ? [responseStream] : undefined, - ) + body: responseBuffer, + }) + } if (!options.quiet) { context.emitter.once('response:mocked', ({ response }) => { diff --git a/src/browser/utils/supportsReadableStreamTransfer.ts b/src/browser/utils/supportsReadableStreamTransfer.ts new file mode 100644 index 000000000..b1c5dc295 --- /dev/null +++ b/src/browser/utils/supportsReadableStreamTransfer.ts @@ -0,0 +1,17 @@ +/** + * Returns a boolean indicating whether the current browser + * supports `ReadableStream` as a `Transferable` when posting + * messages. + */ +export function supportsReadableStreamTransfer() { + try { + const stream = new ReadableStream({ + start: (controller) => controller.close(), + }) + const message = new MessageChannel() + message.port1.postMessage(stream, [stream]) + return true + } catch (error) { + return false + } +} From f2073682cebd6305ae2a3b4f588220b8e7384e41 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Tue, 17 Oct 2023 10:31:26 +0200 Subject: [PATCH 173/180] chore(release): v0.0.0-fetch.rc-23 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9a76850ff..760461448 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-22", + "version": "0.0.0-fetch.rc-23", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/core/index.js", "module": "./lib/core/index.mjs", From f5f31fa42878466458f6f63945ed40df2dbbd0f4 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Wed, 18 Oct 2023 10:26:01 +0200 Subject: [PATCH 174/180] fix: check "setMaxListeners" in react native (#1773) --- src/node/SetupServerApi.ts | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index ebacb5c57..557ce47b5 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -51,17 +51,22 @@ export class SetupServerApi */ private init(): void { this.interceptor.on('request', async ({ request, requestId }) => { - // Bump the maximum number of event listeners on the - // request's "AbortSignal". This prepares the request - // for each request handler cloning it at least once. - // Note that cloning a request automatically appends a - // new "abort" event listener to the parent request's - // "AbortController" so if the parent aborts, all the - // clones are automatically aborted. - setMaxListeners( - Math.max(defaultMaxListeners, this.currentHandlers.length), - request.signal, - ) + /** + * @note React Native doesn't have "node:events". + */ + if (typeof setMaxListeners === 'function') { + // Bump the maximum number of event listeners on the + // request's "AbortSignal". This prepares the request + // for each request handler cloning it at least once. + // Note that cloning a request automatically appends a + // new "abort" event listener to the parent request's + // "AbortController" so if the parent aborts, all the + // clones are automatically aborted. + setMaxListeners( + Math.max(defaultMaxListeners, this.currentHandlers.length), + request.signal, + ) + } const response = await handleRequest( request, From cb0a5cdf924d2252aea2a17c26ceb4444379d0bb Mon Sep 17 00:00:00 2001 From: Christoph Fricke Date: Fri, 20 Oct 2023 11:48:52 +0200 Subject: [PATCH 175/180] fix(setupServer): suppress "ERR_INVALID_ARG_TYPE" (AbortSignal) errors from "setMaxListeners" in jsdom (#1779) Co-authored-by: Artem Zakharchenko --- src/node/SetupServerApi.ts | 27 ++++++-- src/node/utils/isNodeException.ts | 10 +++ test/jest.config.js | 1 + .../many-request-handlers-jsdom.test.ts | 65 +++++++++++++++++++ .../many-request-handlers.test.ts | 0 5 files changed, 99 insertions(+), 4 deletions(-) create mode 100644 src/node/utils/isNodeException.ts create mode 100644 test/node/regressions/many-request-handlers-jsdom.test.ts rename test/node/{msw-api => regressions}/many-request-handlers.test.ts (100%) diff --git a/src/node/SetupServerApi.ts b/src/node/SetupServerApi.ts index 557ce47b5..a451f521b 100644 --- a/src/node/SetupServerApi.ts +++ b/src/node/SetupServerApi.ts @@ -14,6 +14,7 @@ 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 { isNodeException } from './utils/isNodeException' const DEFAULT_LISTEN_OPTIONS: RequiredDeep = { onUnhandledRequest: 'warn', @@ -62,10 +63,28 @@ export class SetupServerApi // new "abort" event listener to the parent request's // "AbortController" so if the parent aborts, all the // clones are automatically aborted. - setMaxListeners( - Math.max(defaultMaxListeners, this.currentHandlers.length), - request.signal, - ) + try { + setMaxListeners( + Math.max(defaultMaxListeners, this.currentHandlers.length), + request.signal, + ) + } catch (error: unknown) { + /** + * @note Mock environments (JSDOM, ...) are not able to implement an internal + * "kIsNodeEventTarget" Symbol that Node.js uses to identify Node.js `EventTarget`s. + * `setMaxListeners` throws an error for non-Node.js `EventTarget`s. + * At the same time, mock environments are also not able to implement the + * internal "events.maxEventTargetListenersWarned" Symbol, which results in + * "MaxListenersExceededWarning" not being printed by Node.js for those anyway. + * The main reason for using `setMaxListeners` is to suppress these warnings in Node.js, + * which won't be printed anyway if `setMaxListeners` fails. + */ + if ( + !(isNodeException(error) && error.code === 'ERR_INVALID_ARG_TYPE') + ) { + throw error + } + } } const response = await handleRequest( diff --git a/src/node/utils/isNodeException.ts b/src/node/utils/isNodeException.ts new file mode 100644 index 000000000..268e5b8a5 --- /dev/null +++ b/src/node/utils/isNodeException.ts @@ -0,0 +1,10 @@ +/** + * Determines if the given value is a Node.js exception. + * Node.js exceptions have additional information, like + * the `code` and `errno` properties. + */ +export function isNodeException( + error: unknown, +): error is NodeJS.ErrnoException { + return error instanceof Error && 'code' in error +} diff --git a/test/jest.config.js b/test/jest.config.js index e4a1a94ca..1f8692b34 100644 --- a/test/jest.config.js +++ b/test/jest.config.js @@ -20,6 +20,7 @@ module.exports = { customExportConditions: [''], }, globals: { + fetch, Request, Response, TextEncoder, diff --git a/test/node/regressions/many-request-handlers-jsdom.test.ts b/test/node/regressions/many-request-handlers-jsdom.test.ts new file mode 100644 index 000000000..c2c81c2a6 --- /dev/null +++ b/test/node/regressions/many-request-handlers-jsdom.test.ts @@ -0,0 +1,65 @@ +/** + * @jest-environment jsdom + * + * @note In JSDOM, the "AbortSignal" class is polyfilled instead of + * using the Node.js global. Because of that, its instances won't + * pass the instance check of "require('event').setMaxListeners" + * (that's based on the internal Node.js symbol), resulting in + * an exception. + * @see https://github.com/mswjs/msw/pull/1779 + */ +import { graphql, http, HttpResponse } from 'msw' +import { setupServer } from 'msw/node' + +// Create a large number of request handlers. +const restHandlers = new Array(100).fill(null).map((_, index) => { + return http.post( + `https://example.com/resource/${index}`, + async ({ request }) => { + const text = await request.text() + return HttpResponse.text(text + index.toString()) + }, + ) +}) + +const graphqlHanlers = new Array(100).fill(null).map((_, index) => { + return graphql.query(`Get${index}`, () => { + return HttpResponse.json({ data: { index } }) + }) +}) + +const server = setupServer(...restHandlers, ...graphqlHanlers) + +beforeAll(() => { + server.listen() + jest.spyOn(process.stderr, 'write') +}) + +afterAll(() => { + server.close() + jest.restoreAllMocks() +}) + +it('does not print a memory leak warning when having many request handlers', async () => { + const httpResponse = await fetch('https://example.com/resource/42', { + method: 'POST', + body: 'request-body-', + }).then((response) => response.text()) + + const graphqlResponse = await fetch('https://example.com', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + query: `query Get42 { index }`, + }), + }).then((response) => response.json()) + + // Must not print any memory leak warnings. + expect(process.stderr.write).not.toHaveBeenCalled() + + // Must return the mocked response. + expect(httpResponse).toBe('request-body-42') + expect(graphqlResponse).toEqual({ data: { index: 42 } }) +}) diff --git a/test/node/msw-api/many-request-handlers.test.ts b/test/node/regressions/many-request-handlers.test.ts similarity index 100% rename from test/node/msw-api/many-request-handlers.test.ts rename to test/node/regressions/many-request-handlers.test.ts From 1f555726495b79bdcedf722220d442677a305b94 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Fri, 20 Oct 2023 11:54:49 +0200 Subject: [PATCH 176/180] chore(release): v0.0.0-fetch.rc-24 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 760461448..7f590d4ce 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-23", + "version": "0.0.0-fetch.rc-24", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/core/index.js", "module": "./lib/core/index.mjs", From 7d6d82de8852a03b460e99c600955cab6f66a78f Mon Sep 17 00:00:00 2001 From: Christoph Fricke Date: Fri, 20 Oct 2023 14:51:08 +0200 Subject: [PATCH 177/180] fix(core): export the "RequestHandlerOptions" type (#1774) Co-authored-by: Artem Zakharchenko --- src/core/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/index.ts b/src/core/index.ts index 9deaa86d5..d7bf7f968 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -24,6 +24,7 @@ export type { ResponseResolver, ResponseResolverReturnType, AsyncResponseResolverReturnType, + RequestHandlerOptions, DefaultBodyType, DefaultRequestMultipartBody, } from './handlers/RequestHandler' From 22666b96179824bdb39b6fd607f1ef04332920ac Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 23 Oct 2023 09:06:30 +0200 Subject: [PATCH 178/180] chore: revert rc version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7f590d4ce..8aec4edaa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msw", - "version": "0.0.0-fetch.rc-24", + "version": "1.3.2", "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.", "main": "./lib/core/index.js", "module": "./lib/core/index.mjs", From 144b54872713b311e8f16813cd6e63762eeda909 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 23 Oct 2023 09:19:50 +0200 Subject: [PATCH 179/180] docs: update discord link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8616605b7..1201a35b5 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ > [!IMPORTANT]\ -> **MSW 2.0 is finally here! 🎉** Read the [Release notes](https://github.com/mswjs/msw/releases/tag/v2.0.0) and please follow the [**Migration guidelines**](https://mswjs.io/docs/migrations/1.x-to-2.x) to upgrade. If you're having any questions while upgrading, please reach out in our [Discord server](https://discord.gg/z29WbnfDC5). +> **MSW 2.0 is finally here! 🎉** Read the [Release notes](https://github.com/mswjs/msw/releases/tag/v2.0.0) and please follow the [**Migration guidelines**](https://mswjs.io/docs/migrations/1.x-to-2.x) to upgrade. If you're having any questions while upgrading, please reach out in our [Discord server](https://kettanaito.com/discord).
From cbba4b5a316e921c3ce6f2ba89a91dfd4b1d3815 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 23 Oct 2023 09:22:30 +0200 Subject: [PATCH 180/180] docs: update docs links --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1201a35b5..38edf3573 100644 --- a/README.md +++ b/README.md @@ -41,8 +41,7 @@ This README will give you a brief overview on the library but there's no better place to start with Mock Service Worker than its official documentation. - [Documentation](https://mswjs.io/docs) -- [**Getting started**](https://mswjs.io/docs/getting-started/install) -- [Recipes](https://mswjs.io/docs/recipes) +- [**Getting started**](https://mswjs.io/docs/getting-started) - [FAQ](https://mswjs.io/docs/faq) ## Examples @@ -51,7 +50,7 @@ This README will give you a brief overview on the library but there's no better ## Browser -- [Learn more about using MSW in a browser](https://mswjs.io/docs/getting-started/integrate/browser) +- [Learn more about using MSW in a browser](https://mswjs.io/docs/integrations/browser) - [`setupWorker` API](https://mswjs.io/docs/api/setup-worker) ### How does it work? @@ -104,7 +103,7 @@ Performing a `GET https://github.com/octocat` request in your application will r ## Node.js -- [Learn more about using MSW in Node.js](https://mswjs.io/docs/getting-started/integrate/node) +- [Learn more about using MSW in Node.js](https://mswjs.io/docs/integrations/node) - [`setupServer` API](https://mswjs.io/docs/api/setup-server) ### How does it work? @@ -178,7 +177,7 @@ it('displays the list of recent posts', async () => { }) ``` -> Don't get overwhelmed! We've prepared a step-by-step [**Getting started**](https://mswjs.io/docs/getting-started/install) tutorial that you can follow to learn how to integrate Mock Service Worker into your project. +> Don't get overwhelmed! We've prepared a step-by-step [**Getting started**](https://mswjs.io/docs/getting-started) tutorial that you can follow to learn how to integrate Mock Service Worker into your project. Despite the API being called `setupServer`, there are no actual servers involved! The name was chosen for familiarity, and the API was designed to resemble operating with an actual server.