diff --git a/build/msw_plugin.js b/build/msw_plugin.js deleted file mode 100644 index c4e9098c5..000000000 --- a/build/msw_plugin.js +++ /dev/null @@ -1,28 +0,0 @@ -import { readFile } from 'node:fs/promises' -import { resolve } from 'node:path' - -const target = 'node_modules/msw/lib/mockServiceWorker.js' - -const mswPlugin = () => { - let projectRoot - return { - name: 'msw-plugin', - apply: 'serve', - configResolved(conf) { - projectRoot = conf.root - }, - configureServer(server) { - server.middlewares.use(async (req, res, next) => { - if (req.path === '/mockServiceWorker.js') { - const file = await readFile(resolve(projectRoot, target)) - res.set('Content-Type', 'text/javascript') - res.send(file) - } else { - next() - } - }) - }, - } -} - -export default mswPlugin diff --git a/package.json b/package.json index 0925fe668..674828e26 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,6 @@ "chalk": "6.0.0", "cross-spawn": "7.0.6", "iso-639-1": "3.1.6", - "msw": "2.15.0", "playwright": "1.61.0", "postcss": "8.5.28", "postcss-html": "2.0.0", diff --git a/test/fixtures/mock_api.js b/test/fixtures/mock_api.js deleted file mode 100644 index 6fabe6356..000000000 --- a/test/fixtures/mock_api.js +++ /dev/null @@ -1,19 +0,0 @@ -import { test as testBase } from 'vitest' - -import { worker } from './worker.js' - -export const test = testBase.extend({ - worker: [ - // biome-ignore lint: required by vitest - async ({}, use) => { - await worker.start() - - await use(worker) - - worker.resetHandlers() - }, - { - auto: true, - }, - ], -}) diff --git a/test/fixtures/worker.js b/test/fixtures/worker.js deleted file mode 100644 index e6ed89dc9..000000000 --- a/test/fixtures/worker.js +++ /dev/null @@ -1,5 +0,0 @@ -import { setupWorker } from 'msw/browser' - -export const worker = setupWorker() - -window.__test__ = window.__test__ || 'TEST' diff --git a/test/unit/specs/stores/lists.spec.js b/test/unit/specs/stores/lists.spec.js index bb1ef12b4..822bbd1e2 100644 --- a/test/unit/specs/stores/lists.spec.js +++ b/test/unit/specs/stores/lists.spec.js @@ -1,23 +1,18 @@ import { createTestingPinia } from '@pinia/testing' -import { HttpResponse, http } from 'msw' import { setActivePinia } from 'pinia' -import { test as it } from '/test/fixtures/mock_api.js' - import { useListsStore } from 'src/stores/lists.js' import { MASTODON_LIST_ACCOUNTS_URL, MASTODON_LIST_URL } from 'src/api/user.js' describe('The lists store', () => { - let store - beforeEach(() => { setActivePinia(createTestingPinia({ stubActions: false })) - store = useListsStore() }) describe('actions', () => { it('updates array of all lists', () => { + const store = useListsStore() const list = { id: '1', title: 'testList' } store.setLists([list]) @@ -25,19 +20,33 @@ describe('The lists store', () => { expect(store.allLists).to.eql([list]) }) - it('adds a new list with a title, updating the title for existing lists', async ({ - worker, - }) => { + it('adds a new list with a title, updating the title for existing lists', async () => { + const store = useListsStore() const list = { id: '1', title: 'testList' } const modList = { id: '1', title: 'anotherTestTitle' } - worker.use( - http.put(MASTODON_LIST_URL(':id'), () => - HttpResponse.json({ ok: true }), - ), - ) + const mockFetch = vi + .fn() + .mockResolvedValueOnce( + new Response(JSON.stringify({ ok: true }), { + headers: { 'Content-Type': 'application/json' }, + }), + ) + .mockResolvedValueOnce( + new Response(JSON.stringify({ ok: true }), { + headers: { 'Content-Type': 'application/json' }, + }), + ) + + vi.stubGlobal('fetch', mockFetch) await store.setList({ listId: list.id, title: list.title }) + + expect(mockFetch).to.have.been.calledOnce + expect(mockFetch.mock.calls[0][0]).to.eql(MASTODON_LIST_URL('1')) + expect(mockFetch.mock.calls[0][1]).to.have.property('method', 'PUT') + mockFetch.mockClear() + expect(store.allListsObject[list.id]).to.eql({ title: list.title, accountIds: [], @@ -46,6 +55,11 @@ describe('The lists store', () => { expect(store.allLists[0]).to.eql(list) await store.setList({ listId: modList.id, title: modList.title }) + + expect(mockFetch).to.have.been.calledOnce + expect(mockFetch.mock.calls[0][0]).to.eql(MASTODON_LIST_URL('1')) + expect(mockFetch.mock.calls[0][1]).to.have.property('method', 'PUT') + expect(store.allListsObject[modList.id]).to.eql({ title: modList.title, accountIds: [], @@ -54,25 +68,39 @@ describe('The lists store', () => { expect(store.allLists[0]).to.eql(modList) }) - it('adds a new list with an array of IDs, updating the IDs for existing lists', async ({ - worker, - }) => { + it('adds a new list with an array of IDs, updating the IDs for existing lists', async () => { + const store = useListsStore() const list = { id: '1', accountIds: ['1', '2', '3'] } const modList = { id: '1', accountIds: ['3', '4', '5'] } - worker.use( - http.post(MASTODON_LIST_ACCOUNTS_URL(':id'), () => - HttpResponse.json({ ok: true }), - ), - http.delete(MASTODON_LIST_ACCOUNTS_URL(':id'), () => - HttpResponse.json({ ok: true }), - ), - ) + const mockFetch = vi + .fn() + .mockResolvedValueOnce( + new Response(JSON.stringify({ ok: true }), { + headers: { 'Content-Type': 'application/json' }, + }), + ) + .mockResolvedValueOnce( + new Response(JSON.stringify({ ok: true }), { + headers: { 'Content-Type': 'application/json' }, + }), + ) + .mockResolvedValueOnce( + new Response(JSON.stringify({ ok: true }), { + headers: { 'Content-Type': 'application/json' }, + }), + ) + vi.stubGlobal('fetch', mockFetch) await store.setListAccounts({ listId: list.id, accountIds: list.accountIds, }) + expect(mockFetch).to.have.been.calledOnce + expect(mockFetch.mock.calls[0][0]).to.eql(MASTODON_LIST_ACCOUNTS_URL('1')) + expect(mockFetch.mock.calls[0][1]).to.have.property('method', 'POST') + mockFetch.mockClear() + expect(store.allListsObject[list.id].accountIds).to.eql(list.accountIds) await store.setListAccounts({ @@ -80,12 +108,19 @@ describe('The lists store', () => { accountIds: modList.accountIds, }) + expect(mockFetch).to.have.been.calledTwice + expect(mockFetch.mock.calls[0][0]).to.eql(MASTODON_LIST_ACCOUNTS_URL('1')) + expect(mockFetch.mock.calls[0][1]).to.have.property('method', 'POST') + expect(mockFetch.mock.calls[1][0]).to.eql(MASTODON_LIST_ACCOUNTS_URL('1')) + expect(mockFetch.mock.calls[1][1]).to.have.property('method', 'DELETE') + expect(store.allListsObject[modList.id].accountIds).to.eql( modList.accountIds, ) }) - it('deletes a list', async ({ worker }) => { + it('deletes a list', async () => { + const store = useListsStore() store.$patch({ allLists: [{ id: '1', title: 'testList' }], allListsObject: { @@ -94,11 +129,12 @@ describe('The lists store', () => { }) const listId = '1' - worker.use( - http.delete(MASTODON_LIST_URL(':id'), () => - HttpResponse.json({ ok: true }), - ), + const mockFetch = vi.fn().mockResolvedValueOnce( + new Response(JSON.stringify({ ok: true }), { + headers: { 'Content-Type': 'application/json' }, + }), ) + vi.stubGlobal('fetch', mockFetch) await store.deleteList({ listId }) expect(store.allLists).to.have.length(0) @@ -108,6 +144,7 @@ describe('The lists store', () => { describe('getters', () => { it('returns list title', () => { + const store = useListsStore() store.$patch({ allLists: [{ id: '1', title: 'testList' }], allListsObject: { @@ -120,6 +157,7 @@ describe('The lists store', () => { }) it('returns list accounts', () => { + const store = useListsStore() store.$patch({ allLists: [{ id: '1', title: 'testList' }], allListsObject: { diff --git a/test/unit/specs/stores/oauth.spec.js b/test/unit/specs/stores/oauth.spec.js index a06cbb2fd..94922e210 100644 --- a/test/unit/specs/stores/oauth.spec.js +++ b/test/unit/specs/stores/oauth.spec.js @@ -1,9 +1,6 @@ import { createTestingPinia } from '@pinia/testing' -import { HttpResponse, http } from 'msw' import { setActivePinia } from 'pinia' -import { test as it } from '/test/fixtures/mock_api.js' - import { useOAuthStore } from 'src/stores/oauth.js' import { @@ -12,51 +9,67 @@ import { OAUTH_TOKEN_URL, } from 'src/api/oauth.js' -const authApis = () => [ - http.post(MASTODON_APP_URL, () => { - return HttpResponse.json({ - client_id: 'test-id', - client_secret: 'test-secret', - }) - }), - http.get(MASTODON_APP_VERIFY_URL, ({ request }) => { - const authHeader = request.headers.get('Authorization') - if ( - authHeader === 'Bearer test-app-token' || - authHeader === 'Bearer also-good-app-token' - ) { - return HttpResponse.json({}) - } else { - // Pleroma 2.9.0 gives the following respoonse upon error - return HttpResponse.json( - { error: { detail: 'Internal server error' } }, - { - status: 400, - }, - ) - } - }), - http.post(OAUTH_TOKEN_URL, async ({ request }) => { - const data = await request.formData() +const response = (data, extra = {}) => + new Response(JSON.stringify(data), { + headers: { 'Content-Type': 'application/json' }, + ...extra, + }) - if ( - data.get('client_id') === 'test-id' && - data.get('client_secret') === 'test-secret' && - data.get('grant_type') === 'client_credentials' && - data.has('redirect_uri') - ) { - return HttpResponse.json({ access_token: 'test-app-token' }) +const defaultMockAppURL = () => { + return response({ + client_id: 'test-id', + client_secret: 'test-secret', + }) +} + +const defaultMockAppVerifyURL = (headers) => { + const authHeader = headers.Authorization + if ( + authHeader === 'Bearer test-app-token' || + authHeader === 'Bearer also-good-app-token' + ) { + return response({}) + } else { + return response( + { error: { detail: 'Internal server error' } }, + { status: 400 }, + ) + } +} + +const defaultMockOAuthTokenURL = (params) => { + const data = params.body + + if ( + data.get('client_id') === 'test-id' && + data.get('client_secret') === 'test-secret' && + data.get('grant_type') === 'client_credentials' && + data.has('redirect_uri') + ) { + return response({ access_token: 'test-app-token' }) + } else { + // Pleroma 2.9.0 gives the following respoonse upon error + return response({ error: 'Invalid credentials' }, { status: 400 }) + } +} + +const authApis = ({ mockAppURL, mockAppVerifyURL, mockOAuthTokenURL } = {}) => { + const mockFetch = vi.fn().mockImplementation((url, params) => { + const { method = 'GET', headers } = params + + if (url === MASTODON_APP_URL && method === 'POST') { + return (mockAppURL ?? defaultMockAppURL)() + } else if (url === MASTODON_APP_VERIFY_URL && method === 'GET') { + return (mockAppVerifyURL ?? defaultMockAppVerifyURL)(headers) + } else if (url === OAUTH_TOKEN_URL && method === 'POST') { + return (mockOAuthTokenURL ?? defaultMockOAuthTokenURL)(params) } else { - // Pleroma 2.9.0 gives the following respoonse upon error - return HttpResponse.json( - { error: 'Invalid credentials' }, - { - status: 400, - }, - ) + return response({ error: 'Invalid request for test' }, { status: 401 }) } - }), -] + }) + vi.stubGlobal('fetch', mockFetch) + return mockFetch +} describe('oauth store', () => { beforeEach(() => { @@ -64,17 +77,10 @@ describe('oauth store', () => { }) describe('createApp', () => { - it('should use create an app and record client id and secret', async ({ - worker, - }) => { - worker.use( - http.post(MASTODON_APP_URL, () => { - return HttpResponse.text('Throttled', { status: 429 }) - }), - ) + it('should use create an app and record client id and secret', async () => { + authApis() const store = useOAuthStore() - worker.use(...authApis()) const app = await store.createApp() expect(store.clientId).to.eql('test-id') expect(store.clientSecret).to.eql('test-secret') @@ -82,10 +88,13 @@ describe('oauth store', () => { expect(app.clientSecret).to.eql('test-secret') }) - it('should throw and not update if failed', async ({ worker }) => { - worker.use( - http.post(MASTODON_APP_URL, () => { - return HttpResponse.text('Throttled', { status: 429 }) + it('should throw and not update if failed', async () => { + const mockFetch = authApis() + mockFetch.mockResolvedValueOnce( + new Response('Throttled', { + status: 429, + statusText: 'Throttled', + headers: { 'Content-Type': 'text/plain' }, }), ) @@ -98,8 +107,8 @@ describe('oauth store', () => { }) describe('ensureApp', () => { - it('should create an app if it does not exist', async ({ worker }) => { - worker.use(...authApis()) + it('should create an app if it does not exist', async () => { + authApis() const store = useOAuthStore() const app = await store.ensureApp() expect(store.clientId).to.eql('test-id') @@ -108,12 +117,15 @@ describe('oauth store', () => { expect(app.clientSecret).to.eql('test-secret') }) - it('should not create an app if it exists', async ({ worker }) => { - worker.use( - http.post(MASTODON_APP_URL, () => { - return HttpResponse.text('Should not call this API', { status: 400 }) - }), - ) + it('should not create an app if it exists', async () => { + authApis({ + mockAppURL: () => + new Response('Throttled', { + status: 429, + statusText: 'Throttled', + headers: { 'Content-Type': 'text/plain' }, + }), + }) const store = useOAuthStore() store.clientId = 'another-id' @@ -128,8 +140,8 @@ describe('oauth store', () => { }) describe('getAppToken', () => { - it('should get app token and set it in state', async ({ worker }) => { - worker.use(...authApis()) + it('should get app token and set it in state', async () => { + authApis() const store = useOAuthStore() store.clientId = 'test-id' store.clientSecret = 'test-secret' @@ -139,10 +151,8 @@ describe('oauth store', () => { expect(store.appToken).to.eql('test-app-token') }) - it('should throw and not set state if it cannot get app token', async ({ - worker, - }) => { - worker.use(...authApis()) + it('should throw and not set state if it cannot get app token', async () => { + authApis() const store = useOAuthStore() store.clientId = 'bad-id' store.clientSecret = 'bad-secret' @@ -153,16 +163,16 @@ describe('oauth store', () => { }) describe('ensureAppToken', () => { - it('should work if the state is empty', async ({ worker }) => { - worker.use(...authApis()) + it('should work if the state is empty', async () => { + authApis() const store = useOAuthStore() const token = await store.ensureAppToken() expect(token).to.eql('test-app-token') expect(store.appToken).to.eql('test-app-token') }) - it('should work if we already have a working token', async ({ worker }) => { - worker.use(...authApis()) + it('should work if we already have a working token', async () => { + authApis() const store = useOAuthStore() store.appToken = 'also-good-app-token' @@ -171,15 +181,16 @@ describe('oauth store', () => { expect(store.appToken).to.eql('also-good-app-token') }) - it('should work if we have a bad token but good app credentials', async ({ - worker, - }) => { - worker.use( - ...authApis(), - http.post(MASTODON_APP_URL, () => { - return HttpResponse.text('Should not call this API', { status: 400 }) - }), - ) + it('should work if we have a bad token but good app credentials', async () => { + authApis({ + mockAppURL: () => + new Response('Should not call this API', { + status: 400, + statusText: 'Should not call this API', + headers: { 'Content-Type': 'text/plain' }, + }), + }) + const store = useOAuthStore() store.appToken = 'bad-app-token' store.clientId = 'test-id' @@ -190,15 +201,16 @@ describe('oauth store', () => { expect(store.appToken).to.eql('test-app-token') }) - it('should work if we have no token but good app credentials', async ({ - worker, - }) => { - worker.use( - ...authApis(), - http.post(MASTODON_APP_URL, () => { - return HttpResponse.text('Should not call this API', { status: 400 }) - }), - ) + it('should work if we have no token but good app credentials', async () => { + authApis({ + mockAppURL: () => + new Response('Should not call this API', { + status: 400, + statusText: 'Should not call this API', + headers: { 'Content-Type': 'text/plain' }, + }), + }) + const store = useOAuthStore() store.clientId = 'test-id' store.clientSecret = 'test-secret' @@ -208,10 +220,8 @@ describe('oauth store', () => { expect(store.appToken).to.eql('test-app-token') }) - it('should work if we have no token and bad app credentials', async ({ - worker, - }) => { - worker.use(...authApis()) + it('should work if we have no token and bad app credentials', async () => { + authApis() const store = useOAuthStore() store.clientId = 'bad-id' store.clientSecret = 'bad-secret' @@ -223,10 +233,8 @@ describe('oauth store', () => { expect(store.clientSecret).to.eql('test-secret') }) - it('should work if we have bad token and bad app credentials', async ({ - worker, - }) => { - worker.use(...authApis()) + it('should work if we have bad token and bad app credentials', async () => { + authApis() const store = useOAuthStore() store.appToken = 'bad-app-token' store.clientId = 'bad-id' @@ -239,23 +247,29 @@ describe('oauth store', () => { expect(store.clientSecret).to.eql('test-secret') }) - it('should throw if we cannot create an app', async ({ worker }) => { - worker.use( - http.post(MASTODON_APP_URL, () => { - return HttpResponse.text('Throttled', { status: 429 }) - }), - ) + it('should throw if we cannot create an app', async () => { + authApis({ + mockAppURL: () => + new Response('Throttled', { + status: 429, + statusText: 'Throttled', + headers: { 'Content-Type': 'text/plain' }, + }), + }) const store = useOAuthStore() await expect(store.ensureAppToken()).rejects.toThrowError('Throttled') }) - it('should throw if we cannot obtain app token', async ({ worker }) => { - worker.use( - http.post(OAUTH_TOKEN_URL, () => { - return HttpResponse.text('Throttled', { status: 429 }) - }), - ) + it('should throw if we cannot obtain app token', async () => { + authApis({ + mockOAuthTokenURL: () => + new Response('Throttled', { + status: 429, + statusText: 'Throttled', + headers: { 'Content-Type': 'text/plain' }, + }), + }) const store = useOAuthStore() await expect(store.getAppToken()).rejects.toThrowError('Throttled') diff --git a/vite.config.js b/vite.config.js index 988efdfcc..a67dc9df8 100644 --- a/vite.config.js +++ b/vite.config.js @@ -12,7 +12,6 @@ import { configDefaults } from 'vitest/config' import { getCommitHash } from './build/commit_hash.js' import copyPlugin from './build/copy_plugin.js' import emojisPlugin from './build/emojis_plugin.js' -import mswPlugin from './build/msw_plugin.js' import { buildSwPlugin, swMessagesPlugin } from './build/sw_plugin.js' const localConfigPath = '/config/local.json' @@ -163,7 +162,6 @@ export default defineConfig(async ({ mode, command }) => { 'node_modules/.cache/stylelintcache', ), }), - ...(mode === 'test' ? [mswPlugin()] : []), ], css: { devSourcemap: true, diff --git a/yarn.lock b/yarn.lock index f8e86ce90..741639b8f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -581,42 +581,6 @@ resolved "https://registry.yarnpkg.com/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.3.3.tgz#90f54fee789bb23766a6d1c4d610294deab9a714" integrity sha512-Jbjze98gGcVBSdkscLbnDlHECumMAFVWDarMtycctn9qL3p92ApnV36VW4PwVrcm9IWrHnnE6ZL9x7MXStSCfA== -"@inquirer/ansi@^2.0.8": - version "2.0.8" - resolved "https://registry.yarnpkg.com/@inquirer/ansi/-/ansi-2.0.8.tgz#0308f3ed790dfa960f0f1f60045fa67e804de38e" - integrity sha512-WpQM+Ti6Z40EFwwt+uL2p4UabT+W179zHp6HhLVOzfbwnVn05IPO/eXIZXGNqcT1jbQ15SujNLzQ39k4QPPxBQ== - -"@inquirer/confirm@^6.0.11": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-6.3.1.tgz#8b226fa537838251028f77670f5280932a0e5783" - integrity sha512-HvnOHal39DTenOVoRpIy8Z+n4YYfNa3Qhi/P8zFqn9/d1crpmQG0DPx34rwOeOFvotgKr9Vov/14OmKR/Iwfjw== - dependencies: - "@inquirer/core" "^12.0.2" - "@inquirer/type" "4.1.1" - -"@inquirer/core@^12.0.2": - version "12.0.2" - resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-12.0.2.tgz#f75fbf5c60715078ae6c4c7602764335a581e2b0" - integrity sha512-9pBhkxE14uUlnHhs8lOt7qVPtS4caRY6CjADl8COejl9Mf7w8i6Uoe3DrljCqYtmYM3Iv2Q6EmPxx/oTYbvTAQ== - dependencies: - "@inquirer/ansi" "^2.0.8" - "@inquirer/figures" "^2.0.9" - "@inquirer/type" "4.1.1" - cli-width "^4.1.0" - fast-wrap-ansi "^0.2.0" - mute-stream "^3.0.0" - signal-exit "^4.1.0" - -"@inquirer/figures@^2.0.9": - version "2.0.9" - resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-2.0.9.tgz#8c04fdba3a78af0e57c0b3127cbd319ce604b1c1" - integrity sha512-EAWgUTGQ/Umgga51dE3B2PUHbufuXarDfg86uVgoSgNHNNQnyFKcOrQLWVqYMghuSyHh8+2HUH0Js9cTC1WAdg== - -"@inquirer/type@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-4.1.1.tgz#f865ee99f39e0951a0279f9c45ad1d260c0ce0dd" - integrity sha512-yJoHYrMnxIsJZCY+0Vb66Dy3he3kL3e2wOBKhoSwWWAzZAY82emlxwgprCtp6yRixvNRNq9ztfRWQYPNr3Go7A== - "@intlify/core-base@11.4.10": version "11.4.10" resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-11.4.10.tgz#22bc22db585363720c31a46baf430aaabb809782" @@ -728,18 +692,6 @@ "@modelcontextprotocol/core" "2.0.0" zod "^4.2.0" -"@mswjs/interceptors@^0.41.3": - version "0.41.9" - resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.41.9.tgz#9d90bbd60d1ddc30dbcbb827a9bb2e470493530d" - integrity sha512-VVPPgHyQ6ShqnrmDWuxjmUIsO9gWyOZFmuOfLd9LfBGQJwZfy0gvv9pbHSJuoFNIYC7ZDX9aoFwowjcdSC4E8w== - 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.4.3" - strict-event-emitter "^0.5.1" - "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -766,29 +718,6 @@ resolved "https://registry.yarnpkg.com/@one-ini/wasm/-/wasm-0.2.1.tgz#5e85cbb433460b23aaa18ac024cd1a556e9e5df9" integrity sha512-TUqERXGNTifZ9y2g3wPxQrw3HpHv/02DsW3D90T9x0hhonrL1ZqpSmNrU2XkoIq0fP1N6gZfVQzy2Fw1ZvGBNg== -"@open-draft/deferred-promise@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz#4a822d10f6f0e316be4d67b4d4f8c9a124b073bd" - integrity sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA== - -"@open-draft/deferred-promise@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@open-draft/deferred-promise/-/deferred-promise-3.0.0.tgz#9725acc5afe8ecde690e9e198a094859fdbf2e45" - integrity sha512-XW375UK8/9SqUVNVa6M0yEy8+iTi4QN5VZ7aZuRFQmy76LRwI9wy5F4YIBU6T+eTe2/DNDo8tqu8RHlwLHM6RA== - -"@open-draft/logger@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@open-draft/logger/-/logger-0.3.0.tgz#2b3ab1242b360aa0adb28b85f5d7da1c133a0954" - integrity sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ== - dependencies: - is-node-process "^1.2.0" - outvariant "^1.4.0" - -"@open-draft/until@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-2.1.0.tgz#0acf32f470af2ceaf47f095cdecd40d68666efda" - integrity sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg== - "@oxc-project/types@=0.148.0": version "0.148.0" resolved "https://registry.yarnpkg.com/@oxc-project/types/-/types-0.148.0.tgz#811d188a2e1af35784461b8a0490e13a3d76837c" @@ -1011,25 +940,6 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.9.tgz#cf3f0e876d7bee15a93ab925b82bf570a3904a24" integrity sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg== -"@types/node@*": - version "26.4.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-26.4.1.tgz#3d8dc80515894958448ee266cf5d6bc3e5205bd5" - integrity sha512-k97ENvZWtvA6yqz5/FS6a7duDgOPEeOQOc2iKS/nY6mX6qJUKtLnWzQS+Xj6tXweyj6ZcTAK2Qecetnvi9nCLA== - dependencies: - undici-types "~8.3.0" - -"@types/set-cookie-parser@^2.4.10": - version "2.4.10" - resolved "https://registry.yarnpkg.com/@types/set-cookie-parser/-/set-cookie-parser-2.4.10.tgz#ad3a807d6d921db9720621ea3374c5d92020bcbc" - integrity sha512-GGmQVGpQWUe5qglJozEjZV/5dyxbOOZ0LHe/lqyWssB88Y4svNfst0uqBVscdDeIKl5Jy5+aPSvy7mI9tYRguw== - dependencies: - "@types/node" "*" - -"@types/statuses@^2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/statuses/-/statuses-2.0.6.tgz#66748315cc9a96d63403baa8671b2c124f8633aa" - integrity sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA== - "@ungap/event-target@0.2.4": version "0.2.4" resolved "https://registry.yarnpkg.com/@ungap/event-target/-/event-target-0.2.4.tgz#8b083a62ee665228bac08013fa516a3488528bb8" @@ -1611,11 +1521,6 @@ citty@^0.2.2: resolved "https://registry.yarnpkg.com/citty/-/citty-0.2.2.tgz#92d3f7d13868a730ab06c420bb10bded06cf259f" integrity sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w== -cli-width@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" - integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== - click-outside-vue3@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/click-outside-vue3/-/click-outside-vue3-4.0.1.tgz#81a6ac01696b301764b42db6fdbdf28e7cd8ef95" @@ -1630,15 +1535,6 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -1694,11 +1590,6 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cookie@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-1.1.1.tgz#3bb9bdfc82369db9c2f69c93c9c3ceb310c88b3c" - integrity sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ== - cosmiconfig@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.2.tgz#9e5615163becf6a82211fb33d2f68947c25d0c5e" @@ -1911,7 +1802,7 @@ es-module-lexer@^2.3.2: resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.3.2.tgz#311fa4f40168c1975c505477c51b23234d41ad55" integrity sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw== -escalade@^3.1.1, escalade@^3.2.0: +escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== @@ -1964,30 +1855,11 @@ fast-glob@^3.3.3: merge2 "^1.3.0" micromatch "^4.0.8" -fast-string-truncated-width@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz#23afe0da67d752ca0727538f1e6967759728ce49" - integrity sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g== - -fast-string-width@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/fast-string-width/-/fast-string-width-3.0.2.tgz#16dbabb491ce5585b5ecb675b65c165d71688eeb" - integrity sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg== - dependencies: - fast-string-truncated-width "^3.0.2" - fast-uri@^3.0.1: version "3.1.7" resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.7.tgz#743157d957f3cbb4c65310e033dc2ad4ad7dc60a" integrity sha512-dOvZVzjdZdz7phd9v6jCbwxrBW3fK6n8Rc0CtdmM4bumzMnxywBYhuph6J819RRw/ku+rLbelwfMunktuzVVHg== -fast-wrap-ansi@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz#95e952a0145bce3f59ad56e179f84c48d4072935" - integrity sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q== - dependencies: - fast-string-width "^3.0.2" - fastest-levenshtein@^1.0.16: version "1.0.16" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" @@ -2071,7 +1943,7 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.1, get-caller-file@^2.0.5: +get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -2131,11 +2003,6 @@ globjoin@^0.1.4: resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg== -graphql@^16.13.2: - version "16.14.2" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.14.2.tgz#83faf25869e3df727cc855161db5da85b0e5b2c0" - integrity sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA== - h3@^2.0.1-rc.29: version "2.0.1-rc.31" resolved "https://registry.yarnpkg.com/h3/-/h3-2.0.1-rc.31.tgz#fd799c829bba9f02deaf56b0b964ba46229f91e7" @@ -2166,14 +2033,6 @@ hashery@^1.4.0, hashery@^1.5.1: dependencies: hookified "^1.15.0" -headers-polyfill@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-5.0.1.tgz#9554eb2892b666db1c7a3380a91b6cfd467a6b19" - integrity sha512-1TJ6Fih/b8h5TIcv+1+Hw0PDQWJTKDKzFZzcKOiW1wJza3XoAQlkCuXLbymPYB8+ZQyw8mHvdw560e8zVFIWyA== - dependencies: - "@types/set-cookie-parser" "^2.4.10" - set-cookie-parser "^3.0.1" - hookable@^5.5.3: version "5.5.3" resolved "https://registry.yarnpkg.com/hookable/-/hookable-5.5.3.tgz#6cfc358984a1ef991e2518cb9ed4a778bbd3215d" @@ -2292,11 +2151,6 @@ is-inside-container@^1.0.0: dependencies: is-docker "^3.0.0" -is-node-process@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-node-process/-/is-node-process-1.2.0.tgz#ea02a1b90ddb3934a19aea414e88edef7e11d134" - integrity sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw== - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -2642,40 +2496,11 @@ ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -msw@2.15.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/msw/-/msw-2.15.0.tgz#4028ba3d887af8c166d45aa3bf37116f73f21cec" - integrity sha512-2wQAmKkQKxRuXvYJxVhPGG0wZNBQyD06oJvxqw90XqLvptdqxdlHrFUfEteKkpaNORX3Xzc+HtEl/q0nfmN2wQ== - dependencies: - "@inquirer/confirm" "^6.0.11" - "@mswjs/interceptors" "^0.41.3" - "@open-draft/deferred-promise" "^3.0.0" - "@types/statuses" "^2.0.6" - cookie "^1.1.1" - graphql "^16.13.2" - headers-polyfill "^5.0.1" - is-node-process "^1.2.0" - outvariant "^1.4.3" - path-to-regexp "^6.3.0" - picocolors "^1.1.1" - rettime "^0.11.11" - statuses "^2.0.2" - strict-event-emitter "^0.5.1" - tough-cookie "^6.0.1" - type-fest "^5.5.0" - until-async "^3.0.2" - yargs "^17.7.2" - muggle-string@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.4.1.tgz#3b366bd43b32f809dc20659534dd30e7c8a0d328" integrity sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ== -mute-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-3.0.0.tgz#cd8014dd2acb72e1e91bb67c74f0019e620ba2d1" - integrity sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw== - nanoid@^3.3.18: version "3.3.18" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.18.tgz#f66a2de1199ffde0fcf21c8a5f13106b1c081913" @@ -2746,11 +2571,6 @@ open@^11.0.0: powershell-utils "^0.2.1" wsl-utils "^1.0.0" -outvariant@^1.4.0, outvariant@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.3.tgz#221c1bfc093e8fec7075497e7799fdbf43d14873" - integrity sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA== - p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -2810,11 +2630,6 @@ path-scurry@^2.0.2: lru-cache "^11.0.0" minipass "^7.1.2" -path-to-regexp@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz#2b6a26a337737a8e1416f9272ed0766b1c0389f4" - integrity sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ== - pathe@^2.0.1, pathe@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" @@ -3026,11 +2841,6 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -rettime@^0.11.11: - version "0.11.11" - resolved "https://registry.yarnpkg.com/rettime/-/rettime-0.11.11.tgz#fe8fb192e1877bb0080fc1a640cb08eededd7d12" - integrity sha512-ILJRqVWBCTlg9r42fFgwVZx1gnFAcQF8mRoMkbgQfIrjEDf9nbBFDFx00oloOa+Q869FUtaYDXZvEfnecQSCoQ== - reusify@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" @@ -3268,11 +3078,6 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-cookie-parser@^3.0.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-3.1.2.tgz#f4e490298759d756a68eabcbcd0fc9261ad0fee0" - integrity sha512-5/r/lTwbJ3zQ+qwdUFZYeRNqda7P5HD8zQKqlSjdGt1/S0cjLAphHusj4Y58ahDtWn/g32xrIS58/ikOvwl0Lw== - setprototypeof@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" @@ -3295,7 +3100,7 @@ siginfo@^2.0.0: resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== -signal-exit@^4.0.1, signal-exit@^4.1.0: +signal-exit@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== @@ -3348,11 +3153,6 @@ std-env@^4.2.0: resolved "https://registry.yarnpkg.com/std-env/-/std-env-4.2.0.tgz#8ebe0ec60485668ab47227b312f4254cdf80c9d3" integrity sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw== -strict-event-emitter@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz#1602ece81c51574ca39c6815e09f1a3e8550bd93" - integrity sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ== - string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -3523,11 +3323,6 @@ table@^6.9.0: string-width "^4.2.3" strip-ansi "^6.0.1" -tagged-tag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/tagged-tag/-/tagged-tag-1.0.0.tgz#a0b5917c2864cba54841495abfa3f6b13edcf4d6" - integrity sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng== - tinybench@6.1.4: version "6.1.4" resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-6.1.4.tgz#f855bb3ad1f2fe85cf624490d58bb4f4f5d30da8" @@ -3556,18 +3351,6 @@ tinyrainbow@^3.1.1: resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-3.1.1.tgz#c0168387d3d8d70b6b3c2c0936de5fee738cea20" integrity sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw== -tldts-core@^7.4.11: - version "7.4.11" - resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-7.4.11.tgz#a02fba29af72cbf9e658cb3a335f857efc9475f7" - integrity sha512-CW3WN2rIIE/Of21mulhgnGOwoDyEFNygyIBOONSdyAuSATgMMUCpLeUlB+E8sAwA5xRV9hYPl+kyZ9citHCaKg== - -tldts@^7.0.5: - version "7.4.11" - resolved "https://registry.yarnpkg.com/tldts/-/tldts-7.4.11.tgz#51d5a3feeb473e592edf671491a24fb23789eed2" - integrity sha512-aBiNayCfTQxuIJBm06M+xR14cYaYlDlSXZbgsnKzKNxDKUVq7KFwTjwBSsb7m9Y5xO8WfPnBc63WaYFMTGlvqw== - dependencies: - tldts-core "^7.4.11" - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -3585,35 +3368,16 @@ totalist@^3.0.0: resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== -tough-cookie@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-6.0.2.tgz#7b1f22fcf2daf06c4ff9d53ec1845f44c6627062" - integrity sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA== - dependencies: - tldts "^7.0.5" - tslib@^2.1.0: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -type-fest@^5.5.0: - version "5.9.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-5.9.0.tgz#0a4dd554d397f1a44447477eaeb3d1f4d8c7680f" - integrity sha512-yANm3Jr3GiJ1qgJlxGAVxTOIcEOk1rhQHamlXtnrCK7EHP4HeM9OGxtMg/W7HFdrVzw/ZWJKGVIJusVH85sLtw== - dependencies: - tagged-tag "^1.0.0" - ufo@^1.6.3, ufo@^1.6.4: version "1.6.4" resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.6.4.tgz#7a8fb875fcc6382d2c7d0b3692738b0500a92467" integrity sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA== -undici-types@~8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-8.3.0.tgz#44e9fc9f3244648cdea35e4f9bb2d681e9410809" - integrity sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ== - unicorn-magic@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.4.0.tgz#78c6a090fd6d07abd2468b83b385603e00dfdb24" @@ -3636,11 +3400,6 @@ unplugin@^3.3.0: picomatch "^4.0.4" webpack-virtual-modules "^0.6.2" -until-async@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/until-async/-/until-async-3.0.2.tgz#447f1531fdd7bb2b4c7a98869bdb1a4c2a23865f" - integrity sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw== - update-browserslist-db@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.3.2.tgz#9d99fbff56c50bb11ba5fd35cece5916da595836" @@ -3868,15 +3627,6 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - write-file-atomic@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-7.0.1.tgz#0e2a450ab5aa306bcfcd3aed61833b10cc4fb885" @@ -3902,11 +3652,6 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" @@ -3920,11 +3665,6 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - yargs@^15.3.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" @@ -3942,19 +3682,6 @@ yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^17.7.2: - version "17.7.3" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.3.tgz#779dffe6bcafec596a7172e983289a588647faaa" - integrity sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g== - 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" - zigpty@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/zigpty/-/zigpty-0.2.1.tgz#9ca77e122f9b833d59743e868fafb8550e9c278f"