Upgrade msw (#1580)

This commit is contained in:
Nathan Bierema 2023-12-19 10:06:33 -05:00 committed by GitHub
parent 00664dcd3e
commit fa7af18888
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 179 additions and 213 deletions

View File

@ -14,13 +14,13 @@
"@chakra-ui/react": "^2.8.2", "@chakra-ui/react": "^2.8.2",
"@emotion/react": "^11.11.1", "@emotion/react": "^11.11.1",
"@emotion/styled": "^11.11.0", "@emotion/styled": "^11.11.0",
"@mswjs/data": "^0.15.0", "@mswjs/data": "^0.16.1",
"@redux-devtools/core": "^4.0.0", "@redux-devtools/core": "^4.0.0",
"@redux-devtools/dock-monitor": "^4.0.0", "@redux-devtools/dock-monitor": "^4.0.0",
"@redux-devtools/rtk-query-monitor": "^5.0.0", "@redux-devtools/rtk-query-monitor": "^5.0.0",
"@reduxjs/toolkit": "^1.9.7", "@reduxjs/toolkit": "^1.9.7",
"framer-motion": "^10.16.16", "framer-motion": "^10.16.16",
"msw": "^1.3.2", "msw": "^2.0.11",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-icons": "^4.12.0", "react-icons": "^4.12.0",

View File

@ -2,13 +2,14 @@
/* tslint:disable */ /* tslint:disable */
/** /**
* Mock Service Worker (1.3.2). * Mock Service Worker (2.0.11).
* @see https://github.com/mswjs/msw * @see https://github.com/mswjs/msw
* - Please do NOT modify this file. * - Please do NOT modify this file.
* - Please do NOT serve this file on production. * - Please do NOT serve this file on production.
*/ */
const INTEGRITY_CHECKSUM = '3d6b9f06410d179a7f7404d4bf4c3c70' const INTEGRITY_CHECKSUM = 'c5f7f8e188b673ea4e677df7ea3c5a39'
const IS_MOCKED_RESPONSE = Symbol('isMockedResponse')
const activeClientIds = new Set() const activeClientIds = new Set()
self.addEventListener('install', function () { self.addEventListener('install', function () {
@ -86,12 +87,6 @@ self.addEventListener('message', async function (event) {
self.addEventListener('fetch', function (event) { self.addEventListener('fetch', function (event) {
const { request } = event const { request } = event
const accept = request.headers.get('accept') || ''
// Bypass server-sent events.
if (accept.includes('text/event-stream')) {
return
}
// Bypass navigation requests. // Bypass navigation requests.
if (request.mode === 'navigate') { if (request.mode === 'navigate') {
@ -112,29 +107,8 @@ self.addEventListener('fetch', function (event) {
} }
// Generate unique request ID. // Generate unique request ID.
const requestId = Math.random().toString(16).slice(2) const requestId = crypto.randomUUID()
event.respondWith(handleRequest(event, requestId))
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(
`\
[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}`,
)
}),
)
}) })
async function handleRequest(event, requestId) { async function handleRequest(event, requestId) {
@ -146,21 +120,24 @@ async function handleRequest(event, requestId) {
// this message will pend indefinitely. // this message will pend indefinitely.
if (client && activeClientIds.has(client.id)) { if (client && activeClientIds.has(client.id)) {
;(async function () { ;(async function () {
const clonedResponse = response.clone() const responseClone = response.clone()
sendToClient(client, {
sendToClient(
client,
{
type: 'RESPONSE', type: 'RESPONSE',
payload: { payload: {
requestId, requestId,
type: clonedResponse.type, isMockedResponse: IS_MOCKED_RESPONSE in response,
ok: clonedResponse.ok, type: responseClone.type,
status: clonedResponse.status, status: responseClone.status,
statusText: clonedResponse.statusText, statusText: responseClone.statusText,
body: body: responseClone.body,
clonedResponse.body === null ? null : await clonedResponse.text(), headers: Object.fromEntries(responseClone.headers.entries()),
headers: Object.fromEntries(clonedResponse.headers.entries()),
redirected: clonedResponse.redirected,
}, },
}) },
[responseClone.body],
)
})() })()
} }
@ -196,20 +173,20 @@ async function resolveMainClient(event) {
async function getResponse(event, client, requestId) { async function getResponse(event, client, requestId) {
const { request } = event const { request } = event
const clonedRequest = request.clone()
function passthrough() {
// Clone the request because it might've been already used // Clone the request because it might've been already used
// (i.e. its body has been read and sent to the client). // (i.e. its body has been read and sent to the client).
const headers = Object.fromEntries(clonedRequest.headers.entries()) const requestClone = request.clone()
// Remove MSW-specific request headers so the bypassed requests function passthrough() {
// comply with the server's CORS preflight check. const headers = Object.fromEntries(requestClone.headers.entries())
// Operate with the headers as an object because request "Headers"
// are immutable.
delete headers['x-msw-bypass']
return fetch(clonedRequest, { headers }) // 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(requestClone, { headers })
} }
// Bypass mocking when the client is not active. // Bypass mocking when the client is not active.
@ -227,31 +204,36 @@ async function getResponse(event, client, requestId) {
// Bypass requests with the explicit bypass header. // Bypass requests with the explicit bypass header.
// Such requests can be issued by "ctx.fetch()". // 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() return passthrough()
} }
// Notify the client that a request has been intercepted. // Notify the client that a request has been intercepted.
const clientMessage = await sendToClient(client, { const requestBuffer = await request.arrayBuffer()
const clientMessage = await sendToClient(
client,
{
type: 'REQUEST', type: 'REQUEST',
payload: { payload: {
id: requestId, id: requestId,
url: request.url, url: request.url,
mode: request.mode,
method: request.method, method: request.method,
headers: Object.fromEntries(request.headers.entries()), headers: Object.fromEntries(request.headers.entries()),
cache: request.cache, cache: request.cache,
mode: request.mode,
credentials: request.credentials, credentials: request.credentials,
destination: request.destination, destination: request.destination,
integrity: request.integrity, integrity: request.integrity,
redirect: request.redirect, redirect: request.redirect,
referrer: request.referrer, referrer: request.referrer,
referrerPolicy: request.referrerPolicy, referrerPolicy: request.referrerPolicy,
body: await request.text(), body: requestBuffer,
bodyUsed: request.bodyUsed,
keepalive: request.keepalive, keepalive: request.keepalive,
}, },
}) },
[requestBuffer],
)
switch (clientMessage.type) { switch (clientMessage.type) {
case 'MOCK_RESPONSE': { case 'MOCK_RESPONSE': {
@ -261,21 +243,12 @@ async function getResponse(event, client, requestId) {
case 'MOCK_NOT_FOUND': { case 'MOCK_NOT_FOUND': {
return passthrough() 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() return passthrough()
} }
function sendToClient(client, message) { function sendToClient(client, message, transferrables = []) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const channel = new MessageChannel() const channel = new MessageChannel()
@ -287,17 +260,28 @@ function sendToClient(client, message) {
resolve(event.data) resolve(event.data)
} }
client.postMessage(message, [channel.port2]) client.postMessage(
}) message,
} [channel.port2].concat(transferrables.filter(Boolean)),
)
function sleep(timeMs) {
return new Promise((resolve) => {
setTimeout(resolve, timeMs)
}) })
} }
async function respondWithMock(response) { async function respondWithMock(response) {
await sleep(response.delay) // Setting response status code to 0 is a no-op.
return new Response(response.body, response) // However, when responding with a "Response.error()", the produced Response
// instance will have status code set to 0. Since it's not possible to create
// a Response instance with status code 0, handle that use-case separately.
if (response.status === 0) {
return Response.error()
}
const mockedResponse = new Response(response.body, response)
Reflect.defineProperty(mockedResponse, IS_MOCKED_RESPONSE, {
value: true,
enumerable: true,
})
return mockedResponse
} }

View File

@ -1,4 +1,4 @@
import { setupWorker } from 'msw'; import { setupWorker } from 'msw/browser';
import { handlers } from './db'; import { handlers } from './db';
export const worker = setupWorker(...handlers); export const worker = setupWorker(...handlers);

View File

@ -1,6 +1,6 @@
import { factory, primaryKey } from '@mswjs/data'; import { factory, primaryKey } from '@mswjs/data';
import { nanoid } from '@reduxjs/toolkit'; import { nanoid } from '@reduxjs/toolkit';
import { rest } from 'msw'; import { http, HttpResponse, delay } from 'msw';
import { Post } from '../services/posts'; import { Post } from '../services/posts';
const db = factory({ const db = factory({
@ -19,16 +19,16 @@ const db = factory({
}); });
export const handlers = [ export const handlers = [
rest.post<Post, never, Post | { error: string }>( http.post<never, Post, Post | { error: string }>(
'/posts', '/posts',
async (req, res, ctx) => { async ({ request }) => {
const { name } = req.body; const { name } = await request.json();
if (Math.random() < 0.3) { if (Math.random() < 0.3) {
return res( await delay(300);
ctx.json({ error: 'Oh no, there was an error, try again.' }), return HttpResponse.json(
ctx.status(500), { error: 'Oh no, there was an error, try again.' },
ctx.delay(300), { status: 500 },
); );
} }
@ -37,28 +37,30 @@ export const handlers = [
name, name,
}); });
return res(ctx.json(post), ctx.delay(300)); await delay(300);
return HttpResponse.json(post);
}, },
), ),
rest.put<Post, { id: string }, Post | { error: string }>( http.put<{ id: string }, Post, Post | { error: string }>(
'/posts/:id', '/posts/:id',
(req, res, ctx) => { async ({ params, request }) => {
const { name } = req.body; const { name } = await request.json();
if (Math.random() < 0.3) { if (Math.random() < 0.3) {
return res( await delay(300);
ctx.json({ error: 'Oh no, there was an error, try again.' }), return HttpResponse.json(
ctx.status(500), { error: 'Oh no, there was an error, try again.' },
ctx.delay(300), { status: 500 },
); );
} }
const post = db.post.update({ const post = db.post.update({
where: { id: { equals: req.params.id } }, where: { id: { equals: params.id } },
data: { name }, data: { name },
}); });
return res(ctx.json(post!), ctx.delay(300)); await delay(300);
return HttpResponse.json(post);
}, },
), ),
...db.post.toHandlers('rest'), ...db.post.toHandlers('rest'),

View File

@ -2605,8 +2605,8 @@ importers:
specifier: ^11.11.0 specifier: ^11.11.0
version: 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.43)(react@18.2.0) version: 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.43)(react@18.2.0)
'@mswjs/data': '@mswjs/data':
specifier: ^0.15.0 specifier: ^0.16.1
version: 0.15.0(typescript@5.2.2) version: 0.16.1(typescript@5.2.2)
'@redux-devtools/core': '@redux-devtools/core':
specifier: ^4.0.0 specifier: ^4.0.0
version: link:../../redux-devtools version: link:../../redux-devtools
@ -2623,8 +2623,8 @@ importers:
specifier: ^10.16.16 specifier: ^10.16.16
version: 10.16.16(react-dom@18.2.0)(react@18.2.0) version: 10.16.16(react-dom@18.2.0)(react@18.2.0)
msw: msw:
specifier: ^1.3.2 specifier: ^2.0.11
version: 1.3.2(typescript@5.2.2) version: 2.0.11(typescript@5.2.2)
react: react:
specifier: ^18.2.0 specifier: ^18.2.0
version: 18.2.0 version: 18.2.0
@ -5056,6 +5056,24 @@ packages:
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
dev: true dev: true
/@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:
resolution: {integrity: sha512-DERMS3yfbAljKsQc0U2wcqGKUWpdFjwqWuoMugEJlqBnKO180/n+4SR/J8MRDt1AN48X1ovgoD9KrdVXcaa3Rg==}
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
/@chakra-ui/accordion@2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.16)(react@18.2.0): /@chakra-ui/accordion@2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.16)(react@18.2.0):
resolution: {integrity: sha512-FSXRm8iClFyU+gVaXisOSEw0/4Q+qZbFRiuhIAkVU6Boj0FxAMrlo9a8AV5TuF77rgaHytCdHk0Ng+cyUijrag==} resolution: {integrity: sha512-FSXRm8iClFyU+gVaXisOSEw0/4Q+qZbFRiuhIAkVU6Boj0FxAMrlo9a8AV5TuF77rgaHytCdHk0Ng+cyUijrag==}
peerDependencies: peerDependencies:
@ -7475,16 +7493,13 @@ packages:
react: 18.2.0 react: 18.2.0
dev: true dev: true
/@mswjs/cookies@0.2.2: /@mswjs/cookies@1.1.0:
resolution: {integrity: sha512-mlN83YSrcFgk7Dm1Mys40DLssI1KdJji2CMKN8eOlBqsTADYzj2+jWzsANsUTFbxDMWPD5e9bfA1RGqBpS3O1g==} resolution: {integrity: sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==}
engines: {node: '>=14'} engines: {node: '>=18'}
dependencies:
'@types/set-cookie-parser': 2.4.7
set-cookie-parser: 2.6.0
dev: false dev: false
/@mswjs/data@0.15.0(typescript@5.2.2): /@mswjs/data@0.16.1(typescript@5.2.2):
resolution: {integrity: sha512-inyWLLZ6qqeKkcI0pHXcVuqOSfajrFIG4nUNctHnieM/MF9vvtYr0HFSaKTl8r9X3f1cojco7Vq90gX/tMtnrg==} resolution: {integrity: sha512-VhJvL/VmgAuU9/tDOcKcxHfNd+8nxYntZnrkaQEQPvZZnFwQQR9bzI1FTRROGxCHVoyfv9v84AEkl/7CIw4FAg==}
dependencies: dependencies:
'@types/lodash': 4.14.202 '@types/lodash': 4.14.202
'@types/md5': 2.3.5 '@types/md5': 2.3.5
@ -7500,27 +7515,22 @@ packages:
strict-event-emitter: 0.5.1 strict-event-emitter: 0.5.1
uuid: 8.3.2 uuid: 8.3.2
optionalDependencies: optionalDependencies:
msw: 1.3.2(typescript@5.2.2) msw: 2.0.11(typescript@5.2.2)
transitivePeerDependencies: transitivePeerDependencies:
- encoding
- supports-color - supports-color
- typescript - typescript
dev: false dev: false
/@mswjs/interceptors@0.17.10: /@mswjs/interceptors@0.25.13:
resolution: {integrity: sha512-N8x7eSLGcmUFNWZRxT1vsHvypzIRgQYdG0rJey/rZCy6zT/30qDt8Joj7FxzGNLSwXbeZqJOMqDurp7ra4hgbw==} resolution: {integrity: sha512-xfjR81WwXPHwhDbqJRHlxYmboJuiSaIKpP4I5TJVFl/EmByOU13jOBT9hmEnxcjR3jvFYoqoNKt7MM9uqerj9A==}
engines: {node: '>=14'} engines: {node: '>=18'}
dependencies: dependencies:
'@open-draft/until': 1.0.3 '@open-draft/deferred-promise': 2.2.0
'@types/debug': 4.1.12 '@open-draft/logger': 0.3.0
'@xmldom/xmldom': 0.8.10 '@open-draft/until': 2.1.0
debug: 4.3.4(supports-color@5.5.0) is-node-process: 1.2.0
headers-polyfill: 3.2.5
outvariant: 1.4.0 outvariant: 1.4.0
strict-event-emitter: 0.2.8 strict-event-emitter: 0.5.1
web-encoding: 1.1.5
transitivePeerDependencies:
- supports-color
dev: false dev: false
/@ndelangen/get-tarball@3.0.9: /@ndelangen/get-tarball@3.0.9:
@ -7694,8 +7704,19 @@ packages:
dev: true dev: true
optional: true optional: true
/@open-draft/until@1.0.3: /@open-draft/deferred-promise@2.2.0:
resolution: {integrity: sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==} resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==}
dev: false
/@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/until@2.1.0:
resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==}
dev: false dev: false
/@parcel/watcher@2.0.4: /@parcel/watcher@2.0.4:
@ -10029,12 +10050,6 @@ packages:
resolution: {integrity: sha512-M95hNBMa/hnwErH+a+VOD/sYgTmo15OTYTM2Hr52/e0OdOuY+Crag+kd3/ioZrhg0WGbl9Sm3hR7UU+MH6rfOw==} resolution: {integrity: sha512-M95hNBMa/hnwErH+a+VOD/sYgTmo15OTYTM2Hr52/e0OdOuY+Crag+kd3/ioZrhg0WGbl9Sm3hR7UU+MH6rfOw==}
dev: true dev: true
/@types/debug@4.1.12:
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
dependencies:
'@types/ms': 0.7.34
dev: false
/@types/detect-port@1.3.5: /@types/detect-port@1.3.5:
resolution: {integrity: sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA==} resolution: {integrity: sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA==}
dev: true dev: true
@ -10285,10 +10300,6 @@ packages:
'@types/node': 20.10.4 '@types/node': 20.10.4
dev: true dev: true
/@types/ms@0.7.34:
resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
dev: false
/@types/node-fetch@2.6.9: /@types/node-fetch@2.6.9:
resolution: {integrity: sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==} resolution: {integrity: sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==}
dependencies: dependencies:
@ -10443,12 +10454,6 @@ packages:
'@types/mime': 3.0.4 '@types/mime': 3.0.4
'@types/node': 20.10.4 '@types/node': 20.10.4
/@types/set-cookie-parser@2.4.7:
resolution: {integrity: sha512-+ge/loa0oTozxip6zmhRIk8Z/boU51wl9Q6QdLZcokIGMzY5lFXYy/x7Htj2HTC6/KZP1hUbZ1ekx8DYXICvWg==}
dependencies:
'@types/node': 20.10.4
dev: false
/@types/simple-element-resize-detector@1.3.3: /@types/simple-element-resize-detector@1.3.3:
resolution: {integrity: sha512-igYpe5ApGMB7YGk2ZyyvrT1NwLYG7Q+8d78uskiS3qriHQa1fiFesibFTCDbGWhc9teD7RmGSuh9a1rzzXj9zg==} resolution: {integrity: sha512-igYpe5ApGMB7YGk2ZyyvrT1NwLYG7Q+8d78uskiS3qriHQa1fiFesibFTCDbGWhc9teD7RmGSuh9a1rzzXj9zg==}
dev: false dev: false
@ -10494,6 +10499,10 @@ packages:
resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
dev: true dev: true
/@types/statuses@2.0.4:
resolution: {integrity: sha512-eqNDvZsCNY49OAXB0Firg/Sc2BgoWsntsLUdybGFOhAfCD6QJ2n9HXUIHGqt5qjrxmMv4wS8WLAw43ZkKcJ8Pw==}
dev: false
/@types/stream-demux@8.0.3: /@types/stream-demux@8.0.3:
resolution: {integrity: sha512-8adnu9aBurD0MH1NmQ63ECLxY6+IGKRLd8mYCd1Xmaj0t1XpwrfJFEfg5nCMP0W4OuLSGolr7zg32GZD9uxM0g==} resolution: {integrity: sha512-8adnu9aBurD0MH1NmQ63ECLxY6+IGKRLd8mYCd1Xmaj0t1XpwrfJFEfg5nCMP0W4OuLSGolr7zg32GZD9uxM0g==}
dependencies: dependencies:
@ -10951,11 +10960,6 @@ packages:
webpack-cli: 5.1.4(webpack@5.89.0) webpack-cli: 5.1.4(webpack@5.89.0)
dev: true dev: true
/@xmldom/xmldom@0.8.10:
resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==}
engines: {node: '>=10.0.0'}
dev: false
/@xtuc/ieee754@1.2.0: /@xtuc/ieee754@1.2.0:
resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
dev: true dev: true
@ -11023,12 +11027,6 @@ packages:
argparse: 2.0.1 argparse: 2.0.1
dev: true dev: true
/@zxing/text-encoding@0.9.0:
resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==}
requiresBuild: true
dev: false
optional: true
/abab@2.0.6: /abab@2.0.6:
resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
deprecated: Use your platform's native atob() and btoa() methods instead deprecated: Use your platform's native atob() and btoa() methods instead
@ -11493,6 +11491,7 @@ packages:
/available-typed-arrays@1.0.5: /available-typed-arrays@1.0.5:
resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
dev: true
/axe-core@4.7.0: /axe-core@4.7.0:
resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==}
@ -12410,11 +12409,6 @@ packages:
/cookie-signature@1.0.6: /cookie-signature@1.0.6:
resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
/cookie@0.4.2:
resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==}
engines: {node: '>= 0.6'}
dev: false
/cookie@0.5.0: /cookie@0.5.0:
resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
engines: {node: '>= 0.6'} engines: {node: '>= 0.6'}
@ -14028,6 +14022,7 @@ packages:
/events@3.3.0: /events@3.3.0:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines: {node: '>=0.8.x'} engines: {node: '>=0.8.x'}
dev: true
/execa@5.1.1: /execa@5.1.1:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
@ -14386,6 +14381,7 @@ packages:
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
dependencies: dependencies:
is-callable: 1.2.7 is-callable: 1.2.7
dev: true
/foreground-child@3.1.1: /foreground-child@3.1.1:
resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
@ -14934,6 +14930,7 @@ packages:
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
dependencies: dependencies:
has-symbols: 1.0.3 has-symbols: 1.0.3
dev: true
/has-unicode@2.0.1: /has-unicode@2.0.1:
resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
@ -14950,8 +14947,8 @@ packages:
hasBin: true hasBin: true
dev: true dev: true
/headers-polyfill@3.2.5: /headers-polyfill@4.0.2:
resolution: {integrity: sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==} resolution: {integrity: sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw==}
dev: false dev: false
/hex-rgba@1.0.2: /hex-rgba@1.0.2:
@ -15383,6 +15380,7 @@ packages:
dependencies: dependencies:
call-bind: 1.0.5 call-bind: 1.0.5
has-tostringtag: 1.0.0 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==} resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
@ -15440,6 +15438,7 @@ packages:
/is-callable@1.2.7: /is-callable@1.2.7:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
dev: true
/is-core-module@2.13.1: /is-core-module@2.13.1:
resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
@ -15504,6 +15503,7 @@ packages:
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
dependencies: dependencies:
has-tostringtag: 1.0.0 has-tostringtag: 1.0.0
dev: true
/is-glob@4.0.3: /is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
@ -15668,6 +15668,7 @@ packages:
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
dependencies: dependencies:
which-typed-array: 1.1.13 which-typed-array: 1.1.13
dev: true
/is-unicode-supported@0.1.0: /is-unicode-supported@0.1.0:
resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
@ -17274,40 +17275,39 @@ packages:
/ms@2.1.3: /ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
/msw@1.3.2(typescript@5.2.2): /msw@2.0.11(typescript@5.2.2):
resolution: {integrity: sha512-wKLhFPR+NitYTkQl5047pia0reNGgf0P6a1eTnA5aNlripmiz0sabMvvHcicE8kQ3/gZcI0YiPFWmYfowfm3lA==} resolution: {integrity: sha512-dAXFS2DxZX0uFqMPhS3oUAu8S/5IQ5qKKSwtXl3/dMTeML0C8JfSvbeWtowYg6pu4Iehgp5L/pHLrlIcG++y/A==}
engines: {node: '>=14'} engines: {node: '>=18'}
hasBin: true hasBin: true
requiresBuild: true requiresBuild: true
peerDependencies: peerDependencies:
typescript: '>= 4.4.x <= 5.2.x' typescript: '>= 4.7.x <= 5.2.x'
peerDependenciesMeta: peerDependenciesMeta:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@mswjs/cookies': 0.2.2 '@bundled-es-modules/cookie': 2.0.0
'@mswjs/interceptors': 0.17.10 '@bundled-es-modules/js-levenshtein': 2.0.1
'@open-draft/until': 1.0.3 '@bundled-es-modules/statuses': 1.0.1
'@mswjs/cookies': 1.1.0
'@mswjs/interceptors': 0.25.13
'@open-draft/until': 2.1.0
'@types/cookie': 0.4.1 '@types/cookie': 0.4.1
'@types/js-levenshtein': 1.1.3 '@types/js-levenshtein': 1.1.3
'@types/statuses': 2.0.4
chalk: 4.1.2 chalk: 4.1.2
chokidar: 3.5.3 chokidar: 3.5.3
cookie: 0.4.2
graphql: 16.8.1 graphql: 16.8.1
headers-polyfill: 3.2.5 headers-polyfill: 4.0.2
inquirer: 8.2.6 inquirer: 8.2.6
is-node-process: 1.2.0 is-node-process: 1.2.0
js-levenshtein: 1.1.6 js-levenshtein: 1.1.6
node-fetch: 2.7.0
outvariant: 1.4.0 outvariant: 1.4.0
path-to-regexp: 6.2.1 path-to-regexp: 6.2.1
strict-event-emitter: 0.4.6 strict-event-emitter: 0.5.1
type-fest: 2.19.0 type-fest: 2.19.0
typescript: 5.2.2 typescript: 5.2.2
yargs: 17.7.2 yargs: 17.7.2
transitivePeerDependencies:
- encoding
- supports-color
dev: false dev: false
/multicast-dns@7.2.5: /multicast-dns@7.2.5:
@ -19450,10 +19450,6 @@ packages:
/set-blocking@2.0.0: /set-blocking@2.0.0:
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
/set-cookie-parser@2.6.0:
resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==}
dev: false
/set-function-length@1.1.1: /set-function-length@1.1.1:
resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@ -19902,16 +19898,6 @@ packages:
mixme: 0.5.10 mixme: 0.5.10
dev: true dev: true
/strict-event-emitter@0.2.8:
resolution: {integrity: sha512-KDf/ujU8Zud3YaLtMCcTI4xkZlZVIYxTLr+XIULexP+77EEVWixeXroLUXQXiVtH4XH2W7jr/3PT1v3zBuvc3A==}
dependencies:
events: 3.3.0
dev: false
/strict-event-emitter@0.4.6:
resolution: {integrity: sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==}
dev: false
/strict-event-emitter@0.5.1: /strict-event-emitter@0.5.1:
resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==}
dev: false dev: false
@ -21095,6 +21081,7 @@ packages:
is-generator-function: 1.0.10 is-generator-function: 1.0.10
is-typed-array: 1.1.12 is-typed-array: 1.1.12
which-typed-array: 1.1.13 which-typed-array: 1.1.13
dev: true
/utila@0.4.0: /utila@0.4.0:
resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==}
@ -21214,14 +21201,6 @@ packages:
dependencies: dependencies:
defaults: 1.0.4 defaults: 1.0.4
/web-encoding@1.1.5:
resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==}
dependencies:
util: 0.12.5
optionalDependencies:
'@zxing/text-encoding': 0.9.0
dev: false
/webidl-conversions@3.0.1: /webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
@ -21629,6 +21608,7 @@ packages:
for-each: 0.3.3 for-each: 0.3.3
gopd: 1.0.1 gopd: 1.0.1
has-tostringtag: 1.0.0 has-tostringtag: 1.0.0
dev: true
/which@1.3.1: /which@1.3.1:
resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}