get rid of msw, use fetch mock instead
This commit is contained in:
parent
98908a3b60
commit
341803dac2
8 changed files with 199 additions and 475 deletions
|
|
@ -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
|
||||
|
|
@ -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",
|
||||
|
|
|
|||
19
test/fixtures/mock_api.js
vendored
19
test/fixtures/mock_api.js
vendored
|
|
@ -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,
|
||||
},
|
||||
],
|
||||
})
|
||||
5
test/fixtures/worker.js
vendored
5
test/fixtures/worker.js
vendored
|
|
@ -1,5 +0,0 @@
|
|||
import { setupWorker } from 'msw/browser'
|
||||
|
||||
export const worker = setupWorker()
|
||||
|
||||
window.__test__ = window.__test__ || 'TEST'
|
||||
|
|
@ -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: {
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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 = '<projectRoot>/config/local.json'
|
||||
|
|
@ -163,7 +162,6 @@ export default defineConfig(async ({ mode, command }) => {
|
|||
'node_modules/.cache/stylelintcache',
|
||||
),
|
||||
}),
|
||||
...(mode === 'test' ? [mswPlugin()] : []),
|
||||
],
|
||||
css: {
|
||||
devSourcemap: true,
|
||||
|
|
|
|||
279
yarn.lock
279
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"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue