diff --git a/samples/web-csr/dressca-frontend/admin/package.json b/samples/web-csr/dressca-frontend/admin/package.json index a2ac1a7d3..46c0ec47c 100644 --- a/samples/web-csr/dressca-frontend/admin/package.json +++ b/samples/web-csr/dressca-frontend/admin/package.json @@ -24,7 +24,7 @@ "dependencies": { "@heroicons/vue": "^2.1.5", "axios": "^1.7.7", - "msw": "~2.3.5", + "msw": "2.7.0", "@vee-validate/yup": "^4.13.2", "pinia": "^2.2.5", "vee-validate": "^4.14.4", diff --git a/samples/web-csr/dressca-frontend/admin/public/mockServiceWorker.js b/samples/web-csr/dressca-frontend/admin/public/mockServiceWorker.js index 15751fa19..ec47a9a50 100644 --- a/samples/web-csr/dressca-frontend/admin/public/mockServiceWorker.js +++ b/samples/web-csr/dressca-frontend/admin/public/mockServiceWorker.js @@ -8,8 +8,8 @@ * - Please do NOT serve this file on production. */ -const PACKAGE_VERSION = '2.3.5' -const INTEGRITY_CHECKSUM = '26357c79639bfa20d64c0efca2a87423' +const PACKAGE_VERSION = '2.7.0' +const INTEGRITY_CHECKSUM = '00729d72e3b82faf54ca8b9621dbb96f' const IS_MOCKED_RESPONSE = Symbol('isMockedResponse') const activeClientIds = new Set() @@ -62,7 +62,12 @@ self.addEventListener('message', async function (event) { sendToClient(client, { type: 'MOCKING_ENABLED', - payload: true, + payload: { + client: { + id: client.id, + frameType: client.frameType, + }, + }, }) break } @@ -155,6 +160,10 @@ async function handleRequest(event, requestId) { async function resolveMainClient(event) { const client = await self.clients.get(event.clientId) + if (activeClientIds.has(event.clientId)) { + return client + } + if (client?.frameType === 'top-level') { return client } @@ -183,12 +192,26 @@ async function getResponse(event, client, requestId) { const requestClone = request.clone() function passthrough() { - const headers = Object.fromEntries(requestClone.headers.entries()) + // Cast the request headers to a new Headers instance + // so the headers can be manipulated with. + const headers = new Headers(requestClone.headers) + + // Remove the "accept" header value that marked this request as passthrough. + // This prevents request alteration and also keeps it compliant with the + // user-defined CORS policies. + const acceptHeader = headers.get('accept') + if (acceptHeader) { + const values = acceptHeader.split(',').map((value) => value.trim()) + const filteredValues = values.filter( + (value) => value !== 'msw/passthrough', + ) - // 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'] + if (filteredValues.length > 0) { + headers.set('accept', filteredValues.join(', ')) + } else { + headers.delete('accept') + } + } return fetch(requestClone, { headers }) } diff --git a/samples/web-csr/dressca-frontend/admin/src/views/__tests__/ItemsAddView.spec.ts b/samples/web-csr/dressca-frontend/admin/src/views/__tests__/ItemsAddView.spec.ts index e01e38059..826bf6e50 100644 --- a/samples/web-csr/dressca-frontend/admin/src/views/__tests__/ItemsAddView.spec.ts +++ b/samples/web-csr/dressca-frontend/admin/src/views/__tests__/ItemsAddView.spec.ts @@ -1,22 +1,43 @@ -import { describe, it, expect } from 'vitest'; -import { flushPromises, mount } from '@vue/test-utils'; +import { describe, it, expect, vi, beforeAll } from 'vitest'; +import { flushPromises, mount, VueWrapper } from '@vue/test-utils'; import { router } from '@/router'; import { createPinia, setActivePinia } from 'pinia'; import { createCustomErrorHandler } from '@/shared/error-handler/custom-error-handler'; import ItemsAddView from '@/views/catalog/ItemsAddView.vue'; -describe('アイテム追加画面のテスト', () => { - it('アイテムを追加できる', async () => { - const pinia = createPinia(); - setActivePinia(pinia); - const customErrorHandler = createCustomErrorHandler(); - const wrapper = mount(ItemsAddView, { - global: { plugins: [pinia, router, customErrorHandler] }, - }); +async function getWrapper() { + const pinia = createPinia(); + setActivePinia(pinia); + const customErrorHandler = createCustomErrorHandler(); + return mount(ItemsAddView, { + global: { plugins: [pinia, router, customErrorHandler] }, + }); +} + +describe('アイテムを追加できる', () => { + let wrapper: VueWrapper; + + beforeAll(async () => { + wrapper = await getWrapper(); + }); + + it('追加画面に遷移できる', async () => { + // Arrange + // Act await flushPromises(); + // Assert expect(wrapper.html()).toContain('カタログアイテム追加'); + }); + + it('追加ボタンを押下_追加成功_通知モーダルが開く', async () => { + // Arrange + // Act wrapper.find('button').trigger('click'); await flushPromises(); + await vi.waitUntil(() => + wrapper.findAllComponents({ name: 'NotificationModal' })[0].isVisible(), + ); + // Assert expect(wrapper.html()).toContain('カタログアイテムを追加しました。'); }); }); diff --git a/samples/web-csr/dressca-frontend/admin/src/views/__tests__/ItemsEditView.spec.ts b/samples/web-csr/dressca-frontend/admin/src/views/__tests__/ItemsEditView.spec.ts index 1be0e11bf..62d8ff1f5 100644 --- a/samples/web-csr/dressca-frontend/admin/src/views/__tests__/ItemsEditView.spec.ts +++ b/samples/web-csr/dressca-frontend/admin/src/views/__tests__/ItemsEditView.spec.ts @@ -1,71 +1,130 @@ -import { describe, it, expect } from 'vitest'; -import { flushPromises, mount } from '@vue/test-utils'; +import { describe, it, expect, vi, beforeAll } from 'vitest'; +import { flushPromises, mount, VueWrapper } from '@vue/test-utils'; import { createPinia, setActivePinia } from 'pinia'; import { createCustomErrorHandler } from '@/shared/error-handler/custom-error-handler'; import ItemsEditView from '@/views/catalog/ItemsEditView.vue'; import { router } from '@/router'; -describe('アイテム編集画面_アイテム削除機能のテスト', () => { - it('アイテムを削除できる', async () => { - const pinia = createPinia(); - setActivePinia(pinia); - const customErrorHandler = createCustomErrorHandler(); - router.push({ name: 'catalog/items/edit', params: { itemId: 1 } }); - await router.isReady(); - const wrapper = mount(ItemsEditView, { - global: { plugins: [pinia, router, customErrorHandler] }, - }); +async function getWrapper() { + const pinia = createPinia(); + setActivePinia(pinia); + const customErrorHandler = createCustomErrorHandler(); + router.push({ name: 'catalog/items/edit', params: { itemId: 1 } }); + await router.isReady(); + return mount(ItemsEditView, { + global: { plugins: [pinia, router, customErrorHandler] }, + }); +} + +describe('アイテムが削除できる', () => { + let wrapper: VueWrapper; + + beforeAll(async () => { + wrapper = await getWrapper(); + }); + + it('編集画面に遷移できる', async () => { + // Arrange + // Act await flushPromises(); + // Assert expect(wrapper.html()).toContain('カタログアイテム編集'); + }); + + it('削除ボタンを押下_確認モーダルが開く', async () => { + // Arrange + // Act await wrapper.findAll('button')[0].trigger('click'); + // Assert expect(wrapper.html()).toContain('カタログアイテムを削除します。'); + }); + + it('OKボタンを押下_確認モーダルが閉じる', async () => { + // Arrange + // Act await wrapper .findAllComponents({ name: 'ConfirmationModal' })[0] .findAll('button')[0] .trigger('click'); await flushPromises(); + // Assert expect( wrapper.findAllComponents({ name: 'ConfirmationModal' })[0].isVisible(), ).toBeFalsy(); + }); + + it('削除成功_通知モーダルが開く', async () => { + // Arrange + // Act + await vi.waitUntil(() => + wrapper.findAllComponents({ name: 'NotificationModal' })[0].isVisible(), + ); + // Assert expect(wrapper.html()).toContain('カタログアイテムを削除しました。'); + }); + + it('OKボタンを押下__通知モーダルが閉じる', async () => { + // Act await wrapper .findAllComponents({ name: 'NotificationModal' })[0] .findAll('button')[0] .trigger('click'); + // Assert expect( wrapper.findAllComponents({ name: 'NotificationModal' })[0].isVisible(), ).toBeFalsy(); }); }); -describe('アイテム編集画面_アイテム更新機能のテスト', () => { - it('アイテムを更新できる', async () => { - const pinia = createPinia(); - setActivePinia(pinia); - const customErrorHandler = createCustomErrorHandler(); - router.push({ name: 'catalog/items/edit', params: { itemId: 1 } }); - await router.isReady(); - const wrapper = mount(ItemsEditView, { - global: { plugins: [pinia, router, customErrorHandler] }, - }); +describe('アイテムが更新できる', () => { + let wrapper: VueWrapper; + + beforeAll(async () => { + wrapper = await getWrapper(); + }); + + it('編集画面に遷移できる', async () => { + // Arrange + // Act await flushPromises(); + // Assert expect(wrapper.html()).toContain('カタログアイテム編集'); + }); + + it('更新ボタンを押下__確認モーダルが開く', async () => { + // Arrange const editButton = wrapper.findAll('button')[1]; + // Act await editButton.trigger('click'); + // Assert expect(wrapper.html()).toContain('カタログアイテムを更新します。'); + }); + + it('更新成功__通知モーダルが開く', async () => { + // Arrange + // Act await wrapper .findAllComponents({ name: 'ConfirmationModal' })[1] .findAll('button')[0] .trigger('click'); await flushPromises(); + await vi.waitUntil(() => + wrapper.findAllComponents({ name: 'NotificationModal' })[1].isVisible(), + ); + // Assert expect( wrapper.findAllComponents({ name: 'ConfirmationModal' })[1].isVisible(), ).toBeFalsy(); expect(wrapper.html()).toContain('カタログアイテムを更新しました。'); + }); + + it('OKボタンを押下__通知モーダルが閉じる', async () => { + // Act await wrapper .findAllComponents({ name: 'NotificationModal' })[1] .findAll('button')[0] .trigger('click'); + // Assert expect( wrapper.findAllComponents({ name: 'NotificationModal' })[1].isVisible(), ).toBeFalsy(); diff --git a/samples/web-csr/dressca-frontend/admin/src/views/__tests__/ItemsView.spec.ts b/samples/web-csr/dressca-frontend/admin/src/views/__tests__/ItemsView.spec.ts index a4196dd4a..cc6696555 100644 --- a/samples/web-csr/dressca-frontend/admin/src/views/__tests__/ItemsView.spec.ts +++ b/samples/web-csr/dressca-frontend/admin/src/views/__tests__/ItemsView.spec.ts @@ -1,19 +1,39 @@ -import { describe, it, expect } from 'vitest'; -import { flushPromises, mount } from '@vue/test-utils'; +import { describe, it, expect, beforeAll } from 'vitest'; +import { flushPromises, mount, VueWrapper } from '@vue/test-utils'; import { router } from '@/router'; import { createPinia, setActivePinia } from 'pinia'; import { createCustomErrorHandler } from '@/shared/error-handler/custom-error-handler'; import ItemsView from '@/views/catalog/ItemsView.vue'; -describe('アイテム一覧画面のテスト', () => { - it('アイテム一覧が表示できる', async () => { - const pinia = createPinia(); - setActivePinia(pinia); - const customErrorHandler = createCustomErrorHandler(); - const wrapper = mount(ItemsView, { - global: { plugins: [pinia, router, customErrorHandler] }, - }); +async function getWrapper() { + const pinia = createPinia(); + setActivePinia(pinia); + const customErrorHandler = createCustomErrorHandler(); + return mount(ItemsView, { + global: { plugins: [pinia, router, customErrorHandler] }, + }); +} +describe('アイテム一覧が表示できる', () => { + let wrapper: VueWrapper; + + beforeAll(async () => { + wrapper = await getWrapper(); + }); + + it('アイテム一覧画面に遷移できる', async () => { + // Arrange + // Act await flushPromises(); + // Assert expect(wrapper.html()).toContain('カタログアイテム一覧'); }); + + it('アイテムが取得した個数分表示される', async () => { + // Arrange + const expectedItemCount = 11; + // Act + const tableRows = wrapper.find('tbody').findAll('tr'); + // Assert + expect(tableRows.length).toBe(expectedItemCount); + }); }); diff --git a/samples/web-csr/dressca-frontend/package-lock.json b/samples/web-csr/dressca-frontend/package-lock.json index d4a4a2b61..13e15a0bd 100644 --- a/samples/web-csr/dressca-frontend/package-lock.json +++ b/samples/web-csr/dressca-frontend/package-lock.json @@ -18,7 +18,7 @@ "@heroicons/vue": "^2.1.5", "@vee-validate/yup": "^4.13.2", "axios": "^1.7.7", - "msw": "~2.3.5", + "msw": "2.7.0", "pinia": "^2.2.5", "vee-validate": "^4.14.4", "vitest": "^2.1.4", @@ -60,125 +60,6 @@ "vue-tsc": "^2.1.10" } }, - "admin/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "admin/node_modules/msw": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/msw/-/msw-2.3.5.tgz", - "integrity": "sha512-+GUI4gX5YC5Bv33epBrD+BGdmDvBg2XGruiWnI3GbIbRmMMBeZ5gs3mJ51OWSGHgJKztZ8AtZeYMMNMVrje2/Q==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@bundled-es-modules/cookie": "^2.0.0", - "@bundled-es-modules/statuses": "^1.0.1", - "@bundled-es-modules/tough-cookie": "^0.1.6", - "@inquirer/confirm": "^3.0.0", - "@mswjs/interceptors": "^0.29.0", - "@open-draft/until": "^2.1.0", - "@types/cookie": "^0.6.0", - "@types/statuses": "^2.0.4", - "chalk": "^4.1.2", - "graphql": "^16.8.1", - "headers-polyfill": "^4.0.2", - "is-node-process": "^1.2.0", - "outvariant": "^1.4.2", - "path-to-regexp": "^6.2.0", - "strict-event-emitter": "^0.5.1", - "type-fest": "^4.9.0", - "yargs": "^17.7.2" - }, - "bin": { - "msw": "cli/index.js" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/mswjs" - }, - "peerDependencies": { - "typescript": ">= 4.7.x" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "admin/node_modules/path-to-regexp": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "license": "MIT" - }, - "admin/node_modules/type-fest": { - "version": "4.27.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.27.0.tgz", - "integrity": "sha512-3IMSWgP7C5KSQqmo1wjhKrwsvXAtF33jO3QY+Uy++ia7hqvgSK6iXbbg5PbDBc1P2ZbNEDgejOrN4YooXvhwCw==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "admin/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "admin/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "admin/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, "consumer": { "version": "0.0.0", "dependencies": { @@ -1029,84 +910,6 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/@inquirer/confirm": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.2.0.tgz", - "integrity": "sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/core": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz", - "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==", - "license": "MIT", - "dependencies": { - "@inquirer/figures": "^1.0.6", - "@inquirer/type": "^2.0.0", - "@types/mute-stream": "^0.0.4", - "@types/node": "^22.5.5", - "@types/wrap-ansi": "^3.0.0", - "ansi-escapes": "^4.3.2", - "cli-width": "^4.1.0", - "mute-stream": "^1.0.0", - "signal-exit": "^4.1.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/core/node_modules/@inquirer/type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz", - "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==", - "license": "MIT", - "dependencies": { - "mute-stream": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/core/node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/@inquirer/core/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@inquirer/core/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@inquirer/figures": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.8.tgz", @@ -1116,27 +919,6 @@ "node": ">=18" } }, - "node_modules/@inquirer/type": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz", - "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==", - "license": "MIT", - "dependencies": { - "mute-stream": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/type/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "dev": true, @@ -1272,23 +1054,6 @@ "node": ">=8" } }, - "node_modules/@mswjs/interceptors": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.29.1.tgz", - "integrity": "sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw==", - "license": "MIT", - "dependencies": { - "@open-draft/deferred-promise": "^2.2.0", - "@open-draft/logger": "^0.3.0", - "@open-draft/until": "^2.0.0", - "is-node-process": "^1.2.0", - "outvariant": "^1.2.1", - "strict-event-emitter": "^0.5.1" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/@nestjs/axios": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@nestjs/axios/-/axios-3.1.0.tgz", @@ -1824,15 +1589,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/mute-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", - "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/node": { "version": "22.8.5", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.5.tgz", @@ -1868,12 +1624,6 @@ "version": "4.0.5", "license": "MIT" }, - "node_modules/@types/wrap-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", - "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", - "license": "MIT" - }, "node_modules/@types/yauzl": { "version": "2.10.3", "dev": true, @@ -3626,6 +3376,7 @@ }, "node_modules/chalk": { "version": "4.1.2", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -6426,6 +6177,7 @@ }, "node_modules/has-flag": { "version": "4.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7967,13 +7719,11 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/msw": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/msw/-/msw-2.6.5.tgz", - "integrity": "sha512-PnlnTpUlOrj441kYQzzFhzMzMCGFT6a2jKUBG7zSpLkYS5oh8Arrbc0dL8/rNAtxaoBy0EVs2mFqj2qdmWK7lQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.7.0.tgz", + "integrity": "sha512-BIodwZ19RWfCbYTxWTUfTXc+sg4OwjCAgxU1ZsgmggX/7S3LdUifsbUPJs61j0rWb19CZRGY5if77duhc0uXzw==", "hasInstallScript": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { "@bundled-es-modules/cookie": "^2.0.1", "@bundled-es-modules/statuses": "^1.0.1", @@ -7984,12 +7734,12 @@ "@open-draft/until": "^2.1.0", "@types/cookie": "^0.6.0", "@types/statuses": "^2.0.4", - "chalk": "^4.1.2", "graphql": "^16.8.1", "headers-polyfill": "^4.0.2", "is-node-process": "^1.2.0", "outvariant": "^1.4.3", "path-to-regexp": "^6.3.0", + "picocolors": "^1.1.1", "strict-event-emitter": "^0.5.1", "type-fest": "^4.26.1", "yargs": "^17.7.2" @@ -8017,8 +7767,6 @@ "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.0.2.tgz", "integrity": "sha512-KJLUHOaKnNCYzwVbryj3TNBxyZIrr56fR5N45v6K9IPrbT6B7DcudBMfylkV1A8PUdJE15mybkEQyp2/ZUpxUA==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { "@inquirer/core": "^10.1.0", "@inquirer/type": "^3.0.1" @@ -8035,8 +7783,6 @@ "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.0.tgz", "integrity": "sha512-I+ETk2AL+yAVbvuKx5AJpQmoaWhpiTFOg/UJb7ZkMAK4blmtG8ATh5ct+T/8xNld0CZG/2UhtkdMwpgvld92XQ==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { "@inquirer/figures": "^1.0.8", "@inquirer/type": "^3.0.1", @@ -8057,8 +7803,6 @@ "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.1.tgz", "integrity": "sha512-+ksJMIy92sOAiAccGpcKZUc3bYO07cADnscIxHBknEm3uNts3movSmBofc1908BNy5edKscxYeAdaX1NXkHS6A==", "license": "MIT", - "optional": true, - "peer": true, "engines": { "node": ">=18" }, @@ -8071,8 +7815,6 @@ "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.37.1.tgz", "integrity": "sha512-SvE+tSpcX884RJrPCskXxoS965Ky/pYABDEhWW6oeSRhpUDLrS5nTvT5n1LLSDVDYvty4imVmXsy+3/ROVuknA==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { "@open-draft/deferred-promise": "^2.2.0", "@open-draft/logger": "^0.3.0", @@ -8090,8 +7832,6 @@ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "license": "ISC", - "optional": true, - "peer": true, "engines": { "node": ">= 12" } @@ -8101,8 +7841,6 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "license": "ISC", - "optional": true, - "peer": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -8117,8 +7855,6 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -8136,8 +7872,6 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", "license": "ISC", - "optional": true, - "peer": true, "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -8146,17 +7880,13 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "license": "MIT", - "optional": true, - "peer": true + "license": "MIT" }, "node_modules/msw/node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "license": "ISC", - "optional": true, - "peer": true, "engines": { "node": ">=14" }, @@ -8169,8 +7899,6 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.27.0.tgz", "integrity": "sha512-3IMSWgP7C5KSQqmo1wjhKrwsvXAtF33jO3QY+Uy++ia7hqvgSK6iXbbg5PbDBc1P2ZbNEDgejOrN4YooXvhwCw==", "license": "(MIT OR CC0-1.0)", - "optional": true, - "peer": true, "engines": { "node": ">=16" }, @@ -8183,8 +7911,6 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -8203,8 +7929,6 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "license": "ISC", - "optional": true, - "peer": true, "engines": { "node": ">=12" } @@ -8877,9 +8601,10 @@ "dev": true }, "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -10644,6 +10369,7 @@ }, "node_modules/supports-color": { "version": "7.2.0", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0"