Mirror: The highly customizable and versatile GraphQL client with which you add on features like normalized caching as you grow.
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

chore(workspace): convert jest over to vitest (#2817)

authored by

Jovi De Croock and committed by
GitHub
af93ef9a 1504a44f

+1970 -2840
+1 -1
.github/workflows/ci.yml
··· 49 49 - name: Linting 50 50 run: yarn run lint 51 51 - name: Unit Tests 52 - run: yarn run test --maxWorkers=2 52 + run: yarn run test 53 53 54 54 react-e2e: 55 55 name: React end-to-end tests
+1 -4
exchanges/auth/package.json
··· 39 39 "dist/" 40 40 ], 41 41 "scripts": { 42 - "test": "jest", 42 + "test": "vitest --config ../../vitest.config.ts", 43 43 "clean": "rimraf dist extras", 44 44 "check": "tsc --noEmit", 45 45 "lint": "eslint --ext=js,jsx,ts,tsx .", 46 46 "build": "rollup -c ../../scripts/rollup/config.mjs", 47 47 "prepare": "node ../../scripts/prepare/index.js", 48 48 "prepublishOnly": "run-s clean build" 49 - }, 50 - "jest": { 51 - "preset": "../../scripts/jest/preset" 52 49 }, 53 50 "dependencies": { 54 51 "@urql/core": ">=3.0.0",
+32 -13
exchanges/auth/src/authExchange.test.ts
··· 9 9 tap, 10 10 map, 11 11 } from 'wonka'; 12 + import { vi, expect, it } from 'vitest'; 12 13 13 14 import { print } from 'graphql'; 14 15 import { authExchange } from './authExchange'; ··· 19 20 Operation, 20 21 OperationResult, 21 22 } from '@urql/core'; 22 - import { queryOperation } from '@urql/core/test-utils'; 23 + import { queryOperation } from '../../../packages/core/src/test-utils'; 23 24 24 25 const makeExchangeArgs = () => { 25 26 const operations: Operation[] = []; 26 - const result = jest.fn( 27 + const result = vi.fn( 27 28 (operation: Operation): OperationResult => ({ operation }) 28 29 ); 29 30 ··· 146 147 const { exchangeArgs } = makeExchangeArgs(); 147 148 const { source, next } = makeSubject<any>(); 148 149 149 - const result = jest.fn(); 150 + const result = vi.fn(); 150 151 const auth$ = pipe( 151 152 source, 152 153 authExchange({ ··· 200 201 let initialAuth; 201 202 let afterErrorAuth; 202 203 203 - const didAuthError = jest.fn().mockReturnValueOnce(true); 204 + const didAuthError = vi.fn().mockReturnValueOnce(true); 204 205 205 - const getAuth = jest 206 + const getAuth = vi 206 207 .fn() 207 208 .mockImplementationOnce(() => { 208 209 initialAuth = Promise.resolve({ token: 'initial-token' }); ··· 229 230 await Promise.resolve(); 230 231 expect(getAuth).toHaveBeenCalledTimes(1); 231 232 await initialAuth; 232 - await Promise.resolve(); 233 - await Promise.resolve(); 233 + await new Promise(res => { 234 + setTimeout(() => { 235 + res(null); 236 + }); 237 + }); 234 238 235 239 result.mockReturnValueOnce({ 236 240 operation: queryOperation, ··· 245 249 expect(getAuth).toHaveBeenCalledTimes(2); 246 250 247 251 await afterErrorAuth; 252 + await new Promise(res => { 253 + setTimeout(() => { 254 + res(null); 255 + }); 256 + }); 248 257 249 258 expect(result).toHaveBeenCalledTimes(2); 250 259 expect(operations.length).toBe(2); ··· 265 274 let initialAuth; 266 275 let afterErrorAuth; 267 276 268 - const willAuthError = jest 277 + vi.useRealTimers(); 278 + const willAuthError = vi 269 279 .fn() 270 280 .mockReturnValueOnce(true) 271 281 .mockReturnValue(false); 272 282 273 - const getAuth = jest 283 + const getAuth = vi 274 284 .fn() 275 - .mockImplementationOnce(() => { 285 + .mockImplementationOnce(async () => { 276 286 initialAuth = Promise.resolve({ token: 'initial-token' }); 277 - return initialAuth; 287 + return await initialAuth; 278 288 }) 279 289 .mockImplementationOnce(() => { 280 290 afterErrorAuth = Promise.resolve({ token: 'final-token' }); ··· 297 307 await Promise.resolve(); 298 308 expect(getAuth).toHaveBeenCalledTimes(1); 299 309 await initialAuth; 300 - await Promise.resolve(); 301 - await Promise.resolve(); 310 + await new Promise(res => { 311 + setTimeout(() => { 312 + res(null); 313 + }); 314 + }); 302 315 303 316 next(queryOperation); 304 317 expect(result).toHaveBeenCalledTimes(0); ··· 306 319 expect(getAuth).toHaveBeenCalledTimes(2); 307 320 308 321 await afterErrorAuth; 322 + 323 + await new Promise(res => { 324 + setTimeout(() => { 325 + res(null); 326 + }); 327 + }); 309 328 310 329 expect(result).toHaveBeenCalledTimes(1); 311 330 expect(operations.length).toBe(1);
+1 -4
exchanges/context/package.json
··· 38 38 "dist/" 39 39 ], 40 40 "scripts": { 41 - "test": "jest", 41 + "test": "vitest --config ../../vitest.config.ts", 42 42 "clean": "rimraf dist extras", 43 43 "check": "tsc --noEmit", 44 44 "lint": "eslint --ext=js,jsx,ts,tsx .", 45 45 "build": "rollup -c ../../scripts/rollup/config.mjs", 46 46 "prepare": "node ../../scripts/prepare/index.js", 47 47 "prepublishOnly": "run-s clean build" 48 - }, 49 - "jest": { 50 - "preset": "../../scripts/jest/preset" 51 48 }, 52 49 "dependencies": { 53 50 "@urql/core": ">=2.3.6",
+15 -12
exchanges/context/src/context.test.ts
··· 1 1 import { pipe, map, makeSubject, publish, tap } from 'wonka'; 2 + import { vi, expect, it, beforeEach } from 'vitest'; 2 3 3 4 import { 4 5 gql, ··· 28 29 }, 29 30 }; 30 31 31 - const dispatchDebug = jest.fn(); 32 + const dispatchDebug = vi.fn(); 32 33 let client, op, ops$, next; 33 34 beforeEach(() => { 34 35 client = createClient({ url: 'http://0.0.0.0' }); ··· 41 42 }); 42 43 43 44 it(`calls getContext`, () => { 44 - const response = jest.fn( 45 + const response = vi.fn( 45 46 (forwardOp: Operation): OperationResult => { 46 47 return { 47 48 operation: forwardOp, ··· 50 51 } 51 52 ); 52 53 53 - const result = jest.fn(); 54 + const result = vi.fn(); 54 55 const forward: ExchangeIO = ops$ => { 55 56 return pipe(ops$, map(response)); 56 57 }; ··· 75 76 expect(result).toHaveBeenCalledTimes(1); 76 77 }); 77 78 78 - it(`calls getContext async`, done => { 79 - const response = jest.fn( 79 + it(`calls getContext async`, async () => { 80 + const response = vi.fn( 80 81 (forwardOp: Operation): OperationResult => { 81 82 return { 82 83 operation: forwardOp, ··· 85 86 } 86 87 ); 87 88 88 - const result = jest.fn(); 89 + const result = vi.fn(); 89 90 const forward: ExchangeIO = ops$ => { 90 91 return pipe(ops$, map(response)); 91 92 }; ··· 108 109 109 110 next(op); 110 111 111 - setTimeout(() => { 112 - expect(response).toHaveBeenCalledTimes(1); 113 - expect(response.mock.calls[0][0].context.headers).toEqual(headers); 114 - expect(result).toHaveBeenCalledTimes(1); 115 - done(); 116 - }, 10); 112 + await new Promise(res => { 113 + setTimeout(() => { 114 + expect(response).toHaveBeenCalledTimes(1); 115 + expect(response.mock.calls[0][0].context.headers).toEqual(headers); 116 + expect(result).toHaveBeenCalledTimes(1); 117 + res(null); 118 + }, 10); 119 + }); 117 120 });
+1 -4
exchanges/execute/package.json
··· 39 39 "dist/" 40 40 ], 41 41 "scripts": { 42 - "test": "jest", 42 + "test": "vitest --config ../../vitest.config.ts", 43 43 "clean": "rimraf dist extras", 44 44 "check": "tsc --noEmit", 45 45 "lint": "eslint --ext=js,jsx,ts,tsx .", 46 46 "build": "rollup -c ../../scripts/rollup/config.mjs", 47 47 "prepare": "node ../../scripts/prepare/index.js", 48 48 "prepublishOnly": "run-s clean build" 49 - }, 50 - "jest": { 51 - "preset": "../../scripts/jest/preset" 52 49 }, 53 50 "dependencies": { 54 51 "@urql/core": ">=3.0.0",
+13 -11
exchanges/execute/src/execute.test.ts
··· 1 - jest.mock('graphql', () => { 2 - const graphql = jest.requireActual('graphql'); 1 + import { vi, expect, it, beforeEach, afterEach, describe, Mock } from 'vitest'; 2 + 3 + vi.mock('graphql', async () => { 4 + const graphql = await vi.importActual('graphql'); 3 5 4 6 return { 5 7 __esModule: true, 6 - ...graphql, 7 - print: jest.fn(() => '{ placeholder }'), 8 - execute: jest.fn(() => ({ key: 'value' })), 9 - subscribe: jest.fn(), 8 + ...(graphql as object), 9 + print: vi.fn(() => '{ placeholder }'), 10 + execute: vi.fn(() => ({ key: 'value' })), 11 + subscribe: vi.fn(), 10 12 }; 11 13 }); 12 14 ··· 26 28 context, 27 29 queryOperation, 28 30 subscriptionOperation, 29 - } from '@urql/core/test-utils'; 31 + } from '../../../packages/core/src/test-utils'; 30 32 import { 31 33 makeErrorResult, 32 34 makeOperation, ··· 48 50 subscriptionOperation.query 49 51 ); 50 52 51 - const fetchMock = (global as any).fetch as jest.Mock; 53 + const fetchMock = (global as any).fetch as Mock; 52 54 const mockHttpResponseData = { key: 'value' }; 53 55 54 56 beforeEach(() => { 55 - jest.clearAllMocks(); 57 + vi.clearAllMocks(); 56 58 mocked(print).mockImplementation(a => a as any); 57 59 mocked(execute).mockResolvedValue({ data: mockHttpResponseData }); 58 60 mocked(subscribe).mockImplementation(async function* x(this: any) { ··· 167 169 168 170 fetchMock.mockResolvedValue({ 169 171 status: 200, 170 - text: jest 172 + text: vi 171 173 .fn() 172 174 .mockResolvedValue(JSON.stringify({ data: mockHttpResponseData })), 173 175 }); ··· 175 177 const responseFromFetchExchange = await pipe( 176 178 fromValue(queryOperation), 177 179 fetchExchange({ 178 - dispatchDebug: jest.fn(), 180 + dispatchDebug: vi.fn(), 179 181 forward: () => empty as Source<OperationResult>, 180 182 client: {} as Client, 181 183 }),
+1 -4
exchanges/graphcache/package.json
··· 53 53 "default-storage/" 54 54 ], 55 55 "scripts": { 56 - "test": "jest", 56 + "test": "vitest --config ../../vitest.config.ts", 57 57 "clean": "rimraf dist extras", 58 58 "check": "tsc --noEmit", 59 59 "lint": "eslint --ext=js,jsx,ts,tsx .", 60 60 "build": "rollup -c ../../scripts/rollup/config.mjs", 61 61 "prepare": "node ../../scripts/prepare/index.js", 62 62 "prepublishOnly": "run-s clean build" 63 - }, 64 - "jest": { 65 - "preset": "../../scripts/jest/preset" 66 63 }, 67 64 "dependencies": { 68 65 "@urql/core": ">=3.0.5",
+2
exchanges/graphcache/src/ast/schemaPredicates.test.ts
··· 1 1 import { Kind, InlineFragmentNode } from 'graphql'; 2 + import { describe, it, expect } from 'vitest'; 3 + 2 4 import { buildClientSchema } from './schema'; 3 5 import * as SchemaPredicates from './schemaPredicates'; 4 6 import { minifyIntrospectionQuery } from '@urql/introspection';
+2 -1
exchanges/graphcache/src/ast/traversal.test.ts
··· 1 1 import { gql } from '@urql/core'; 2 + import { describe, it, expect } from 'vitest'; 3 + 2 4 import { getSelectionSet } from './node'; 3 - 4 5 import { getMainOperation, shouldInclude } from './traversal'; 5 6 6 7 describe('getMainOperation', () => {
+1
exchanges/graphcache/src/ast/variables.test.ts
··· 1 1 import { gql } from '@urql/core'; 2 + import { describe, it, expect } from 'vitest'; 2 3 import { getMainOperation } from './traversal'; 3 4 import { normalizeVariables, filterVariables } from './variables'; 4 5
+1
exchanges/graphcache/src/cacheExchange-types.test.ts
··· 1 + import { describe, it } from 'vitest'; 1 2 import { 2 3 cacheExchange, 3 4 Resolver as GraphCacheResolver,
+111 -112
exchanges/graphcache/src/cacheExchange.test.ts
··· 6 6 OperationResult, 7 7 CombinedError, 8 8 } from '@urql/core'; 9 + import { vi, expect, it, describe } from 'vitest'; 9 10 10 11 import { 11 12 Source, ··· 49 50 }, 50 51 }; 51 52 52 - const dispatchDebug = jest.fn(); 53 + const dispatchDebug = vi.fn(); 53 54 54 55 describe('data dependencies', () => { 55 56 it('writes queries to the cache', () => { ··· 72 73 }, 73 74 }; 74 75 75 - const response = jest.fn( 76 + const response = vi.fn( 76 77 (forwardOp: Operation): OperationResult => { 77 78 expect(forwardOp.key).toBe(op.key); 78 79 return { operation: forwardOp, data: expected }; ··· 80 81 ); 81 82 82 83 const { source: ops$, next } = makeSubject<Operation>(); 83 - const result = jest.fn(); 84 + const result = vi.fn(); 84 85 const forward: ExchangeIO = ops$ => pipe(ops$, map(response)); 85 86 86 87 pipe( ··· 121 122 } 122 123 ); 123 124 124 - const response = jest.fn( 125 + const response = vi.fn( 125 126 (forwardOp: Operation): OperationResult => { 126 127 expect(forwardOp.key).toBe(op.key); 127 128 return { operation: forwardOp, data: queryOneData }; ··· 129 130 ); 130 131 131 132 const { source: ops$, next } = makeSubject<Operation>(); 132 - const result = jest.fn(); 133 + const result = vi.fn(); 133 134 const forward: ExchangeIO = ops$ => pipe(ops$, map(response)); 134 135 135 136 pipe( ··· 174 175 const client = createClient({ url: 'http://0.0.0.0' }); 175 176 const { source: ops$, next } = makeSubject<Operation>(); 176 177 177 - const reexec = jest 178 + const reexec = vi 178 179 .spyOn(client, 'reexecuteOperation') 179 180 .mockImplementation(next); 180 181 ··· 188 189 query: queryMultiple, 189 190 }); 190 191 191 - const response = jest.fn( 192 + const response = vi.fn( 192 193 (forwardOp: Operation): OperationResult => { 193 194 if (forwardOp.key === 1) { 194 195 return { operation: opOne, data: queryOneData }; ··· 201 202 ); 202 203 203 204 const forward: ExchangeIO = ops$ => pipe(ops$, map(response)); 204 - const result = jest.fn(); 205 + const result = vi.fn(); 205 206 206 207 pipe( 207 208 cacheExchange({})({ forward, client, dispatchDebug })(ops$), ··· 227 228 }); 228 229 229 230 it('updates related queries when a mutation update touches query data', () => { 230 - jest.useFakeTimers(); 231 + vi.useFakeTimers(); 231 232 232 233 const balanceFragment = gql` 233 234 fragment BalanceFragment on Author { ··· 302 303 const client = createClient({ url: 'http://0.0.0.0' }); 303 304 const { source: ops$, next } = makeSubject<Operation>(); 304 305 305 - const reexec = jest 306 + const reexec = vi 306 307 .spyOn(client, 'reexecuteOperation') 307 308 .mockImplementation(next); 308 309 ··· 324 325 variables: { userId: '1', amount: 1000 }, 325 326 }); 326 327 327 - const response = jest.fn( 328 + const response = vi.fn( 328 329 (forwardOp: Operation): OperationResult => { 329 330 if (forwardOp.key === 1) { 330 331 return { operation: opOne, data: queryByIdDataA }; ··· 338 339 } 339 340 ); 340 341 341 - const result = jest.fn(); 342 + const result = vi.fn(); 342 343 const forward: ExchangeIO = ops$ => pipe(ops$, delay(1), map(response)); 343 344 344 345 const updates = { 345 346 Mutation: { 346 - updateBalance: jest.fn((result, _args, cache) => { 347 + updateBalance: vi.fn((result, _args, cache) => { 347 348 const { 348 349 updateBalance: { userId, balance }, 349 350 } = result; ··· 365 366 ); 366 367 367 368 next(opTwo); 368 - jest.runAllTimers(); 369 + vi.runAllTimers(); 369 370 expect(response).toHaveBeenCalledTimes(1); 370 371 371 372 next(opOne); 372 - jest.runAllTimers(); 373 + vi.runAllTimers(); 373 374 expect(response).toHaveBeenCalledTimes(2); 374 375 375 376 next(opMutation); 376 - jest.runAllTimers(); 377 + vi.runAllTimers(); 377 378 378 379 expect(response).toHaveBeenCalledTimes(3); 379 380 expect(updates.Mutation.updateBalance).toHaveBeenCalledTimes(1); ··· 408 409 409 410 const client = createClient({ url: 'http://0.0.0.0' }); 410 411 const { source: ops$, next } = makeSubject<Operation>(); 411 - const reexec = jest 412 + const reexec = vi 412 413 .spyOn(client, 'reexecuteOperation') 413 414 .mockImplementation(next); 414 415 ··· 421 422 query: queryUnrelated, 422 423 }); 423 424 424 - const response = jest.fn( 425 + const response = vi.fn( 425 426 (forwardOp: Operation): OperationResult => { 426 427 if (forwardOp.key === 1) { 427 428 return { operation: opOne, data: queryOneData }; ··· 434 435 ); 435 436 436 437 const forward: ExchangeIO = ops$ => pipe(ops$, map(response)); 437 - const result = jest.fn(); 438 + const result = vi.fn(); 438 439 439 440 pipe( 440 441 cacheExchange({})({ forward, client, dispatchDebug })(ops$), ··· 453 454 }); 454 455 455 456 it('does not reach updater when mutation has no selectionset in optimistic phase', () => { 456 - jest.useFakeTimers(); 457 + vi.useFakeTimers(); 457 458 458 459 const mutation = gql` 459 460 mutation { ··· 469 470 const client = createClient({ url: 'http://0.0.0.0' }); 470 471 const { source: ops$, next } = makeSubject<Operation>(); 471 472 472 - jest.spyOn(client, 'reexecuteOperation').mockImplementation(next); 473 + vi.spyOn(client, 'reexecuteOperation').mockImplementation(next); 473 474 474 475 const opMutation = client.createRequestOperation('mutation', { 475 476 key: 1, 476 477 query: mutation, 477 478 }); 478 479 479 - const response = jest.fn( 480 + const response = vi.fn( 480 481 (forwardOp: Operation): OperationResult => { 481 482 if (forwardOp.key === 1) { 482 483 return { operation: opMutation, data: mutationData }; ··· 486 487 } 487 488 ); 488 489 489 - const result = jest.fn(); 490 + const result = vi.fn(); 490 491 const forward: ExchangeIO = ops$ => pipe(ops$, delay(1), map(response)); 491 492 492 493 const updates = { 493 494 Mutation: { 494 - concealAuthor: jest.fn(), 495 + concealAuthor: vi.fn(), 495 496 }, 496 497 }; 497 498 ··· 504 505 next(opMutation); 505 506 expect(updates.Mutation.concealAuthor).toHaveBeenCalledTimes(0); 506 507 507 - jest.runAllTimers(); 508 + vi.runAllTimers(); 508 509 expect(updates.Mutation.concealAuthor).toHaveBeenCalledTimes(1); 509 510 }); 510 511 511 512 it('does reach updater when mutation has no selectionset in optimistic phase with optimistic update', () => { 512 - jest.useFakeTimers(); 513 + vi.useFakeTimers(); 513 514 514 515 const mutation = gql` 515 516 mutation { ··· 525 526 const client = createClient({ url: 'http://0.0.0.0' }); 526 527 const { source: ops$, next } = makeSubject<Operation>(); 527 528 528 - jest.spyOn(client, 'reexecuteOperation').mockImplementation(next); 529 + vi.spyOn(client, 'reexecuteOperation').mockImplementation(next); 529 530 530 531 const opMutation = client.createRequestOperation('mutation', { 531 532 key: 1, 532 533 query: mutation, 533 534 }); 534 535 535 - const response = jest.fn( 536 + const response = vi.fn( 536 537 (forwardOp: Operation): OperationResult => { 537 538 if (forwardOp.key === 1) { 538 539 return { operation: opMutation, data: mutationData }; ··· 542 543 } 543 544 ); 544 545 545 - const result = jest.fn(); 546 + const result = vi.fn(); 546 547 const forward: ExchangeIO = ops$ => pipe(ops$, delay(1), map(response)); 547 548 548 549 const updates = { 549 550 Mutation: { 550 - concealAuthor: jest.fn(), 551 + concealAuthor: vi.fn(), 551 552 }, 552 553 }; 553 554 554 555 const optimistic = { 555 - concealAuthor: jest.fn(() => true) as any, 556 + concealAuthor: vi.fn(() => true) as any, 556 557 }; 557 558 558 559 pipe( ··· 569 570 expect(optimistic.concealAuthor).toHaveBeenCalledTimes(1); 570 571 expect(updates.Mutation.concealAuthor).toHaveBeenCalledTimes(1); 571 572 572 - jest.runAllTimers(); 573 + vi.runAllTimers(); 573 574 expect(updates.Mutation.concealAuthor).toHaveBeenCalledTimes(2); 574 575 }); 575 576 ··· 608 609 }), 609 610 }; 610 611 611 - const reexecuteOperation = jest 612 + const reexecuteOperation = vi 612 613 .spyOn(client, 'reexecuteOperation') 613 614 .mockImplementation(next); 614 615 615 - const response = jest.fn( 616 + const response = vi.fn( 616 617 (forwardOp: Operation): OperationResult => { 617 618 if (forwardOp.key === 1) return queryResult; 618 619 return undefined as any; 619 620 } 620 621 ); 621 622 622 - const result = jest.fn(); 623 + const result = vi.fn(); 623 624 const forward: ExchangeIO = ops$ => pipe(ops$, map(response)); 624 625 625 626 pipe( ··· 639 640 640 641 describe('optimistic updates', () => { 641 642 it('writes optimistic mutations to the cache', () => { 642 - jest.useFakeTimers(); 643 + vi.useFakeTimers(); 643 644 644 645 const mutation = gql` 645 646 mutation { ··· 673 674 const client = createClient({ url: 'http://0.0.0.0' }); 674 675 const { source: ops$, next } = makeSubject<Operation>(); 675 676 676 - const reexec = jest 677 + const reexec = vi 677 678 .spyOn(client, 'reexecuteOperation') 678 679 .mockImplementation(next); 679 680 ··· 687 688 query: mutation, 688 689 }); 689 690 690 - const response = jest.fn( 691 + const response = vi.fn( 691 692 (forwardOp: Operation): OperationResult => { 692 693 if (forwardOp.key === 1) { 693 694 return { operation: opOne, data: queryOneData }; ··· 699 700 } 700 701 ); 701 702 702 - const result = jest.fn(); 703 + const result = vi.fn(); 703 704 const forward: ExchangeIO = ops$ => pipe(ops$, delay(1), map(response)); 704 705 705 706 const optimistic = { 706 - concealAuthor: jest.fn(() => optimisticMutationData.concealAuthor) as any, 707 + concealAuthor: vi.fn(() => optimisticMutationData.concealAuthor) as any, 707 708 }; 708 709 709 710 pipe( ··· 713 714 ); 714 715 715 716 next(opOne); 716 - jest.runAllTimers(); 717 + vi.runAllTimers(); 717 718 expect(response).toHaveBeenCalledTimes(1); 718 719 719 720 next(opMutation); ··· 726 727 author: { name: '[REDACTED OFFLINE]' }, 727 728 }); 728 729 729 - jest.runAllTimers(); 730 + vi.runAllTimers(); 730 731 expect(response).toHaveBeenCalledTimes(2); 731 732 expect(result).toHaveBeenCalledTimes(4); 732 733 }); 733 734 734 735 it('batches optimistic mutation result application', () => { 735 - jest.useFakeTimers(); 736 + vi.useFakeTimers(); 736 737 737 738 const mutation = gql` 738 739 mutation { ··· 764 765 const client = createClient({ url: 'http://0.0.0.0' }); 765 766 const { source: ops$, next } = makeSubject<Operation>(); 766 767 767 - const reexec = jest 768 + const reexec = vi 768 769 .spyOn(client, 'reexecuteOperation') 769 770 .mockImplementation(next); 770 771 ··· 783 784 query: mutation, 784 785 }); 785 786 786 - const response = jest.fn( 787 + const response = vi.fn( 787 788 (forwardOp: Operation): OperationResult => { 788 789 if (forwardOp.key === 1) { 789 790 return { operation: opOne, data: queryOneData }; ··· 797 798 } 798 799 ); 799 800 800 - const result = jest.fn(); 801 + const result = vi.fn(); 801 802 const forward: ExchangeIO = ops$ => pipe(ops$, delay(3), map(response)); 802 803 803 804 const optimistic = { 804 - concealAuthor: jest.fn(() => optimisticMutationData.concealAuthor) as any, 805 + concealAuthor: vi.fn(() => optimisticMutationData.concealAuthor) as any, 805 806 }; 806 807 807 808 pipe( ··· 812 813 ); 813 814 814 815 next(opOne); 815 - jest.runAllTimers(); 816 + vi.runAllTimers(); 816 817 expect(response).toHaveBeenCalledTimes(1); 817 818 expect(result).toHaveBeenCalledTimes(0); 818 819 819 820 next(opMutationOne); 820 - jest.advanceTimersByTime(1); 821 + vi.advanceTimersByTime(1); 821 822 next(opMutationTwo); 822 823 823 824 expect(response).toHaveBeenCalledTimes(1); ··· 825 826 expect(reexec).toHaveBeenCalledTimes(2); 826 827 expect(result).toHaveBeenCalledTimes(0); 827 828 828 - jest.advanceTimersByTime(2); 829 + vi.advanceTimersByTime(2); 829 830 expect(response).toHaveBeenCalledTimes(2); 830 831 expect(result).toHaveBeenCalledTimes(0); 831 832 832 - jest.runAllTimers(); 833 + vi.runAllTimers(); 833 834 expect(response).toHaveBeenCalledTimes(3); 834 835 expect(result).toHaveBeenCalledTimes(2); 835 836 }); 836 837 837 838 it('blocks refetches of overlapping queries', () => { 838 - jest.useFakeTimers(); 839 + vi.useFakeTimers(); 839 840 840 841 const mutation = gql` 841 842 mutation { ··· 858 859 const client = createClient({ url: 'http://0.0.0.0' }); 859 860 const { source: ops$, next } = makeSubject<Operation>(); 860 861 861 - const reexec = jest 862 + const reexec = vi 862 863 .spyOn(client, 'reexecuteOperation') 863 864 .mockImplementation(next); 864 865 ··· 878 879 query: mutation, 879 880 }); 880 881 881 - const response = jest.fn( 882 + const response = vi.fn( 882 883 (forwardOp: Operation): OperationResult => { 883 884 if (forwardOp.key === 1) { 884 885 return { operation: opOne, data: queryOneData }; ··· 888 889 } 889 890 ); 890 891 891 - const result = jest.fn(); 892 + const result = vi.fn(); 892 893 const forward: ExchangeIO = ops$ => 893 894 pipe( 894 895 ops$, ··· 898 899 ); 899 900 900 901 const optimistic = { 901 - concealAuthor: jest.fn(() => optimisticMutationData.concealAuthor) as any, 902 + concealAuthor: vi.fn(() => optimisticMutationData.concealAuthor) as any, 902 903 }; 903 904 904 905 pipe( ··· 908 909 ); 909 910 910 911 next(opOne); 911 - jest.runAllTimers(); 912 + vi.runAllTimers(); 912 913 expect(response).toHaveBeenCalledTimes(1); 913 914 914 915 next(opMutation); ··· 921 922 'cache-first' 922 923 ); 923 924 924 - jest.runAllTimers(); 925 + vi.runAllTimers(); 925 926 expect(response).toHaveBeenCalledTimes(1); 926 927 927 928 next(opOne); ··· 930 931 }); 931 932 932 933 it('correctly clears on error', () => { 933 - jest.useFakeTimers(); 934 + vi.useFakeTimers(); 934 935 935 936 const authorsQuery = gql` 936 937 query { ··· 973 974 const client = createClient({ url: 'http://0.0.0.0' }); 974 975 const { source: ops$, next } = makeSubject<Operation>(); 975 976 976 - const reexec = jest 977 + const reexec = vi 977 978 .spyOn(client, 'reexecuteOperation') 978 979 .mockImplementation(next); 979 980 ··· 987 988 query: mutation, 988 989 }); 989 990 990 - const response = jest.fn( 991 + const response = vi.fn( 991 992 (forwardOp: Operation): OperationResult => { 992 993 if (forwardOp.key === 1) { 993 994 return { operation: opOne, data: authorsQueryData }; ··· 1003 1004 } 1004 1005 ); 1005 1006 1006 - const result = jest.fn(); 1007 + const result = vi.fn(); 1007 1008 const forward: ExchangeIO = ops$ => pipe(ops$, delay(1), map(response)); 1008 1009 1009 1010 const optimistic = { 1010 - addAuthor: jest.fn(() => optimisticMutationData.addAuthor) as any, 1011 + addAuthor: vi.fn(() => optimisticMutationData.addAuthor) as any, 1011 1012 }; 1012 1013 1013 1014 const updates = { 1014 1015 Mutation: { 1015 - addAuthor: jest.fn((data, _, cache) => { 1016 + addAuthor: vi.fn((data, _, cache) => { 1016 1017 cache.updateQuery({ query: authorsQuery }, (prevData: any) => ({ 1017 1018 ...prevData, 1018 1019 authors: [...prevData.authors, data.addAuthor], ··· 1032 1033 ); 1033 1034 1034 1035 next(opOne); 1035 - jest.runAllTimers(); 1036 + vi.runAllTimers(); 1036 1037 expect(response).toHaveBeenCalledTimes(1); 1037 1038 1038 1039 next(opMutation); ··· 1041 1042 expect(updates.Mutation.addAuthor).toHaveBeenCalledTimes(1); 1042 1043 expect(reexec).toHaveBeenCalledTimes(1); 1043 1044 1044 - jest.runAllTimers(); 1045 + vi.runAllTimers(); 1045 1046 1046 1047 expect(updates.Mutation.addAuthor).toHaveBeenCalledTimes(2); 1047 1048 expect(response).toHaveBeenCalledTimes(2); ··· 1059 1060 query: queryOne, 1060 1061 }); 1061 1062 1062 - const response = jest.fn( 1063 + const response = vi.fn( 1063 1064 (forwardOp: Operation): OperationResult => { 1064 1065 if (forwardOp.key === 1) { 1065 1066 return { operation: opOne, data: queryOneData }; ··· 1071 1072 1072 1073 const forward: ExchangeIO = ops$ => pipe(ops$, map(response)); 1073 1074 1074 - const result = jest.fn(); 1075 - const fakeResolver = jest.fn(); 1075 + const result = vi.fn(); 1076 + const fakeResolver = vi.fn(); 1076 1077 1077 1078 pipe( 1078 1079 cacheExchange({ ··· 1102 1103 }); 1103 1104 1104 1105 it('follows resolvers for mutations', () => { 1105 - jest.useFakeTimers(); 1106 + vi.useFakeTimers(); 1106 1107 1107 1108 const mutation = gql` 1108 1109 mutation { ··· 1136 1137 query: mutation, 1137 1138 }); 1138 1139 1139 - const response = jest.fn( 1140 + const response = vi.fn( 1140 1141 (forwardOp: Operation): OperationResult => { 1141 1142 if (forwardOp.key === 1) { 1142 1143 return { operation: opOne, data: queryOneData }; ··· 1148 1149 } 1149 1150 ); 1150 1151 1151 - const result = jest.fn(); 1152 + const result = vi.fn(); 1152 1153 const forward: ExchangeIO = ops$ => pipe(ops$, delay(1), map(response)); 1153 1154 1154 - const fakeResolver = jest.fn(); 1155 + const fakeResolver = vi.fn(); 1155 1156 1156 1157 pipe( 1157 1158 cacheExchange({ ··· 1169 1170 ); 1170 1171 1171 1172 next(opOne); 1172 - jest.runAllTimers(); 1173 + vi.runAllTimers(); 1173 1174 expect(response).toHaveBeenCalledTimes(1); 1174 1175 1175 1176 next(opMutation); 1176 1177 expect(response).toHaveBeenCalledTimes(1); 1177 1178 expect(fakeResolver).toHaveBeenCalledTimes(1); 1178 1179 1179 - jest.runAllTimers(); 1180 + vi.runAllTimers(); 1180 1181 expect(result.mock.calls[1][0].data).toEqual({ 1181 1182 __typename: 'Mutation', 1182 1183 concealAuthor: { ··· 1188 1189 }); 1189 1190 1190 1191 it('follows nested resolvers for mutations', () => { 1191 - jest.useFakeTimers(); 1192 + vi.useFakeTimers(); 1192 1193 1193 1194 const mutation = gql` 1194 1195 mutation { ··· 1277 1278 ], 1278 1279 }; 1279 1280 1280 - const response = jest.fn( 1281 + const response = vi.fn( 1281 1282 (forwardOp: Operation): OperationResult => { 1282 1283 if (forwardOp.key === 1) { 1283 1284 return { operation: queryOperation, data: queryData }; ··· 1289 1290 } 1290 1291 ); 1291 1292 1292 - const result = jest.fn(); 1293 + const result = vi.fn(); 1293 1294 const forward: ExchangeIO = ops$ => pipe(ops$, delay(1), map(response)); 1294 1295 1295 - const fakeResolver = jest.fn(); 1296 + const fakeResolver = vi.fn(); 1296 1297 const called: any[] = []; 1297 1298 1298 1299 pipe( ··· 1323 1324 ); 1324 1325 1325 1326 next(queryOperation); 1326 - jest.runAllTimers(); 1327 + vi.runAllTimers(); 1327 1328 expect(response).toHaveBeenCalledTimes(1); 1328 1329 expect(fakeResolver).toHaveBeenCalledTimes(3); 1329 1330 1330 1331 next(mutationOperation); 1331 - jest.runAllTimers(); 1332 + vi.runAllTimers(); 1332 1333 expect(response).toHaveBeenCalledTimes(2); 1333 1334 expect(fakeResolver).toHaveBeenCalledTimes(6); 1334 1335 expect(result.mock.calls[1][0].data).toEqual({ ··· 1368 1369 1369 1370 describe('schema awareness', () => { 1370 1371 it('reexecutes query and returns data on partial result', () => { 1371 - jest.useFakeTimers(); 1372 + vi.useFakeTimers(); 1372 1373 const client = createClient({ url: 'http://0.0.0.0' }); 1373 1374 const { source: ops$, next } = makeSubject<Operation>(); 1374 - const reexec = jest 1375 + const reexec = vi 1375 1376 .spyOn(client, 'reexecuteOperation') 1376 1377 // Empty mock to avoid going in an endless loop, since we would again return 1377 1378 // partial data. ··· 1429 1430 ], 1430 1431 }; 1431 1432 1432 - const response = jest.fn( 1433 + const response = vi.fn( 1433 1434 (forwardOp: Operation): OperationResult => { 1434 1435 if (forwardOp.key === 1) { 1435 1436 return { operation: initialQueryOperation, data: queryData }; ··· 1441 1442 } 1442 1443 ); 1443 1444 1444 - const result = jest.fn(); 1445 + const result = vi.fn(); 1445 1446 const forward: ExchangeIO = ops$ => pipe(ops$, delay(1), map(response)); 1446 1447 1447 1448 pipe( ··· 1456 1457 ); 1457 1458 1458 1459 next(initialQueryOperation); 1459 - jest.runAllTimers(); 1460 + vi.runAllTimers(); 1460 1461 expect(response).toHaveBeenCalledTimes(1); 1461 1462 expect(reexec).toHaveBeenCalledTimes(0); 1462 1463 expect(result.mock.calls[0][0].data).toMatchObject({ ··· 1474 1475 ], 1475 1476 }); 1476 1477 1477 - expect(result.mock.calls[0][0]).toHaveProperty( 1478 - 'operation.context.meta', 1479 - undefined 1478 + expect(result.mock.calls[0][0]).not.toHaveProperty( 1479 + 'operation.context.meta' 1480 1480 ); 1481 1481 1482 1482 next(queryOperation); 1483 - jest.runAllTimers(); 1483 + vi.runAllTimers(); 1484 1484 expect(result).toHaveBeenCalledTimes(2); 1485 1485 expect(reexec).toHaveBeenCalledTimes(1); 1486 1486 expect(result.mock.calls[1][0].stale).toBe(true); ··· 1510 1510 }); 1511 1511 1512 1512 it('reexecutes query and returns data on partial results for nullable lists', () => { 1513 - jest.useFakeTimers(); 1513 + vi.useFakeTimers(); 1514 1514 const client = createClient({ url: 'http://0.0.0.0' }); 1515 1515 const { source: ops$, next } = makeSubject<Operation>(); 1516 - const reexec = jest 1516 + const reexec = vi 1517 1517 .spyOn(client, 'reexecuteOperation') 1518 1518 // Empty mock to avoid going in an endless loop, since we would again return 1519 1519 // partial data. ··· 1562 1562 ], 1563 1563 }; 1564 1564 1565 - const response = jest.fn( 1565 + const response = vi.fn( 1566 1566 (forwardOp: Operation): OperationResult => { 1567 1567 if (forwardOp.key === 1) { 1568 1568 return { operation: initialQueryOperation, data: queryData }; ··· 1574 1574 } 1575 1575 ); 1576 1576 1577 - const result = jest.fn(); 1577 + const result = vi.fn(); 1578 1578 const forward: ExchangeIO = ops$ => pipe(ops$, delay(1), map(response)); 1579 1579 1580 1580 pipe( ··· 1589 1589 ); 1590 1590 1591 1591 next(initialQueryOperation); 1592 - jest.runAllTimers(); 1592 + vi.runAllTimers(); 1593 1593 expect(response).toHaveBeenCalledTimes(1); 1594 1594 expect(reexec).toHaveBeenCalledTimes(0); 1595 1595 expect(result.mock.calls[0][0].data).toMatchObject({ ··· 1605 1605 ], 1606 1606 }); 1607 1607 1608 - expect(result.mock.calls[0][0]).toHaveProperty( 1609 - 'operation.context.meta', 1610 - undefined 1608 + expect(result.mock.calls[0][0]).not.toHaveProperty( 1609 + 'operation.context.meta' 1611 1610 ); 1612 1611 1613 1612 next(queryOperation); 1614 - jest.runAllTimers(); 1613 + vi.runAllTimers(); 1615 1614 expect(result).toHaveBeenCalledTimes(2); 1616 1615 expect(reexec).toHaveBeenCalledTimes(1); 1617 1616 expect(result.mock.calls[1][0].stale).toBe(true); ··· 1628 1627 1629 1628 describe('commutativity', () => { 1630 1629 it('applies results that come in out-of-order commutatively and consistently', () => { 1631 - jest.useFakeTimers(); 1630 + vi.useFakeTimers(); 1632 1631 1633 1632 let data: any; 1634 1633 ··· 1655 1654 delay(operation.key === 2 ? 5 : operation.key * 10) 1656 1655 ); 1657 1656 1658 - const output = jest.fn(result => { 1657 + const output = vi.fn(result => { 1659 1658 data = result.data; 1660 1659 }); 1661 1660 ··· 1680 1679 1681 1680 next(client.createRequestOperation('query', { key: 3, query })); 1682 1681 1683 - jest.advanceTimersByTime(5); 1682 + vi.advanceTimersByTime(5); 1684 1683 expect(output).toHaveBeenCalledTimes(1); 1685 1684 expect(data.index).toBe(2); 1686 1685 1687 - jest.advanceTimersByTime(10); 1686 + vi.advanceTimersByTime(10); 1688 1687 expect(output).toHaveBeenCalledTimes(2); 1689 1688 expect(data.index).toBe(2); 1690 1689 1691 - jest.advanceTimersByTime(30); 1690 + vi.advanceTimersByTime(30); 1692 1691 expect(output).toHaveBeenCalledTimes(3); 1693 1692 expect(data.index).toBe(3); 1694 1693 }); ··· 1699 1698 const { source: ops$, next: nextOp } = makeSubject<Operation>(); 1700 1699 const { source: res$, next: nextRes } = makeSubject<OperationResult>(); 1701 1700 1702 - const reexec = jest 1701 + const reexec = vi 1703 1702 .spyOn(client, 'reexecuteOperation') 1704 1703 .mockImplementation(nextOp); 1705 1704 ··· 1801 1800 const { source: ops$, next: nextOp } = makeSubject<Operation>(); 1802 1801 const { source: res$, next: nextRes } = makeSubject<OperationResult>(); 1803 1802 1804 - const reexec = jest 1803 + const reexec = vi 1805 1804 .spyOn(client, 'reexecuteOperation') 1806 1805 .mockImplementation(nextOp); 1807 1806 ··· 1906 1905 const { source: ops$, next: nextOp } = makeSubject<Operation>(); 1907 1906 const { source: res$, next: nextRes } = makeSubject<OperationResult>(); 1908 1907 1909 - jest.spyOn(client, 'reexecuteOperation').mockImplementation(nextOp); 1908 + vi.spyOn(client, 'reexecuteOperation').mockImplementation(nextOp); 1910 1909 1911 1910 const query = gql` 1912 1911 { ··· 2000 1999 const { source: ops$, next: nextOp } = makeSubject<Operation>(); 2001 2000 const { source: res$, next: nextRes } = makeSubject<OperationResult>(); 2002 2001 2003 - jest.spyOn(client, 'reexecuteOperation').mockImplementation(nextOp); 2002 + vi.spyOn(client, 'reexecuteOperation').mockImplementation(nextOp); 2004 2003 2005 2004 const query = gql` 2006 2005 { ··· 2082 2081 const { source: ops$, next: nextOp } = makeSubject<Operation>(); 2083 2082 const { source: res$, next: nextRes } = makeSubject<OperationResult>(); 2084 2083 2085 - jest.spyOn(client, 'reexecuteOperation').mockImplementation(nextOp); 2084 + vi.spyOn(client, 'reexecuteOperation').mockImplementation(nextOp); 2086 2085 2087 2086 const query = gql` 2088 2087 { ··· 2206 2205 const { source: ops$, next: nextOp } = makeSubject<Operation>(); 2207 2206 const { source: res$, next: nextRes } = makeSubject<OperationResult>(); 2208 2207 2209 - jest.spyOn(client, 'reexecuteOperation').mockImplementation(nextOp); 2208 + vi.spyOn(client, 'reexecuteOperation').mockImplementation(nextOp); 2210 2209 2211 2210 const normalQuery = gql` 2212 2211 { ··· 2293 2292 hasNext: true, 2294 2293 }); 2295 2294 2296 - expect(deferredData).toHaveProperty('deferred', undefined); 2295 + expect(deferredData).not.toHaveProperty('deferred'); 2297 2296 2298 2297 nextRes({ 2299 2298 operation: normalOp, ··· 2308 2307 }); 2309 2308 2310 2309 expect(normalData).toHaveProperty('node.id', 2); 2311 - expect(combinedData).toHaveProperty('deferred', undefined); 2310 + expect(combinedData).not.toHaveProperty('deferred'); 2312 2311 expect(combinedData).toHaveProperty('node.id', 2); 2313 2312 2314 2313 nextRes({
+3 -8
exchanges/graphcache/src/extras/relayPagination.test.ts
··· 1 1 import { gql } from '@urql/core'; 2 + import { it, expect } from 'vitest'; 2 3 import { query, write } from '../operations'; 3 4 import { Store } from '../store'; 4 5 import { relayPagination } from './relayPagination'; ··· 592 593 variables: { filter: 'three' }, 593 594 }); 594 595 595 - expect(resOne.data).toHaveProperty( 596 - ['items', 'edges', 0, 'node', 'id'], 597 - 'one' 598 - ); 596 + expect(resOne.data).toHaveProperty('items.edges[0].node.id', 'one'); 599 597 expect(resOne.data).toHaveProperty('items.edges.length', 1); 600 598 601 - expect(resTwo.data).toHaveProperty( 602 - ['items', 'edges', 0, 'node', 'id'], 603 - 'two' 604 - ); 599 + expect(resTwo.data).toHaveProperty('items.edges[0].node.id', 'two'); 605 600 expect(resTwo.data).toHaveProperty('items.edges.length', 1); 606 601 607 602 expect(resThree.data).toEqual(null);
+3 -2
exchanges/graphcache/src/extras/simplePagination.test.ts
··· 1 1 import { gql } from '@urql/core'; 2 + import { it, expect } from 'vitest'; 2 3 import { query, write } from '../operations'; 3 4 import { Store } from '../store'; 4 5 import { simplePagination } from './simplePagination'; ··· 425 426 variables: { filter: 'three', skip: 2, limit: 1 }, 426 427 }); 427 428 428 - expect(resOne.data).toHaveProperty(['persons', 0, 'id'], 'one'); 429 + expect(resOne.data).toHaveProperty('persons[0].id', 'one'); 429 430 expect(resOne.data).toHaveProperty('persons.length', 1); 430 431 431 - expect(resTwo.data).toHaveProperty(['persons', 0, 'id'], 'two'); 432 + expect(resTwo.data).toHaveProperty('persons[0].id', 'two'); 432 433 expect(resTwo.data).toHaveProperty('persons.length', 1); 433 434 434 435 expect(resThree.data).toEqual(null);
+22 -21
exchanges/graphcache/src/offlineExchange.test.ts
··· 6 6 OperationResult, 7 7 } from '@urql/core'; 8 8 import { print } from 'graphql'; 9 + import { vi, expect, it, describe } from 'vitest'; 9 10 10 11 import { pipe, map, makeSubject, tap, publish } from 'wonka'; 11 12 import { offlineExchange } from './offlineExchange'; ··· 49 50 ], 50 51 }; 51 52 52 - const dispatchDebug = jest.fn(); 53 + const dispatchDebug = vi.fn(); 53 54 54 55 const storage = { 55 - onOnline: jest.fn(), 56 - writeData: jest.fn(() => Promise.resolve(undefined)), 57 - writeMetadata: jest.fn(() => Promise.resolve(undefined)), 58 - readData: jest.fn(() => Promise.resolve(undefined)), 59 - readMetadata: jest.fn(() => Promise.resolve(undefined)), 56 + onOnline: vi.fn(), 57 + writeData: vi.fn(() => Promise.resolve(undefined)), 58 + writeMetadata: vi.fn(() => Promise.resolve(undefined)), 59 + readData: vi.fn(() => Promise.resolve(undefined)), 60 + readMetadata: vi.fn(() => Promise.resolve(undefined)), 60 61 }; 61 62 62 63 describe('storage', () => { 63 64 it('should read the metadata and dispatch operations on initialization', () => { 64 65 const client = createClient({ url: 'http://0.0.0.0' }); 65 - const reexecuteOperation = jest 66 + const reexecuteOperation = vi 66 67 .spyOn(client, 'reexecuteOperation') 67 68 .mockImplementation(() => undefined); 68 69 const op = client.createRequestOperation('mutation', { ··· 71 72 variables: {}, 72 73 }); 73 74 74 - const response = jest.fn( 75 + const response = vi.fn( 75 76 (forwardOp: Operation): OperationResult => { 76 77 expect(forwardOp.key).toBe(op.key); 77 78 return { operation: forwardOp, data: mutationOneData }; ··· 79 80 ); 80 81 81 82 const { source: ops$ } = makeSubject<Operation>(); 82 - const result = jest.fn(); 83 + const result = vi.fn(); 83 84 const forward: ExchangeIO = ops$ => pipe(ops$, map(response)); 84 85 85 - jest.useFakeTimers(); 86 + vi.useFakeTimers(); 86 87 pipe( 87 88 offlineExchange({ storage })({ forward, client, dispatchDebug })(ops$), 88 89 tap(result), 89 90 publish 90 91 ); 91 - jest.runAllTimers(); 92 + vi.runAllTimers(); 92 93 93 94 expect(storage.readMetadata).toBeCalledTimes(1); 94 95 expect(reexecuteOperation).toBeCalledTimes(0); ··· 97 98 98 99 describe('offline', () => { 99 100 it('should intercept errored mutations', () => { 100 - const onlineSpy = jest.spyOn(navigator, 'onLine', 'get'); 101 + const onlineSpy = vi.spyOn(navigator, 'onLine', 'get'); 101 102 102 103 const client = createClient({ url: 'http://0.0.0.0' }); 103 104 const queryOp = client.createRequestOperation('query', { ··· 112 113 variables: {}, 113 114 }); 114 115 115 - const response = jest.fn( 116 + const response = vi.fn( 116 117 (forwardOp: Operation): OperationResult => { 117 118 if (forwardOp.key === queryOp.key) { 118 119 onlineSpy.mockReturnValueOnce(true); ··· 129 130 ); 130 131 131 132 const { source: ops$, next } = makeSubject<Operation>(); 132 - const result = jest.fn(); 133 + const result = vi.fn(); 133 134 const forward: ExchangeIO = ops$ => pipe(ops$, map(response)); 134 135 135 136 pipe( ··· 176 177 177 178 it('should intercept errored queries', async () => { 178 179 const client = createClient({ url: 'http://0.0.0.0' }); 179 - const onlineSpy = jest 180 + const onlineSpy = vi 180 181 .spyOn(navigator, 'onLine', 'get') 181 182 .mockReturnValueOnce(false); 182 183 ··· 185 186 query: queryOne, 186 187 }); 187 188 188 - const response = jest.fn( 189 + const response = vi.fn( 189 190 (forwardOp: Operation): OperationResult => { 190 191 onlineSpy.mockReturnValueOnce(false); 191 192 return { ··· 197 198 ); 198 199 199 200 const { source: ops$, next } = makeSubject<Operation>(); 200 - const result = jest.fn(); 201 + const result = vi.fn(); 201 202 const forward: ExchangeIO = ops$ => pipe(ops$, map(response)); 202 203 203 204 pipe( ··· 230 231 flush = cb; 231 232 }); 232 233 233 - const onlineSpy = jest.spyOn(navigator, 'onLine', 'get'); 234 + const onlineSpy = vi.spyOn(navigator, 'onLine', 'get'); 234 235 235 236 const client = createClient({ url: 'http://0.0.0.0' }); 236 - const reexecuteOperation = jest 237 + const reexecuteOperation = vi 237 238 .spyOn(client, 'reexecuteOperation') 238 239 .mockImplementation(() => undefined); 239 240 ··· 243 244 variables: {}, 244 245 }); 245 246 246 - const response = jest.fn( 247 + const response = vi.fn( 247 248 (forwardOp: Operation): OperationResult => { 248 249 onlineSpy.mockReturnValueOnce(false); 249 250 return { ··· 255 256 ); 256 257 257 258 const { source: ops$, next } = makeSubject<Operation>(); 258 - const result = jest.fn(); 259 + const result = vi.fn(); 259 260 const forward: ExchangeIO = ops$ => pipe(ops$, map(response)); 260 261 261 262 pipe(
+1
exchanges/graphcache/src/operations/query.test.ts
··· 2 2 3 3 import { gql } from '@urql/core'; 4 4 import { minifyIntrospectionQuery } from '@urql/introspection'; 5 + import { describe, it, beforeEach, beforeAll, expect } from 'vitest'; 5 6 6 7 import { Store } from '../store'; 7 8 import { write } from './write';
+2 -1
exchanges/graphcache/src/operations/write.test.ts
··· 2 2 3 3 import { gql, CombinedError } from '@urql/core'; 4 4 import { minifyIntrospectionQuery } from '@urql/introspection'; 5 + import { vi, expect, it, beforeEach, describe, beforeAll } from 'vitest'; 5 6 6 7 import { write } from './write'; 7 8 import * as InMemoryData from '../store/data'; ··· 47 48 } 48 49 ); 49 50 50 - jest.clearAllMocks(); 51 + vi.clearAllMocks(); 51 52 }); 52 53 53 54 it('should not crash for valid writes', async () => {
+5 -5
exchanges/graphcache/src/store/__snapshots__/store.test.ts.snap
··· 1 - // Jest Snapshot v1, https://goo.gl/fbAQLP 1 + // Vitest Snapshot v1 2 2 3 - exports[`Store with storage should be able to persist embedded data 1`] = ` 4 - Object { 3 + exports[`Store with storage > should be able to persist embedded data 1`] = ` 4 + { 5 5 "Query%2eappointment({\\"id\\":\\"1\\"}).__typename": "\\"Appointment\\"", 6 6 "Query%2eappointment({\\"id\\":\\"1\\"}).info": "\\"urql meeting\\"", 7 7 "Query.appointment({\\"id\\":\\"1\\"})": ":\\"Query.appointment({\\\\\\"id\\\\\\":\\\\\\"1\\\\\\"})\\"", 8 8 } 9 9 `; 10 10 11 - exports[`Store with storage should be able to store and rehydrate data 1`] = ` 12 - Object { 11 + exports[`Store with storage > should be able to store and rehydrate data 1`] = ` 12 + { 13 13 "Appointment:1.__typename": "\\"Appointment\\"", 14 14 "Appointment:1.id": "\\"1\\"", 15 15 "Appointment:1.info": "\\"urql meeting\\"",
+11 -12
exchanges/graphcache/src/store/data.test.ts
··· 1 + import { describe, it, beforeEach, expect } from 'vitest'; 1 2 import * as InMemoryData from './data'; 2 3 import { keyOfField } from './keys'; 3 4 ··· 121 122 InMemoryData.writeLink('Query', 'randomTodo', 'Todo:1'); 122 123 123 124 expect(InMemoryData.inspectFields('Query')).toMatchInlineSnapshot(` 124 - Array [ 125 - Object { 126 - "arguments": Object { 125 + [ 126 + { 127 + "arguments": { 127 128 "id": "1", 128 129 }, 129 130 "fieldKey": "todo({\\"id\\":\\"1\\"})", 130 131 "fieldName": "todo", 131 132 }, 132 - Object { 133 + { 133 134 "arguments": null, 134 135 "fieldKey": "randomTodo", 135 136 "fieldName": "randomTodo", 136 137 }, 137 - Object { 138 + { 138 139 "arguments": null, 139 140 "fieldKey": "__typename", 140 141 "fieldName": "__typename", 141 142 }, 142 - Object { 143 - "arguments": Object { 143 + { 144 + "arguments": { 144 145 "id": "1", 145 146 }, 146 147 "fieldKey": "hasTodo({\\"id\\":\\"1\\"})", ··· 168 169 InMemoryData.initDataState('write', data, 1, true); 169 170 InMemoryData.writeLink('Query', 'todo', 'Todo:1'); 170 171 171 - expect(InMemoryData.inspectFields('Random')).toMatchInlineSnapshot( 172 - `Array []` 173 - ); 172 + expect(InMemoryData.inspectFields('Random')).toMatchInlineSnapshot('[]'); 174 173 }); 175 174 176 175 it('avoids duplicate field infos', () => { ··· 180 179 InMemoryData.writeLink('Query', 'todo', 'Todo:2'); 181 180 182 181 expect(InMemoryData.inspectFields('Query')).toMatchInlineSnapshot(` 183 - Array [ 184 - Object { 182 + [ 183 + { 185 184 "arguments": null, 186 185 "fieldKey": "todo", 187 186 "fieldName": "todo",
+8 -7
exchanges/graphcache/src/store/store.test.ts
··· 1 1 /* eslint-disable @typescript-eslint/no-var-requires */ 2 2 import { minifyIntrospectionQuery } from '@urql/introspection'; 3 3 import { formatDocument, gql, maskTypename } from '@urql/core'; 4 + import { vi, expect, it, beforeEach, describe } from 'vitest'; 4 5 5 6 import { 6 7 executeSync, ··· 851 852 852 853 it('should be able to store and rehydrate data', () => { 853 854 const storage: StorageAdapter = { 854 - readData: jest.fn(), 855 - writeData: jest.fn(), 855 + readData: vi.fn(), 856 + writeData: vi.fn(), 856 857 }; 857 858 858 859 store.data.storage = storage; ··· 906 907 } as any; 907 908 908 909 const storage: StorageAdapter = { 909 - readData: jest.fn(), 910 - writeData: jest.fn(), 910 + readData: vi.fn(), 911 + writeData: vi.fn(), 911 912 }; 912 913 913 914 store.data.storage = storage; ··· 943 944 944 945 it('persists commutative layers and ignores optimistic layers', () => { 945 946 const storage: StorageAdapter = { 946 - readData: jest.fn(), 947 - writeData: jest.fn(), 947 + readData: vi.fn(), 948 + writeData: vi.fn(), 948 949 }; 949 950 950 951 store.data.storage = storage; ··· 1005 1006 }); 1006 1007 1007 1008 it('should use different rootConfigs', function () { 1008 - const fakeUpdater = jest.fn(); 1009 + const fakeUpdater = vi.fn(); 1009 1010 1010 1011 const store = new Store({ 1011 1012 schema: {
+1
exchanges/graphcache/src/test-utils/examples-1.test.ts
··· 1 1 import { gql } from '@urql/core'; 2 + import { it, expect, afterEach } from 'vitest'; 2 3 import { query, write, writeOptimistic } from '../operations'; 3 4 import * as InMemoryData from '../store/data'; 4 5 import { Store } from '../store';
+1
exchanges/graphcache/src/test-utils/examples-2.test.ts
··· 1 1 import { gql } from '@urql/core'; 2 + import { it, afterEach, expect } from 'vitest'; 2 3 import { query, write } from '../operations'; 3 4 import { Store } from '../store'; 4 5
+1
exchanges/graphcache/src/test-utils/examples-3.test.ts
··· 1 1 import { gql } from '@urql/core'; 2 + import { it, afterEach, expect } from 'vitest'; 2 3 import { query, write } from '../operations'; 3 4 import { Store } from '../store'; 4 5
+1
exchanges/graphcache/src/test-utils/suite.test.ts
··· 1 1 import { DocumentNode } from 'graphql'; 2 2 import { gql } from '@urql/core'; 3 + import { it, expect } from 'vitest'; 3 4 import { query, write } from '../operations'; 4 5 import { Store } from '../store'; 5 6
+1 -4
exchanges/multipart-fetch/package.json
··· 37 37 "extras/" 38 38 ], 39 39 "scripts": { 40 - "test": "jest", 40 + "test": "vitest --config ../../vitest.config.ts", 41 41 "clean": "rimraf dist extras", 42 42 "check": "tsc --noEmit", 43 43 "lint": "eslint --ext=js,jsx,ts,tsx .", 44 44 "build": "rollup -c ../../scripts/rollup/config.mjs", 45 45 "prepare": "node ../../scripts/prepare/index.js", 46 46 "prepublishOnly": "run-s clean build" 47 - }, 48 - "jest": { 49 - "preset": "../../scripts/jest/preset" 50 47 }, 51 48 "dependencies": { 52 49 "@urql/core": ">=3.0.0",
+245 -245
exchanges/multipart-fetch/src/__snapshots__/multipartFetchExchange.test.ts.snap
··· 1 - // Jest Snapshot v1, https://goo.gl/fbAQLP 1 + // Vitest Snapshot v1 2 2 3 - exports[`on error returns error data 1`] = ` 4 - Object { 3 + exports[`on error > returns error data 1`] = ` 4 + { 5 5 "data": undefined, 6 6 "error": [CombinedError: [Network] No Content], 7 7 "extensions": undefined, 8 - "operation": Object { 9 - "context": Object { 10 - "fetchOptions": Object { 8 + "operation": { 9 + "context": { 10 + "fetchOptions": { 11 11 "method": "POST", 12 12 }, 13 13 "requestPolicy": "cache-first", ··· 15 15 }, 16 16 "key": 2, 17 17 "kind": "query", 18 - "query": Object { 18 + "query": { 19 19 "__key": 3521976120, 20 - "definitions": Array [ 21 - Object { 22 - "directives": Array [], 20 + "definitions": [ 21 + { 22 + "directives": [], 23 23 "kind": "OperationDefinition", 24 - "name": Object { 24 + "name": { 25 25 "kind": "Name", 26 26 "value": "getUser", 27 27 }, 28 28 "operation": "query", 29 - "selectionSet": Object { 29 + "selectionSet": { 30 30 "kind": "SelectionSet", 31 - "selections": Array [ 32 - Object { 31 + "selections": [ 32 + { 33 33 "alias": undefined, 34 - "arguments": Array [ 35 - Object { 34 + "arguments": [ 35 + { 36 36 "kind": "Argument", 37 - "name": Object { 37 + "name": { 38 38 "kind": "Name", 39 39 "value": "name", 40 40 }, 41 - "value": Object { 41 + "value": { 42 42 "kind": "Variable", 43 - "name": Object { 43 + "name": { 44 44 "kind": "Name", 45 45 "value": "name", 46 46 }, 47 47 }, 48 48 }, 49 49 ], 50 - "directives": Array [], 50 + "directives": [], 51 51 "kind": "Field", 52 - "name": Object { 52 + "name": { 53 53 "kind": "Name", 54 54 "value": "user", 55 55 }, 56 - "selectionSet": Object { 56 + "selectionSet": { 57 57 "kind": "SelectionSet", 58 - "selections": Array [ 59 - Object { 58 + "selections": [ 59 + { 60 60 "alias": undefined, 61 - "arguments": Array [], 62 - "directives": Array [], 61 + "arguments": [], 62 + "directives": [], 63 63 "kind": "Field", 64 - "name": Object { 64 + "name": { 65 65 "kind": "Name", 66 66 "value": "id", 67 67 }, 68 68 "selectionSet": undefined, 69 69 }, 70 - Object { 70 + { 71 71 "alias": undefined, 72 - "arguments": Array [], 73 - "directives": Array [], 72 + "arguments": [], 73 + "directives": [], 74 74 "kind": "Field", 75 - "name": Object { 75 + "name": { 76 76 "kind": "Name", 77 77 "value": "firstName", 78 78 }, 79 79 "selectionSet": undefined, 80 80 }, 81 - Object { 81 + { 82 82 "alias": undefined, 83 - "arguments": Array [], 84 - "directives": Array [], 83 + "arguments": [], 84 + "directives": [], 85 85 "kind": "Field", 86 - "name": Object { 86 + "name": { 87 87 "kind": "Name", 88 88 "value": "lastName", 89 89 }, ··· 94 94 }, 95 95 ], 96 96 }, 97 - "variableDefinitions": Array [ 98 - Object { 97 + "variableDefinitions": [ 98 + { 99 99 "defaultValue": undefined, 100 - "directives": Array [], 100 + "directives": [], 101 101 "kind": "VariableDefinition", 102 - "type": Object { 102 + "type": { 103 103 "kind": "NamedType", 104 - "name": Object { 104 + "name": { 105 105 "kind": "Name", 106 106 "value": "String", 107 107 }, 108 108 }, 109 - "variable": Object { 109 + "variable": { 110 110 "kind": "Variable", 111 - "name": Object { 111 + "name": { 112 112 "kind": "Name", 113 113 "value": "name", 114 114 }, ··· 118 118 }, 119 119 ], 120 120 "kind": "Document", 121 - "loc": Object { 121 + "loc": { 122 122 "end": 86, 123 - "source": Object { 123 + "source": { 124 124 "body": "# getUser 125 125 query getUser($name: String) { user(name: $name) { id firstName lastName } }", 126 - "locationOffset": Object { 126 + "locationOffset": { 127 127 "column": 1, 128 128 "line": 1, 129 129 }, ··· 132 132 "start": 0, 133 133 }, 134 134 }, 135 - "variables": Object { 135 + "variables": { 136 136 "name": "Clara", 137 137 }, 138 138 }, 139 139 } 140 140 `; 141 141 142 - exports[`on error returns error data with status 400 and manual redirect mode 1`] = ` 143 - Object { 142 + exports[`on error > returns error data with status 400 and manual redirect mode 1`] = ` 143 + { 144 144 "data": undefined, 145 145 "error": [CombinedError: [Network] No Content], 146 146 "extensions": undefined, 147 - "operation": Object { 148 - "context": Object { 149 - "fetchOptions": [MockFunction] { 150 - "calls": Array [ 151 - Array [], 147 + "operation": { 148 + "context": { 149 + "fetchOptions": [MockFunction spy] { 150 + "calls": [ 151 + [], 152 152 ], 153 - "results": Array [ 154 - Object { 153 + "results": [ 154 + { 155 155 "type": "return", 156 - "value": Object { 156 + "value": { 157 157 "redirect": "manual", 158 158 }, 159 159 }, ··· 164 164 }, 165 165 "key": 2, 166 166 "kind": "query", 167 - "query": Object { 167 + "query": { 168 168 "__key": 3521976120, 169 - "definitions": Array [ 170 - Object { 171 - "directives": Array [], 169 + "definitions": [ 170 + { 171 + "directives": [], 172 172 "kind": "OperationDefinition", 173 - "name": Object { 173 + "name": { 174 174 "kind": "Name", 175 175 "value": "getUser", 176 176 }, 177 177 "operation": "query", 178 - "selectionSet": Object { 178 + "selectionSet": { 179 179 "kind": "SelectionSet", 180 - "selections": Array [ 181 - Object { 180 + "selections": [ 181 + { 182 182 "alias": undefined, 183 - "arguments": Array [ 184 - Object { 183 + "arguments": [ 184 + { 185 185 "kind": "Argument", 186 - "name": Object { 186 + "name": { 187 187 "kind": "Name", 188 188 "value": "name", 189 189 }, 190 - "value": Object { 190 + "value": { 191 191 "kind": "Variable", 192 - "name": Object { 192 + "name": { 193 193 "kind": "Name", 194 194 "value": "name", 195 195 }, 196 196 }, 197 197 }, 198 198 ], 199 - "directives": Array [], 199 + "directives": [], 200 200 "kind": "Field", 201 - "name": Object { 201 + "name": { 202 202 "kind": "Name", 203 203 "value": "user", 204 204 }, 205 - "selectionSet": Object { 205 + "selectionSet": { 206 206 "kind": "SelectionSet", 207 - "selections": Array [ 208 - Object { 207 + "selections": [ 208 + { 209 209 "alias": undefined, 210 - "arguments": Array [], 211 - "directives": Array [], 210 + "arguments": [], 211 + "directives": [], 212 212 "kind": "Field", 213 - "name": Object { 213 + "name": { 214 214 "kind": "Name", 215 215 "value": "id", 216 216 }, 217 217 "selectionSet": undefined, 218 218 }, 219 - Object { 219 + { 220 220 "alias": undefined, 221 - "arguments": Array [], 222 - "directives": Array [], 221 + "arguments": [], 222 + "directives": [], 223 223 "kind": "Field", 224 - "name": Object { 224 + "name": { 225 225 "kind": "Name", 226 226 "value": "firstName", 227 227 }, 228 228 "selectionSet": undefined, 229 229 }, 230 - Object { 230 + { 231 231 "alias": undefined, 232 - "arguments": Array [], 233 - "directives": Array [], 232 + "arguments": [], 233 + "directives": [], 234 234 "kind": "Field", 235 - "name": Object { 235 + "name": { 236 236 "kind": "Name", 237 237 "value": "lastName", 238 238 }, ··· 243 243 }, 244 244 ], 245 245 }, 246 - "variableDefinitions": Array [ 247 - Object { 246 + "variableDefinitions": [ 247 + { 248 248 "defaultValue": undefined, 249 - "directives": Array [], 249 + "directives": [], 250 250 "kind": "VariableDefinition", 251 - "type": Object { 251 + "type": { 252 252 "kind": "NamedType", 253 - "name": Object { 253 + "name": { 254 254 "kind": "Name", 255 255 "value": "String", 256 256 }, 257 257 }, 258 - "variable": Object { 258 + "variable": { 259 259 "kind": "Variable", 260 - "name": Object { 260 + "name": { 261 261 "kind": "Name", 262 262 "value": "name", 263 263 }, ··· 267 267 }, 268 268 ], 269 269 "kind": "Document", 270 - "loc": Object { 270 + "loc": { 271 271 "end": 86, 272 - "source": Object { 272 + "source": { 273 273 "body": "# getUser 274 274 query getUser($name: String) { user(name: $name) { id firstName lastName } }", 275 - "locationOffset": Object { 275 + "locationOffset": { 276 276 "column": 1, 277 277 "line": 1, 278 278 }, ··· 281 281 "start": 0, 282 282 }, 283 283 }, 284 - "variables": Object { 284 + "variables": { 285 285 "name": "Clara", 286 286 }, 287 287 }, 288 288 } 289 289 `; 290 290 291 - exports[`on success returns response data 1`] = ` 292 - Object { 293 - "data": Object { 294 - "data": Object { 291 + exports[`on success > returns response data 1`] = ` 292 + { 293 + "data": { 294 + "data": { 295 295 "user": 1200, 296 296 }, 297 297 }, 298 298 "error": undefined, 299 299 "extensions": undefined, 300 300 "hasNext": false, 301 - "operation": Object { 302 - "context": Object { 303 - "fetchOptions": [MockFunction] { 304 - "calls": Array [ 305 - Array [], 301 + "operation": { 302 + "context": { 303 + "fetchOptions": [MockFunction spy] { 304 + "calls": [ 305 + [], 306 306 ], 307 - "results": Array [ 308 - Object { 307 + "results": [ 308 + { 309 309 "type": "return", 310 - "value": Object {}, 310 + "value": {}, 311 311 }, 312 312 ], 313 313 }, ··· 316 316 }, 317 317 "key": 2, 318 318 "kind": "query", 319 - "query": Object { 319 + "query": { 320 320 "__key": 3521976120, 321 - "definitions": Array [ 322 - Object { 323 - "directives": Array [], 321 + "definitions": [ 322 + { 323 + "directives": [], 324 324 "kind": "OperationDefinition", 325 - "name": Object { 325 + "name": { 326 326 "kind": "Name", 327 327 "value": "getUser", 328 328 }, 329 329 "operation": "query", 330 - "selectionSet": Object { 330 + "selectionSet": { 331 331 "kind": "SelectionSet", 332 - "selections": Array [ 333 - Object { 332 + "selections": [ 333 + { 334 334 "alias": undefined, 335 - "arguments": Array [ 336 - Object { 335 + "arguments": [ 336 + { 337 337 "kind": "Argument", 338 - "name": Object { 338 + "name": { 339 339 "kind": "Name", 340 340 "value": "name", 341 341 }, 342 - "value": Object { 342 + "value": { 343 343 "kind": "Variable", 344 - "name": Object { 344 + "name": { 345 345 "kind": "Name", 346 346 "value": "name", 347 347 }, 348 348 }, 349 349 }, 350 350 ], 351 - "directives": Array [], 351 + "directives": [], 352 352 "kind": "Field", 353 - "name": Object { 353 + "name": { 354 354 "kind": "Name", 355 355 "value": "user", 356 356 }, 357 - "selectionSet": Object { 357 + "selectionSet": { 358 358 "kind": "SelectionSet", 359 - "selections": Array [ 360 - Object { 359 + "selections": [ 360 + { 361 361 "alias": undefined, 362 - "arguments": Array [], 363 - "directives": Array [], 362 + "arguments": [], 363 + "directives": [], 364 364 "kind": "Field", 365 - "name": Object { 365 + "name": { 366 366 "kind": "Name", 367 367 "value": "id", 368 368 }, 369 369 "selectionSet": undefined, 370 370 }, 371 - Object { 371 + { 372 372 "alias": undefined, 373 - "arguments": Array [], 374 - "directives": Array [], 373 + "arguments": [], 374 + "directives": [], 375 375 "kind": "Field", 376 - "name": Object { 376 + "name": { 377 377 "kind": "Name", 378 378 "value": "firstName", 379 379 }, 380 380 "selectionSet": undefined, 381 381 }, 382 - Object { 382 + { 383 383 "alias": undefined, 384 - "arguments": Array [], 385 - "directives": Array [], 384 + "arguments": [], 385 + "directives": [], 386 386 "kind": "Field", 387 - "name": Object { 387 + "name": { 388 388 "kind": "Name", 389 389 "value": "lastName", 390 390 }, ··· 395 395 }, 396 396 ], 397 397 }, 398 - "variableDefinitions": Array [ 399 - Object { 398 + "variableDefinitions": [ 399 + { 400 400 "defaultValue": undefined, 401 - "directives": Array [], 401 + "directives": [], 402 402 "kind": "VariableDefinition", 403 - "type": Object { 403 + "type": { 404 404 "kind": "NamedType", 405 - "name": Object { 405 + "name": { 406 406 "kind": "Name", 407 407 "value": "String", 408 408 }, 409 409 }, 410 - "variable": Object { 410 + "variable": { 411 411 "kind": "Variable", 412 - "name": Object { 412 + "name": { 413 413 "kind": "Name", 414 414 "value": "name", 415 415 }, ··· 419 419 }, 420 420 ], 421 421 "kind": "Document", 422 - "loc": Object { 422 + "loc": { 423 423 "end": 86, 424 - "source": Object { 424 + "source": { 425 425 "body": "# getUser 426 426 query getUser($name: String) { user(name: $name) { id firstName lastName } }", 427 - "locationOffset": Object { 427 + "locationOffset": { 428 428 "column": 1, 429 429 "line": 1, 430 430 }, ··· 433 433 "start": 0, 434 434 }, 435 435 }, 436 - "variables": Object { 436 + "variables": { 437 437 "name": "Clara", 438 438 }, 439 439 }, 440 440 } 441 441 `; 442 442 443 - exports[`on success returns response data 2`] = `"{\\"query\\":\\"query getUser($name: String) {\\\\n user(name: $name) {\\\\n id\\\\n firstName\\\\n lastName\\\\n }\\\\n}\\",\\"operationName\\":\\"getUser\\",\\"variables\\":{\\"name\\":\\"Clara\\"}}"`; 443 + exports[`on success > returns response data 2`] = `"{\\"query\\":\\"query getUser($name: String) {\\\\n user(name: $name) {\\\\n id\\\\n firstName\\\\n lastName\\\\n }\\\\n}\\",\\"operationName\\":\\"getUser\\",\\"variables\\":{\\"name\\":\\"Clara\\"}}"`; 444 444 445 - exports[`on success uses a file when given 1`] = ` 446 - Object { 447 - "data": Object { 448 - "data": Object { 445 + exports[`on success > uses a file when given 1`] = ` 446 + { 447 + "data": { 448 + "data": { 449 449 "user": 1200, 450 450 }, 451 451 }, 452 452 "error": undefined, 453 453 "extensions": undefined, 454 454 "hasNext": false, 455 - "operation": Object { 456 - "context": Object { 457 - "fetchOptions": [MockFunction] { 458 - "calls": Array [ 459 - Array [], 455 + "operation": { 456 + "context": { 457 + "fetchOptions": [MockFunction spy] { 458 + "calls": [ 459 + [], 460 460 ], 461 - "results": Array [ 462 - Object { 461 + "results": [ 462 + { 463 463 "type": "return", 464 - "value": Object {}, 464 + "value": {}, 465 465 }, 466 466 ], 467 467 }, ··· 470 470 }, 471 471 "key": 3, 472 472 "kind": "mutation", 473 - "query": Object { 473 + "query": { 474 474 "__key": 4034972436, 475 - "definitions": Array [ 476 - Object { 477 - "directives": Array [], 475 + "definitions": [ 476 + { 477 + "directives": [], 478 478 "kind": "OperationDefinition", 479 - "name": Object { 479 + "name": { 480 480 "kind": "Name", 481 481 "value": "uploadProfilePicture", 482 482 }, 483 483 "operation": "mutation", 484 - "selectionSet": Object { 484 + "selectionSet": { 485 485 "kind": "SelectionSet", 486 - "selections": Array [ 487 - Object { 486 + "selections": [ 487 + { 488 488 "alias": undefined, 489 - "arguments": Array [ 490 - Object { 489 + "arguments": [ 490 + { 491 491 "kind": "Argument", 492 - "name": Object { 492 + "name": { 493 493 "kind": "Name", 494 494 "value": "picture", 495 495 }, 496 - "value": Object { 496 + "value": { 497 497 "kind": "Variable", 498 - "name": Object { 498 + "name": { 499 499 "kind": "Name", 500 500 "value": "picture", 501 501 }, 502 502 }, 503 503 }, 504 504 ], 505 - "directives": Array [], 505 + "directives": [], 506 506 "kind": "Field", 507 - "name": Object { 507 + "name": { 508 508 "kind": "Name", 509 509 "value": "uploadProfilePicture", 510 510 }, 511 - "selectionSet": Object { 511 + "selectionSet": { 512 512 "kind": "SelectionSet", 513 - "selections": Array [ 514 - Object { 513 + "selections": [ 514 + { 515 515 "alias": undefined, 516 - "arguments": Array [], 517 - "directives": Array [], 516 + "arguments": [], 517 + "directives": [], 518 518 "kind": "Field", 519 - "name": Object { 519 + "name": { 520 520 "kind": "Name", 521 521 "value": "location", 522 522 }, ··· 527 527 }, 528 528 ], 529 529 }, 530 - "variableDefinitions": Array [ 531 - Object { 530 + "variableDefinitions": [ 531 + { 532 532 "defaultValue": undefined, 533 - "directives": Array [], 533 + "directives": [], 534 534 "kind": "VariableDefinition", 535 - "type": Object { 535 + "type": { 536 536 "kind": "NamedType", 537 - "name": Object { 537 + "name": { 538 538 "kind": "Name", 539 539 "value": "File", 540 540 }, 541 541 }, 542 - "variable": Object { 542 + "variable": { 543 543 "kind": "Variable", 544 - "name": Object { 544 + "name": { 545 545 "kind": "Name", 546 546 "value": "picture", 547 547 }, ··· 551 551 }, 552 552 ], 553 553 "kind": "Document", 554 - "loc": Object { 554 + "loc": { 555 555 "end": 125, 556 - "source": Object { 556 + "source": { 557 557 "body": "# uploadProfilePicture 558 558 mutation uploadProfilePicture($picture: File) { uploadProfilePicture(picture: $picture) { location } }", 559 - "locationOffset": Object { 559 + "locationOffset": { 560 560 "column": 1, 561 561 "line": 1, 562 562 }, ··· 565 565 "start": 0, 566 566 }, 567 567 }, 568 - "variables": Object { 568 + "variables": { 569 569 "picture": File {}, 570 570 }, 571 571 }, 572 572 } 573 573 `; 574 574 575 - exports[`on success uses a file when given 2`] = ` 576 - Object { 575 + exports[`on success > uses a file when given 2`] = ` 576 + { 577 577 "accept": "application/graphql+json, application/json", 578 578 } 579 579 `; 580 580 581 - exports[`on success uses a file when given 3`] = `FormData {}`; 581 + exports[`on success > uses a file when given 3`] = `FormData {}`; 582 582 583 - exports[`on success uses multiple files when given 1`] = ` 584 - Object { 585 - "data": Object { 586 - "data": Object { 583 + exports[`on success > uses multiple files when given 1`] = ` 584 + { 585 + "data": { 586 + "data": { 587 587 "user": 1200, 588 588 }, 589 589 }, 590 590 "error": undefined, 591 591 "extensions": undefined, 592 592 "hasNext": false, 593 - "operation": Object { 594 - "context": Object { 595 - "fetchOptions": [MockFunction] { 596 - "calls": Array [ 597 - Array [], 593 + "operation": { 594 + "context": { 595 + "fetchOptions": [MockFunction spy] { 596 + "calls": [ 597 + [], 598 598 ], 599 - "results": Array [ 600 - Object { 599 + "results": [ 600 + { 601 601 "type": "return", 602 - "value": Object {}, 602 + "value": {}, 603 603 }, 604 604 ], 605 605 }, ··· 608 608 }, 609 609 "key": 3, 610 610 "kind": "mutation", 611 - "query": Object { 611 + "query": { 612 612 "__key": 2033658603, 613 - "definitions": Array [ 614 - Object { 615 - "directives": Array [], 613 + "definitions": [ 614 + { 615 + "directives": [], 616 616 "kind": "OperationDefinition", 617 - "name": Object { 617 + "name": { 618 618 "kind": "Name", 619 619 "value": "uploadProfilePictures", 620 620 }, 621 621 "operation": "mutation", 622 - "selectionSet": Object { 622 + "selectionSet": { 623 623 "kind": "SelectionSet", 624 - "selections": Array [ 625 - Object { 624 + "selections": [ 625 + { 626 626 "alias": undefined, 627 - "arguments": Array [ 628 - Object { 627 + "arguments": [ 628 + { 629 629 "kind": "Argument", 630 - "name": Object { 630 + "name": { 631 631 "kind": "Name", 632 632 "value": "pictures", 633 633 }, 634 - "value": Object { 634 + "value": { 635 635 "kind": "Variable", 636 - "name": Object { 636 + "name": { 637 637 "kind": "Name", 638 638 "value": "pictures", 639 639 }, 640 640 }, 641 641 }, 642 642 ], 643 - "directives": Array [], 643 + "directives": [], 644 644 "kind": "Field", 645 - "name": Object { 645 + "name": { 646 646 "kind": "Name", 647 647 "value": "uploadProfilePicture", 648 648 }, 649 - "selectionSet": Object { 649 + "selectionSet": { 650 650 "kind": "SelectionSet", 651 - "selections": Array [ 652 - Object { 651 + "selections": [ 652 + { 653 653 "alias": undefined, 654 - "arguments": Array [], 655 - "directives": Array [], 654 + "arguments": [], 655 + "directives": [], 656 656 "kind": "Field", 657 - "name": Object { 657 + "name": { 658 658 "kind": "Name", 659 659 "value": "location", 660 660 }, ··· 665 665 }, 666 666 ], 667 667 }, 668 - "variableDefinitions": Array [ 669 - Object { 668 + "variableDefinitions": [ 669 + { 670 670 "defaultValue": undefined, 671 - "directives": Array [], 671 + "directives": [], 672 672 "kind": "VariableDefinition", 673 - "type": Object { 673 + "type": { 674 674 "kind": "ListType", 675 - "type": Object { 675 + "type": { 676 676 "kind": "NamedType", 677 - "name": Object { 677 + "name": { 678 678 "kind": "Name", 679 679 "value": "File", 680 680 }, 681 681 }, 682 682 }, 683 - "variable": Object { 683 + "variable": { 684 684 "kind": "Variable", 685 - "name": Object { 685 + "name": { 686 686 "kind": "Name", 687 687 "value": "pictures", 688 688 }, ··· 692 692 }, 693 693 ], 694 694 "kind": "Document", 695 - "loc": Object { 695 + "loc": { 696 696 "end": 132, 697 - "source": Object { 697 + "source": { 698 698 "body": "# uploadProfilePictures 699 699 mutation uploadProfilePictures($pictures: [File]) { uploadProfilePicture(pictures: $pictures) { location } }", 700 - "locationOffset": Object { 700 + "locationOffset": { 701 701 "column": 1, 702 702 "line": 1, 703 703 }, ··· 706 706 "start": 0, 707 707 }, 708 708 }, 709 - "variables": Object { 710 - "picture": Array [ 709 + "variables": { 710 + "picture": [ 711 711 File {}, 712 712 File {}, 713 713 ], ··· 716 716 } 717 717 `; 718 718 719 - exports[`on success uses multiple files when given 2`] = ` 720 - Object { 719 + exports[`on success > uses multiple files when given 2`] = ` 720 + { 721 721 "accept": "application/graphql+json, application/json", 722 722 } 723 723 `; 724 724 725 - exports[`on success uses multiple files when given 3`] = `FormData {}`; 725 + exports[`on success > uses multiple files when given 3`] = `FormData {}`;
+25 -10
exchanges/multipart-fetch/src/multipartFetchExchange.test.ts
··· 1 1 import { Client, OperationResult, makeOperation } from '@urql/core'; 2 2 import { empty, fromValue, pipe, Source, subscribe, toPromise } from 'wonka'; 3 + import { 4 + vi, 5 + expect, 6 + it, 7 + beforeEach, 8 + describe, 9 + beforeAll, 10 + Mock, 11 + afterEach, 12 + afterAll, 13 + } from 'vitest'; 3 14 4 15 import { multipartFetchExchange } from './multipartFetchExchange'; 5 16 ··· 9 20 multipleUploadOperation, 10 21 } from './test-utils'; 11 22 12 - const fetch = (global as any).fetch as jest.Mock; 13 - const abort = jest.fn(); 23 + const fetch = (global as any).fetch as Mock; 24 + const abort = vi.fn(); 14 25 15 26 const abortError = new Error(); 16 27 abortError.name = 'AbortError'; ··· 43 54 const exchangeArgs = { 44 55 forward: () => empty as Source<OperationResult>, 45 56 client: {} as Client, 46 - dispatchDebug: jest.fn(), 57 + dispatchDebug: vi.fn(), 47 58 }; 48 59 49 60 describe('on success', () => { 50 61 beforeEach(() => { 51 62 fetch.mockResolvedValue({ 52 63 status: 200, 53 - text: jest.fn().mockResolvedValue(response), 64 + text: vi.fn().mockResolvedValue(response), 54 65 }); 55 66 }); 56 67 57 68 it('uses a file when given', async () => { 58 - const fetchOptions = jest.fn().mockReturnValue({}); 69 + const fetchOptions = vi.fn().mockReturnValue({}); 59 70 60 71 const data = await pipe( 61 72 fromValue({ ··· 76 87 }); 77 88 78 89 it('uses multiple files when given', async () => { 79 - const fetchOptions = jest.fn().mockReturnValue({}); 90 + const fetchOptions = vi.fn().mockReturnValue({}); 80 91 81 92 const data = await pipe( 82 93 fromValue({ ··· 97 108 }); 98 109 99 110 it('returns response data', async () => { 100 - const fetchOptions = jest.fn().mockReturnValue({}); 111 + const fetchOptions = vi.fn().mockReturnValue({}); 101 112 102 113 const data = await pipe( 103 114 fromValue({ ··· 121 132 beforeEach(() => { 122 133 fetch.mockResolvedValue({ 123 134 status: 400, 124 - text: jest.fn().mockResolvedValue('{}'), 135 + text: vi.fn().mockResolvedValue('{}'), 125 136 }); 126 137 }); 127 138 ··· 136 147 }); 137 148 138 149 it('returns error data with status 400 and manual redirect mode', async () => { 139 - const fetchOptions = jest.fn().mockReturnValue({ redirect: 'manual' }); 150 + const fetchOptions = vi.fn().mockReturnValue({ redirect: 'manual' }); 140 151 141 152 const data = await pipe( 142 153 fromValue({ ··· 156 167 it('ignores the error when a result is available', async () => { 157 168 fetch.mockResolvedValue({ 158 169 status: 400, 159 - text: jest.fn().mockResolvedValue(response), 170 + text: vi.fn().mockResolvedValue(response), 160 171 }); 161 172 162 173 const data = await pipe( ··· 170 181 }); 171 182 172 183 describe('on teardown', () => { 184 + const fail = () => { 185 + expect(true).toEqual(false); 186 + }; 187 + 173 188 it('does not start the outgoing request on immediate teardowns', () => { 174 189 fetch.mockRejectedValueOnce(abortError); 175 190
+1 -4
exchanges/persisted-fetch/package.json
··· 37 37 "dist/" 38 38 ], 39 39 "scripts": { 40 - "test": "jest", 40 + "test": "vitest --config ../../vitest.config.ts", 41 41 "clean": "rimraf dist extras", 42 42 "check": "tsc --noEmit", 43 43 "lint": "eslint --ext=js,jsx,ts,tsx .", 44 44 "build": "rollup -c ../../scripts/rollup/config.mjs", 45 45 "prepare": "node ../../scripts/prepare/index.js", 46 46 "prepublishOnly": "run-s clean build" 47 - }, 48 - "jest": { 49 - "preset": "../../scripts/jest/preset" 50 47 }, 51 48 "dependencies": { 52 49 "@urql/core": ">=3.0.0",
+1 -1
exchanges/persisted-fetch/src/__snapshots__/persistedFetchExchange.test.ts.snap
··· 1 - // Jest Snapshot v1, https://goo.gl/fbAQLP 1 + // Vitest Snapshot v1 2 2 3 3 exports[`accepts successful persisted query responses 1`] = `"{\\"operationName\\":\\"getUser\\",\\"variables\\":{\\"name\\":\\"Clara\\"},\\"extensions\\":{\\"persistedQuery\\":{\\"version\\":1,\\"sha256Hash\\":\\"b4228e10e04c59def248546d305b710309c1b297423b38eb64f989a89a398cd8\\"}}}"`; 4 4
+7 -6
exchanges/persisted-fetch/src/persistedFetchExchange.test.ts
··· 1 1 /** 2 - * @jest-environment node 2 + * @vitest-environment node 3 3 */ 4 4 5 5 import { empty, fromValue, fromArray, pipe, Source, toPromise } from 'wonka'; 6 + import { vi, expect, it, afterEach, Mock } from 'vitest'; 6 7 7 8 import { DocumentNode, print } from 'graphql'; 8 9 import { Client, OperationResult } from '@urql/core'; ··· 11 12 import { hash } from './sha256'; 12 13 import { persistedFetchExchange } from './persistedFetchExchange'; 13 14 14 - const fetch = (global as any).fetch as jest.Mock; 15 + const fetch = (global as any).fetch as Mock; 15 16 16 17 const exchangeArgs = { 17 - dispatchDebug: jest.fn(), 18 + dispatchDebug: vi.fn(), 18 19 forward: () => empty as Source<OperationResult>, 19 20 client: ({ 20 21 debugTarget: { 21 - dispatchEvent: jest.fn(), 22 + dispatchEvent: vi.fn(), 22 23 }, 23 24 } as any) as Client, 24 25 }; ··· 195 196 text: () => Promise.resolve(expected), 196 197 }); 197 198 198 - const hashFn = jest.fn((_input: string, _doc: DocumentNode) => { 199 + const hashFn = vi.fn((_input: string, _doc: DocumentNode) => { 199 200 return Promise.resolve('hello'); 200 201 }); 201 202 ··· 238 239 text: () => Promise.resolve(expected), 239 240 }); 240 241 241 - const hashFn = jest.fn(() => Promise.resolve('')); 242 + const hashFn = vi.fn(() => Promise.resolve('')); 242 243 243 244 await pipe( 244 245 fromValue(queryOperation),
+1 -4
exchanges/populate/package.json
··· 37 37 "extras/" 38 38 ], 39 39 "scripts": { 40 - "test": "jest", 40 + "test": "vitest --config ../../vitest.config.ts", 41 41 "clean": "rimraf dist extras", 42 42 "check": "tsc --noEmit", 43 43 "lint": "eslint --ext=js,jsx,ts,tsx .", 44 44 "build": "rollup -c ../../scripts/rollup/config.mjs", 45 45 "prepare": "node ../../scripts/prepare/index.js", 46 46 "prepublishOnly": "run-s clean build" 47 - }, 48 - "jest": { 49 - "preset": "../../scripts/jest/preset" 50 47 }, 51 48 "dependencies": { 52 49 "@urql/core": ">=3.0.0",
+2 -3
exchanges/populate/src/populateExchange.test.ts
··· 7 7 ASTKindToNode, 8 8 Kind, 9 9 } from 'graphql'; 10 + import { vi, expect, it, describe } from 'vitest'; 10 11 11 12 import { fromValue, pipe, fromArray, toArray } from 'wonka'; 12 13 import { ··· 109 110 110 111 const schema = introspectionFromSchema(buildSchema(schemaDef)); 111 112 112 - beforeEach(jest.clearAllMocks); 113 - 114 113 const exchangeArgs = { 115 114 forward: a => a as any, 116 115 client: {} as Client, 117 - dispatchDebug: jest.fn(), 116 + dispatchDebug: vi.fn(), 118 117 }; 119 118 120 119 describe('on mutation', () => {
+1 -4
exchanges/refocus/package.json
··· 39 39 "dist/" 40 40 ], 41 41 "scripts": { 42 - "test": "jest", 42 + "test": "vitest --config ../../vitest.config.ts", 43 43 "clean": "rimraf dist", 44 44 "check": "tsc --noEmit", 45 45 "lint": "eslint --ext=js,jsx,ts,tsx .", 46 46 "build": "rollup -c ../../scripts/rollup/config.mjs", 47 47 "prepare": "node ../../scripts/prepare/index.js", 48 48 "prepublishOnly": "run-s clean build" 49 - }, 50 - "jest": { 51 - "preset": "../../scripts/jest/preset" 52 49 }, 53 50 "devDependencies": { 54 51 "@types/react": "^17.0.4",
+6 -5
exchanges/refocus/src/refocusExchange.test.ts
··· 1 1 import { pipe, map, makeSubject, publish, tap } from 'wonka'; 2 + import { vi, expect, it, beforeEach } from 'vitest'; 2 3 3 4 import { 4 5 gql, ··· 10 11 11 12 import { refocusExchange } from './refocusExchange'; 12 13 13 - const dispatchDebug = jest.fn(); 14 + const dispatchDebug = vi.fn(); 14 15 15 16 const queryOne = gql` 16 17 { ··· 42 43 }); 43 44 44 45 it(`attaches a listener and redispatches queries on call`, () => { 45 - const response = jest.fn( 46 + const response = vi.fn( 46 47 (forwardOp: Operation): OperationResult => { 47 48 return { 48 49 operation: forwardOp, ··· 52 53 ); 53 54 54 55 let listener; 55 - const spy = jest 56 + const spy = vi 56 57 .spyOn(window, 'addEventListener') 57 58 .mockImplementation((_keyword, fn) => { 58 59 listener = fn; 59 60 }); 60 - const reexecuteSpy = jest 61 + const reexecuteSpy = vi 61 62 .spyOn(client, 'reexecuteOperation') 62 63 .mockImplementation(() => ({})); 63 64 64 - const result = jest.fn(); 65 + const result = vi.fn(); 65 66 const forward: ExchangeIO = ops$ => { 66 67 return pipe(ops$, map(response)); 67 68 };
+1 -4
exchanges/request-policy/package.json
··· 38 38 "dist/" 39 39 ], 40 40 "scripts": { 41 - "test": "jest", 41 + "test": "vitest --config ../../vitest.config.ts", 42 42 "clean": "rimraf dist", 43 43 "check": "tsc --noEmit", 44 44 "lint": "eslint --ext=js,jsx,ts,tsx .", 45 45 "build": "rollup -c ../../scripts/rollup/config.mjs", 46 46 "prepare": "node ../../scripts/prepare/index.js", 47 47 "prepublishOnly": "run-s clean build" 48 - }, 49 - "jest": { 50 - "preset": "../../scripts/jest/preset" 51 48 }, 52 49 "devDependencies": { 53 50 "graphql": "^16.0.0"
+32 -27
exchanges/request-policy/src/requestPolicyExchange.test.ts
··· 1 1 import { pipe, map, makeSubject, publish, tap } from 'wonka'; 2 + import { vi, expect, it, beforeEach } from 'vitest'; 2 3 3 4 import { 4 5 gql, ··· 10 11 11 12 import { requestPolicyExchange } from './requestPolicyExchange'; 12 13 13 - const dispatchDebug = jest.fn(); 14 + const dispatchDebug = vi.fn(); 14 15 15 16 const mockOptions = { 16 17 ttl: 5, ··· 45 46 ({ source: ops$, next } = makeSubject<Operation>()); 46 47 }); 47 48 48 - it(`upgrades to cache-and-network`, done => { 49 - const response = jest.fn( 49 + it(`upgrades to cache-and-network`, async () => { 50 + const response = vi.fn( 50 51 (forwardOp: Operation): OperationResult => { 51 52 return { 52 53 operation: forwardOp, ··· 55 56 } 56 57 ); 57 58 58 - const result = jest.fn(); 59 + const result = vi.fn(); 59 60 const forward: ExchangeIO = ops$ => { 60 61 return pipe(ops$, map(response)); 61 62 }; ··· 78 79 ); 79 80 expect(result).toHaveBeenCalledTimes(1); 80 81 81 - setTimeout(() => { 82 - next(op); 83 - expect(response).toHaveBeenCalledTimes(2); 84 - expect(response.mock.calls[1][0].context.requestPolicy).toEqual( 85 - 'cache-and-network' 86 - ); 87 - expect(result).toHaveBeenCalledTimes(2); 88 - done(); 89 - }, 10); 82 + await new Promise(res => { 83 + setTimeout(() => { 84 + next(op); 85 + expect(response).toHaveBeenCalledTimes(2); 86 + expect(response.mock.calls[1][0].context.requestPolicy).toEqual( 87 + 'cache-and-network' 88 + ); 89 + expect(result).toHaveBeenCalledTimes(2); 90 + res(null); 91 + }, 10); 92 + }); 90 93 }); 91 94 92 - it(`doesn't upgrade when shouldUpgrade returns false`, done => { 93 - const response = jest.fn( 95 + it(`doesn't upgrade when shouldUpgrade returns false`, async () => { 96 + const response = vi.fn( 94 97 (forwardOp: Operation): OperationResult => { 95 98 return { 96 99 operation: forwardOp, ··· 99 102 } 100 103 ); 101 104 102 - const result = jest.fn(); 105 + const result = vi.fn(); 103 106 const forward: ExchangeIO = ops$ => { 104 107 return pipe(ops$, map(response)); 105 108 }; 106 109 107 - const shouldUpgrade = jest.fn(() => false); 110 + const shouldUpgrade = vi.fn(() => false); 108 111 pipe( 109 112 requestPolicyExchange({ ...mockOptions, shouldUpgrade })({ 110 113 forward, ··· 123 126 ); 124 127 expect(result).toHaveBeenCalledTimes(1); 125 128 126 - setTimeout(() => { 127 - next(op); 128 - expect(response).toHaveBeenCalledTimes(2); 129 - expect(response.mock.calls[1][0].context.requestPolicy).toEqual( 130 - 'cache-first' 131 - ); 132 - expect(result).toHaveBeenCalledTimes(2); 133 - expect(shouldUpgrade).toBeCalledTimes(2); 134 - done(); 135 - }, 10); 129 + await new Promise(res => { 130 + setTimeout(() => { 131 + next(op); 132 + expect(response).toHaveBeenCalledTimes(2); 133 + expect(response.mock.calls[1][0].context.requestPolicy).toEqual( 134 + 'cache-first' 135 + ); 136 + expect(result).toHaveBeenCalledTimes(2); 137 + expect(shouldUpgrade).toBeCalledTimes(2); 138 + res(null); 139 + }, 10); 140 + }); 136 141 });
+1 -4
exchanges/retry/package.json
··· 38 38 "dist/" 39 39 ], 40 40 "scripts": { 41 - "test": "jest", 41 + "test": "vitest --config ../../vitest.config.ts", 42 42 "clean": "rimraf dist", 43 43 "check": "tsc --noEmit", 44 44 "lint": "eslint --ext=js,jsx,ts,tsx .", 45 45 "build": "rollup -c ../../scripts/rollup/config.mjs", 46 46 "prepare": "node ../../scripts/prepare/index.js", 47 47 "prepublishOnly": "run-s clean build" 48 - }, 49 - "jest": { 50 - "preset": "../../scripts/jest/preset" 51 48 }, 52 49 "devDependencies": { 53 50 "graphql": "^16.0.0"
+24 -23
exchanges/retry/src/retryExchange.test.ts
··· 1 1 import { pipe, map, makeSubject, publish, tap } from 'wonka'; 2 + import { vi, expect, it, beforeEach, afterEach } from 'vitest'; 2 3 3 4 import { 4 5 gql, ··· 11 12 12 13 import { retryExchange, RetryExchangeOptions } from './retryExchange'; 13 14 14 - const dispatchDebug = jest.fn(); 15 + const dispatchDebug = vi.fn(); 15 16 16 17 beforeEach(() => { 17 - jest.useFakeTimers(); 18 + vi.useFakeTimers(); 18 19 }); 19 20 20 21 afterEach(() => { 21 - jest.useRealTimers(); 22 + vi.useRealTimers(); 22 23 }); 23 24 24 25 const mockOptions = { ··· 81 82 query: queryTwo, 82 83 }); 83 84 84 - const response = jest.fn( 85 + const response = vi.fn( 85 86 (forwardOp: Operation): OperationResult => { 86 87 expect( 87 88 forwardOp.key === op.key || forwardOp.key === opTwo.key ··· 95 96 } 96 97 ); 97 98 98 - const result = jest.fn(); 99 + const result = vi.fn(); 99 100 const forward: ExchangeIO = ops$ => { 100 101 return pipe(ops$, map(response)); 101 102 }; 102 103 103 - const mockRetryIf = jest.fn((() => true) as RetryExchangeOptions['retryIf']); 104 + const mockRetryIf = vi.fn((() => true) as RetryExchangeOptions['retryIf']); 104 105 105 106 pipe( 106 107 retryExchange({ ··· 120 121 expect(mockRetryIf).toHaveBeenCalledTimes(1); 121 122 expect(mockRetryIf).toHaveBeenCalledWith(queryOneError as any, op); 122 123 123 - jest.runAllTimers(); 124 + vi.runAllTimers(); 124 125 125 126 expect(mockRetryIf).toHaveBeenCalledTimes(mockOptions.maxNumberAttempts); 126 127 ··· 131 132 132 133 next(opTwo); 133 134 134 - jest.runAllTimers(); 135 + vi.runAllTimers(); 135 136 136 137 expect(mockRetryIf).toHaveBeenCalledWith(queryTwoError as any, opTwo); 137 138 ··· 142 143 143 144 it('should retry x number of times and then return the successful result', () => { 144 145 const numberRetriesBeforeSuccess = 3; 145 - const response = jest.fn( 146 + const response = vi.fn( 146 147 (forwardOp: Operation): OperationResult => { 147 148 expect(forwardOp.key).toBe(op.key); 148 149 // @ts-ignore ··· 155 156 } 156 157 ); 157 158 158 - const result = jest.fn(); 159 + const result = vi.fn(); 159 160 const forward: ExchangeIO = ops$ => { 160 161 return pipe(ops$, map(response)); 161 162 }; 162 163 163 - const mockRetryIf = jest.fn((() => true) as RetryExchangeOptions['retryIf']); 164 + const mockRetryIf = vi.fn((() => true) as RetryExchangeOptions['retryIf']); 164 165 165 166 pipe( 166 167 retryExchange({ ··· 176 177 ); 177 178 178 179 next(op); 179 - jest.runAllTimers(); 180 + vi.runAllTimers(); 180 181 181 182 expect(mockRetryIf).toHaveBeenCalledTimes(numberRetriesBeforeSuccess); 182 183 expect(mockRetryIf).toHaveBeenCalledWith(queryOneError as any, op); ··· 191 192 ...queryOneError, 192 193 networkError: 'scary network error', 193 194 }; 194 - const response = jest.fn( 195 + const response = vi.fn( 195 196 (forwardOp: Operation): OperationResult => { 196 197 expect(forwardOp.key).toBe(op.key); 197 198 return { ··· 202 203 } 203 204 ); 204 205 205 - const result = jest.fn(); 206 + const result = vi.fn(); 206 207 const forward: ExchangeIO = ops$ => { 207 208 return pipe(ops$, map(response)); 208 209 }; ··· 222 223 223 224 next(op); 224 225 225 - jest.runAllTimers(); 226 + vi.runAllTimers(); 226 227 227 228 // max number of retries, plus original call 228 229 expect(response).toHaveBeenCalledTimes(mockOptions.maxNumberAttempts); ··· 234 235 ...queryOneError, 235 236 networkError: 'scary network error', 236 237 }; 237 - const response = jest.fn( 238 + const response = vi.fn( 238 239 (forwardOp: Operation): OperationResult => { 239 240 expect(forwardOp.key).toBe(op.key); 240 241 return { ··· 245 246 } 246 247 ); 247 248 248 - const result = jest.fn(); 249 + const result = vi.fn(); 249 250 const forward: ExchangeIO = ops$ => { 250 251 return pipe(ops$, map(response)); 251 252 }; 252 253 253 - const retryWith = jest.fn(() => null); 254 + const retryWith = vi.fn(() => null); 254 255 255 256 pipe( 256 257 retryExchange({ ··· 268 269 269 270 next(op); 270 271 271 - jest.runAllTimers(); 272 + vi.runAllTimers(); 272 273 273 274 // max number of retries, plus original call 274 275 expect(retryWith).toHaveBeenCalledTimes(1); ··· 281 282 ...queryOneError, 282 283 networkError: 'scary network error', 283 284 }; 284 - const response = jest.fn( 285 + const response = vi.fn( 285 286 (forwardOp: Operation): OperationResult => { 286 287 expect(forwardOp.key).toBe(op.key); 287 288 return { ··· 292 293 } 293 294 ); 294 295 295 - const result = jest.fn(); 296 + const result = vi.fn(); 296 297 const forward: ExchangeIO = ops$ => { 297 298 return pipe(ops$, map(response)); 298 299 }; 299 300 300 - const retryWith = jest.fn((_error, operation) => { 301 + const retryWith = vi.fn((_error, operation) => { 301 302 return makeOperation(operation.kind, operation, { 302 303 ...operation.context, 303 304 counter: (operation.context?.counter || 0) + 1, ··· 320 321 321 322 next(op); 322 323 323 - jest.runAllTimers(); 324 + vi.runAllTimers(); 324 325 325 326 // max number of retries, plus original call 326 327 expect(retryWith).toHaveBeenCalledTimes(mockOptions.maxNumberAttempts - 1);
+4 -13
package.json
··· 5 5 "exchanges/*" 6 6 ], 7 7 "scripts": { 8 - "test": "jest", 8 + "test": "vitest", 9 9 "check": "tsc", 10 10 "lint": "eslint --ext=js,jsx,ts,tsx .", 11 11 "build": "node ./scripts/actions/build-all.js", 12 12 "postinstall": "node ./scripts/prepare/postinstall.js", 13 13 "pack": "node ./scripts/actions/pack-all.js" 14 - }, 15 - "jest": { 16 - "projects": [ 17 - "<rootDir>/packages/*", 18 - "<rootDir>/exchanges/*" 19 - ] 20 14 }, 21 15 "eslintConfig": { 22 16 "root": true, ··· 78 72 "@rollup/plugin-sucrase": "^5.0.0", 79 73 "@rollup/plugin-terser": "^0.1.0", 80 74 "@rollup/pluginutils": "^5.0.0", 81 - "@sucrase/jest-plugin": "^2.2.1", 82 - "@types/jest": "^26.0.23", 83 75 "@typescript-eslint/eslint-plugin": "^4.22.0", 84 76 "@typescript-eslint/parser": "^4.22.0", 85 77 "cjs-module-lexer": "^1.2.2", ··· 89 81 "eslint-config-prettier": "^8.3.0", 90 82 "eslint-plugin-es5": "^1.5.0", 91 83 "eslint-plugin-import": "^2.22.0", 92 - "eslint-plugin-jest": "^24.3.6", 93 84 "eslint-plugin-prettier": "^3.4.0", 94 85 "eslint-plugin-react": "^7.23.2", 95 86 "eslint-plugin-react-hooks": "^4.2.0", ··· 98 89 "graphql": "^16.0.0", 99 90 "husky-v4": "^4.3.8", 100 91 "invariant": "^2.2.4", 101 - "jest": "^26.6.3", 102 - "jest-watch-yarn-workspaces": "^1.1.0", 92 + "jsdom": "^20.0.3", 103 93 "lint-staged": "^10.5.4", 104 94 "npm-packlist": "^2.1.5", 105 95 "npm-run-all": "^4.1.5", ··· 114 104 "rollup-plugin-visualizer": "^5.8.0", 115 105 "tar": "^6.1.0", 116 106 "terser": "^5.14.1", 117 - "typescript": "^4.7.3" 107 + "typescript": "^4.7.3", 108 + "vitest": "^0.25.3" 118 109 } 119 110 }
+1 -4
packages/core/package.json
··· 44 44 "internal/" 45 45 ], 46 46 "scripts": { 47 - "test": "jest", 47 + "test": "vitest --config ../../vitest.config.ts", 48 48 "clean": "rimraf dist", 49 49 "check": "tsc --noEmit", 50 50 "lint": "eslint --ext=js,jsx,ts,tsx .", 51 51 "build": "rollup -c ../../scripts/rollup/config.mjs", 52 52 "prepare": "node ../../scripts/prepare/index.js", 53 53 "prepublishOnly": "run-s clean build" 54 - }, 55 - "jest": { 56 - "preset": "../../scripts/jest/preset" 57 54 }, 58 55 "devDependencies": { 59 56 "graphql": "^16.0.0"
+3 -3
packages/core/src/__snapshots__/client.test.ts.snap
··· 1 - // Jest Snapshot v1, https://goo.gl/fbAQLP 1 + // Vitest Snapshot v1 2 2 3 - exports[`createClient / Client passes snapshot 1`] = ` 4 - Client { 3 + exports[`createClient / Client > passes snapshot 1`] = ` 4 + Client2 { 5 5 "createRequestOperation": [Function], 6 6 "executeMutation": [Function], 7 7 "executeQuery": [Function],
+38 -37
packages/core/src/client.test.ts
··· 1 1 import { print } from 'graphql'; 2 + import { vi, expect, it, beforeEach, describe, afterEach } from 'vitest'; 2 3 3 4 /** NOTE: Testing in this file is designed to test both the client and its interaction with default Exchanges */ 4 5 ··· 78 79 79 80 let receivedOps: Operation[] = []; 80 81 let client = createClient({ url: '1234' }); 81 - const receiveMock = jest.fn((s: Source<Operation>) => 82 + const receiveMock = vi.fn((s: Source<Operation>) => 82 83 pipe( 83 84 s, 84 85 tap(op => (receivedOps = [...receivedOps, op])), 85 86 map(op => ({ operation: op })) 86 87 ) 87 88 ); 88 - const exchangeMock = jest.fn(() => receiveMock); 89 + const exchangeMock = vi.fn(() => receiveMock); 89 90 90 91 beforeEach(() => { 91 92 receivedOps = []; ··· 341 342 342 343 describe('queuing behavior', () => { 343 344 beforeEach(() => { 344 - jest.useFakeTimers(); 345 + vi.useFakeTimers(); 345 346 }); 346 347 347 348 afterEach(() => { 348 - jest.useRealTimers(); 349 + vi.useRealTimers(); 349 350 }); 350 351 351 352 it('queues reexecuteOperation, which dispatchOperation consumes', () => { ··· 446 447 }) 447 448 ); 448 449 449 - jest.advanceTimersByTime(1); 450 + vi.advanceTimersByTime(1); 450 451 451 452 expect(output.length).toBe(1); 452 453 expect(output[0]).toHaveProperty('data', 1); ··· 474 475 'cache-first' 475 476 ); 476 477 477 - jest.advanceTimersByTime(1); 478 + vi.advanceTimersByTime(1); 478 479 479 480 expect(output.length).toBe(3); 480 481 expect(output[2]).toHaveProperty('data', 2); 481 - expect(output[2]).toHaveProperty('stale', undefined); 482 + expect(output[2]).not.toHaveProperty('stale'); 482 483 expect(output[2]).toHaveProperty('operation.key', queryOperation.key); 483 484 expect(output[2]).toHaveProperty( 484 485 'operation.context.requestPolicy', ··· 515 516 }) 516 517 ); 517 518 518 - jest.advanceTimersByTime(1); 519 + vi.advanceTimersByTime(1); 519 520 520 521 expect(output.length).toBe(1); 521 522 expect(output[0]).toHaveProperty('operation.key', queryOperation.key); ··· 532 533 ); 533 534 534 535 await Promise.resolve(); 535 - jest.advanceTimersByTime(1); 536 + vi.advanceTimersByTime(1); 536 537 537 538 expect(output.length).toBe(2); 538 539 expect(output[1]).toHaveProperty('stale', true); ··· 548 549 549 550 describe('shared sources behavior', () => { 550 551 beforeEach(() => { 551 - jest.useFakeTimers(); 552 + vi.useFakeTimers(); 552 553 }); 553 554 554 555 afterEach(() => { 555 - jest.useRealTimers(); 556 + vi.useRealTimers(); 556 557 }); 557 558 558 559 it('replays results from prior operation result as needed (cache-first)', async () => { ··· 573 574 exchanges: [exchange], 574 575 }); 575 576 576 - const resultOne = jest.fn(); 577 - const resultTwo = jest.fn(); 577 + const resultOne = vi.fn(); 578 + const resultTwo = vi.fn(); 578 579 579 580 pipe(client.executeRequestOperation(queryOperation), subscribe(resultOne)); 580 581 581 582 expect(resultOne).toHaveBeenCalledTimes(0); 582 583 583 - jest.advanceTimersByTime(1); 584 + vi.advanceTimersByTime(1); 584 585 585 586 expect(resultOne).toHaveBeenCalledTimes(1); 586 587 expect(resultOne).toHaveBeenCalledWith({ ··· 595 596 operation: queryOperation, 596 597 }); 597 598 598 - jest.advanceTimersByTime(1); 599 + vi.advanceTimersByTime(1); 599 600 600 601 // With cache-first we don't expect a new operation to be issued 601 602 expect(resultTwo).toHaveBeenCalledTimes(1); ··· 619 620 exchanges: [exchange], 620 621 }); 621 622 622 - const resultOne = jest.fn(); 623 - const resultTwo = jest.fn(); 623 + const resultOne = vi.fn(); 624 + const resultTwo = vi.fn(); 624 625 const operationOne = makeOperation('query', queryOperation, { 625 626 ...queryOperation.context, 626 627 requestPolicy: 'cache-first', ··· 634 635 635 636 expect(resultOne).toHaveBeenCalledTimes(0); 636 637 637 - jest.advanceTimersByTime(1); 638 + vi.advanceTimersByTime(1); 638 639 639 640 expect(resultOne).toHaveBeenCalledTimes(1); 640 641 expect(resultOne).toHaveBeenCalledWith({ ··· 650 651 stale: true, 651 652 }); 652 653 653 - jest.advanceTimersByTime(1); 654 + vi.advanceTimersByTime(1); 654 655 655 656 expect(resultTwo).toHaveBeenCalledWith({ 656 657 data: 2, ··· 681 682 requestPolicy: 'network-only', 682 683 }); 683 684 684 - const resultOne = jest.fn(); 685 - const resultTwo = jest.fn(); 685 + const resultOne = vi.fn(); 686 + const resultTwo = vi.fn(); 686 687 687 688 pipe(client.executeRequestOperation(operation), subscribe(resultOne)); 688 689 689 690 expect(resultOne).toHaveBeenCalledTimes(0); 690 691 691 - jest.advanceTimersByTime(1); 692 + vi.advanceTimersByTime(1); 692 693 693 694 expect(resultOne).toHaveBeenCalledTimes(1); 694 695 expect(resultOne).toHaveBeenCalledWith({ ··· 704 705 stale: true, 705 706 }); 706 707 707 - jest.advanceTimersByTime(1); 708 + vi.advanceTimersByTime(1); 708 709 709 710 // With network-only we expect a new operation to be issued, hence a new result 710 711 expect(resultTwo).toHaveBeenCalledTimes(2); ··· 736 737 737 738 // We keep the source in-memory 738 739 const source = client.executeRequestOperation(queryOperation); 739 - const resultOne = jest.fn(); 740 + const resultOne = vi.fn(); 740 741 let subscription; 741 742 742 743 subscription = pipe(source, subscribe(resultOne)); 743 744 744 745 expect(resultOne).toHaveBeenCalledTimes(0); 745 - jest.advanceTimersByTime(1); 746 + vi.advanceTimersByTime(1); 746 747 747 748 expect(resultOne).toHaveBeenCalledWith({ 748 749 data: 1, ··· 750 751 }); 751 752 752 753 subscription.unsubscribe(); 753 - const resultTwo = jest.fn(); 754 + const resultTwo = vi.fn(); 754 755 subscription = pipe(source, subscribe(resultTwo)); 755 756 756 757 expect(resultTwo).toHaveBeenCalledTimes(0); 757 - jest.advanceTimersByTime(1); 758 + vi.advanceTimersByTime(1); 758 759 759 760 expect(resultTwo).toHaveBeenCalledWith({ 760 761 data: 2, ··· 785 786 requestPolicy: 'network-only', 786 787 }); 787 788 788 - const resultOne = jest.fn(); 789 - const resultTwo = jest.fn(); 789 + const resultOne = vi.fn(); 790 + const resultTwo = vi.fn(); 790 791 791 792 pipe(client.executeRequestOperation(operation), subscribe(resultOne)); 792 793 pipe(client.executeRequestOperation(operation), subscribe(resultTwo)); ··· 813 814 exchanges: [exchange], 814 815 }); 815 816 816 - const resultOne = jest.fn(); 817 - const resultTwo = jest.fn(); 817 + const resultOne = vi.fn(); 818 + const resultTwo = vi.fn(); 818 819 819 820 pipe(client.executeRequestOperation(queryOperation), subscribe(resultOne)); 820 821 ··· 843 844 requestPolicy: 'network-only', 844 845 }); 845 846 846 - const resultOne = jest.fn(); 847 - const resultTwo = jest.fn(); 847 + const resultOne = vi.fn(); 848 + const resultTwo = vi.fn(); 848 849 849 850 pipe(client.executeRequestOperation(operation), subscribe(resultOne)); 850 851 ··· 880 881 exchanges: [exchange], 881 882 }); 882 883 883 - const resultOne = jest.fn(); 884 - const resultTwo = jest.fn(); 884 + const resultOne = vi.fn(); 885 + const resultTwo = vi.fn(); 885 886 886 887 pipe(client.executeRequestOperation(queryOperation), subscribe(resultOne)); 887 888 ··· 917 918 exchanges: [exchange], 918 919 }); 919 920 920 - const resultOne = jest.fn(); 921 - const resultTwo = jest.fn(); 921 + const resultOne = vi.fn(); 922 + const resultTwo = vi.fn(); 922 923 923 924 pipe( 924 925 client.executeRequestOperation(subscriptionOperation),
+149 -149
packages/core/src/exchanges/__snapshots__/fetch.test.ts.snap
··· 1 - // Jest Snapshot v1, https://goo.gl/fbAQLP 1 + // Vitest Snapshot v1 2 2 3 - exports[`on error returns error data 1`] = ` 4 - Object { 3 + exports[`on error > returns error data 1`] = ` 4 + { 5 5 "data": undefined, 6 6 "error": [CombinedError: [Network] No Content], 7 7 "extensions": undefined, 8 - "operation": Object { 9 - "context": Object { 10 - "fetchOptions": Object { 8 + "operation": { 9 + "context": { 10 + "fetchOptions": { 11 11 "method": "POST", 12 12 }, 13 13 "requestPolicy": "cache-first", ··· 15 15 }, 16 16 "key": 2, 17 17 "kind": "query", 18 - "query": Object { 18 + "query": { 19 19 "__key": 3521976120, 20 - "definitions": Array [ 21 - Object { 22 - "directives": Array [], 20 + "definitions": [ 21 + { 22 + "directives": [], 23 23 "kind": "OperationDefinition", 24 - "name": Object { 24 + "name": { 25 25 "kind": "Name", 26 26 "value": "getUser", 27 27 }, 28 28 "operation": "query", 29 - "selectionSet": Object { 29 + "selectionSet": { 30 30 "kind": "SelectionSet", 31 - "selections": Array [ 32 - Object { 31 + "selections": [ 32 + { 33 33 "alias": undefined, 34 - "arguments": Array [ 35 - Object { 34 + "arguments": [ 35 + { 36 36 "kind": "Argument", 37 - "name": Object { 37 + "name": { 38 38 "kind": "Name", 39 39 "value": "name", 40 40 }, 41 - "value": Object { 41 + "value": { 42 42 "kind": "Variable", 43 - "name": Object { 43 + "name": { 44 44 "kind": "Name", 45 45 "value": "name", 46 46 }, 47 47 }, 48 48 }, 49 49 ], 50 - "directives": Array [], 50 + "directives": [], 51 51 "kind": "Field", 52 - "name": Object { 52 + "name": { 53 53 "kind": "Name", 54 54 "value": "user", 55 55 }, 56 - "selectionSet": Object { 56 + "selectionSet": { 57 57 "kind": "SelectionSet", 58 - "selections": Array [ 59 - Object { 58 + "selections": [ 59 + { 60 60 "alias": undefined, 61 - "arguments": Array [], 62 - "directives": Array [], 61 + "arguments": [], 62 + "directives": [], 63 63 "kind": "Field", 64 - "name": Object { 64 + "name": { 65 65 "kind": "Name", 66 66 "value": "id", 67 67 }, 68 68 "selectionSet": undefined, 69 69 }, 70 - Object { 70 + { 71 71 "alias": undefined, 72 - "arguments": Array [], 73 - "directives": Array [], 72 + "arguments": [], 73 + "directives": [], 74 74 "kind": "Field", 75 - "name": Object { 75 + "name": { 76 76 "kind": "Name", 77 77 "value": "firstName", 78 78 }, 79 79 "selectionSet": undefined, 80 80 }, 81 - Object { 81 + { 82 82 "alias": undefined, 83 - "arguments": Array [], 84 - "directives": Array [], 83 + "arguments": [], 84 + "directives": [], 85 85 "kind": "Field", 86 - "name": Object { 86 + "name": { 87 87 "kind": "Name", 88 88 "value": "lastName", 89 89 }, ··· 94 94 }, 95 95 ], 96 96 }, 97 - "variableDefinitions": Array [ 98 - Object { 97 + "variableDefinitions": [ 98 + { 99 99 "defaultValue": undefined, 100 - "directives": Array [], 100 + "directives": [], 101 101 "kind": "VariableDefinition", 102 - "type": Object { 102 + "type": { 103 103 "kind": "NamedType", 104 - "name": Object { 104 + "name": { 105 105 "kind": "Name", 106 106 "value": "String", 107 107 }, 108 108 }, 109 - "variable": Object { 109 + "variable": { 110 110 "kind": "Variable", 111 - "name": Object { 111 + "name": { 112 112 "kind": "Name", 113 113 "value": "name", 114 114 }, ··· 118 118 }, 119 119 ], 120 120 "kind": "Document", 121 - "loc": Object { 121 + "loc": { 122 122 "end": 86, 123 - "source": Object { 123 + "source": { 124 124 "body": "# getUser 125 125 query getUser($name: String) { user(name: $name) { id firstName lastName } }", 126 - "locationOffset": Object { 126 + "locationOffset": { 127 127 "column": 1, 128 128 "line": 1, 129 129 }, ··· 132 132 "start": 0, 133 133 }, 134 134 }, 135 - "variables": Object { 135 + "variables": { 136 136 "name": "Clara", 137 137 }, 138 138 }, 139 139 } 140 140 `; 141 141 142 - exports[`on error returns error data with status 400 and manual redirect mode 1`] = ` 143 - Object { 142 + exports[`on error > returns error data with status 400 and manual redirect mode 1`] = ` 143 + { 144 144 "data": undefined, 145 145 "error": [CombinedError: [Network] No Content], 146 146 "extensions": undefined, 147 - "operation": Object { 148 - "context": Object { 149 - "fetchOptions": [MockFunction] { 150 - "calls": Array [ 151 - Array [], 147 + "operation": { 148 + "context": { 149 + "fetchOptions": [MockFunction spy] { 150 + "calls": [ 151 + [], 152 152 ], 153 - "results": Array [ 154 - Object { 153 + "results": [ 154 + { 155 155 "type": "return", 156 - "value": Object { 156 + "value": { 157 157 "redirect": "manual", 158 158 }, 159 159 }, ··· 164 164 }, 165 165 "key": 2, 166 166 "kind": "query", 167 - "query": Object { 167 + "query": { 168 168 "__key": 3521976120, 169 - "definitions": Array [ 170 - Object { 171 - "directives": Array [], 169 + "definitions": [ 170 + { 171 + "directives": [], 172 172 "kind": "OperationDefinition", 173 - "name": Object { 173 + "name": { 174 174 "kind": "Name", 175 175 "value": "getUser", 176 176 }, 177 177 "operation": "query", 178 - "selectionSet": Object { 178 + "selectionSet": { 179 179 "kind": "SelectionSet", 180 - "selections": Array [ 181 - Object { 180 + "selections": [ 181 + { 182 182 "alias": undefined, 183 - "arguments": Array [ 184 - Object { 183 + "arguments": [ 184 + { 185 185 "kind": "Argument", 186 - "name": Object { 186 + "name": { 187 187 "kind": "Name", 188 188 "value": "name", 189 189 }, 190 - "value": Object { 190 + "value": { 191 191 "kind": "Variable", 192 - "name": Object { 192 + "name": { 193 193 "kind": "Name", 194 194 "value": "name", 195 195 }, 196 196 }, 197 197 }, 198 198 ], 199 - "directives": Array [], 199 + "directives": [], 200 200 "kind": "Field", 201 - "name": Object { 201 + "name": { 202 202 "kind": "Name", 203 203 "value": "user", 204 204 }, 205 - "selectionSet": Object { 205 + "selectionSet": { 206 206 "kind": "SelectionSet", 207 - "selections": Array [ 208 - Object { 207 + "selections": [ 208 + { 209 209 "alias": undefined, 210 - "arguments": Array [], 211 - "directives": Array [], 210 + "arguments": [], 211 + "directives": [], 212 212 "kind": "Field", 213 - "name": Object { 213 + "name": { 214 214 "kind": "Name", 215 215 "value": "id", 216 216 }, 217 217 "selectionSet": undefined, 218 218 }, 219 - Object { 219 + { 220 220 "alias": undefined, 221 - "arguments": Array [], 222 - "directives": Array [], 221 + "arguments": [], 222 + "directives": [], 223 223 "kind": "Field", 224 - "name": Object { 224 + "name": { 225 225 "kind": "Name", 226 226 "value": "firstName", 227 227 }, 228 228 "selectionSet": undefined, 229 229 }, 230 - Object { 230 + { 231 231 "alias": undefined, 232 - "arguments": Array [], 233 - "directives": Array [], 232 + "arguments": [], 233 + "directives": [], 234 234 "kind": "Field", 235 - "name": Object { 235 + "name": { 236 236 "kind": "Name", 237 237 "value": "lastName", 238 238 }, ··· 243 243 }, 244 244 ], 245 245 }, 246 - "variableDefinitions": Array [ 247 - Object { 246 + "variableDefinitions": [ 247 + { 248 248 "defaultValue": undefined, 249 - "directives": Array [], 249 + "directives": [], 250 250 "kind": "VariableDefinition", 251 - "type": Object { 251 + "type": { 252 252 "kind": "NamedType", 253 - "name": Object { 253 + "name": { 254 254 "kind": "Name", 255 255 "value": "String", 256 256 }, 257 257 }, 258 - "variable": Object { 258 + "variable": { 259 259 "kind": "Variable", 260 - "name": Object { 260 + "name": { 261 261 "kind": "Name", 262 262 "value": "name", 263 263 }, ··· 267 267 }, 268 268 ], 269 269 "kind": "Document", 270 - "loc": Object { 270 + "loc": { 271 271 "end": 86, 272 - "source": Object { 272 + "source": { 273 273 "body": "# getUser 274 274 query getUser($name: String) { user(name: $name) { id firstName lastName } }", 275 - "locationOffset": Object { 275 + "locationOffset": { 276 276 "column": 1, 277 277 "line": 1, 278 278 }, ··· 281 281 "start": 0, 282 282 }, 283 283 }, 284 - "variables": Object { 284 + "variables": { 285 285 "name": "Clara", 286 286 }, 287 287 }, 288 288 } 289 289 `; 290 290 291 - exports[`on success returns response data 1`] = ` 292 - Object { 293 - "data": Object { 294 - "data": Object { 291 + exports[`on success > returns response data 1`] = ` 292 + { 293 + "data": { 294 + "data": { 295 295 "user": 1200, 296 296 }, 297 297 }, 298 298 "error": undefined, 299 299 "extensions": undefined, 300 300 "hasNext": false, 301 - "operation": Object { 302 - "context": Object { 303 - "fetchOptions": [MockFunction] { 304 - "calls": Array [ 305 - Array [], 301 + "operation": { 302 + "context": { 303 + "fetchOptions": [MockFunction spy] { 304 + "calls": [ 305 + [], 306 306 ], 307 - "results": Array [ 308 - Object { 307 + "results": [ 308 + { 309 309 "type": "return", 310 - "value": Object {}, 310 + "value": {}, 311 311 }, 312 312 ], 313 313 }, ··· 316 316 }, 317 317 "key": 2, 318 318 "kind": "query", 319 - "query": Object { 319 + "query": { 320 320 "__key": 3521976120, 321 - "definitions": Array [ 322 - Object { 323 - "directives": Array [], 321 + "definitions": [ 322 + { 323 + "directives": [], 324 324 "kind": "OperationDefinition", 325 - "name": Object { 325 + "name": { 326 326 "kind": "Name", 327 327 "value": "getUser", 328 328 }, 329 329 "operation": "query", 330 - "selectionSet": Object { 330 + "selectionSet": { 331 331 "kind": "SelectionSet", 332 - "selections": Array [ 333 - Object { 332 + "selections": [ 333 + { 334 334 "alias": undefined, 335 - "arguments": Array [ 336 - Object { 335 + "arguments": [ 336 + { 337 337 "kind": "Argument", 338 - "name": Object { 338 + "name": { 339 339 "kind": "Name", 340 340 "value": "name", 341 341 }, 342 - "value": Object { 342 + "value": { 343 343 "kind": "Variable", 344 - "name": Object { 344 + "name": { 345 345 "kind": "Name", 346 346 "value": "name", 347 347 }, 348 348 }, 349 349 }, 350 350 ], 351 - "directives": Array [], 351 + "directives": [], 352 352 "kind": "Field", 353 - "name": Object { 353 + "name": { 354 354 "kind": "Name", 355 355 "value": "user", 356 356 }, 357 - "selectionSet": Object { 357 + "selectionSet": { 358 358 "kind": "SelectionSet", 359 - "selections": Array [ 360 - Object { 359 + "selections": [ 360 + { 361 361 "alias": undefined, 362 - "arguments": Array [], 363 - "directives": Array [], 362 + "arguments": [], 363 + "directives": [], 364 364 "kind": "Field", 365 - "name": Object { 365 + "name": { 366 366 "kind": "Name", 367 367 "value": "id", 368 368 }, 369 369 "selectionSet": undefined, 370 370 }, 371 - Object { 371 + { 372 372 "alias": undefined, 373 - "arguments": Array [], 374 - "directives": Array [], 373 + "arguments": [], 374 + "directives": [], 375 375 "kind": "Field", 376 - "name": Object { 376 + "name": { 377 377 "kind": "Name", 378 378 "value": "firstName", 379 379 }, 380 380 "selectionSet": undefined, 381 381 }, 382 - Object { 382 + { 383 383 "alias": undefined, 384 - "arguments": Array [], 385 - "directives": Array [], 384 + "arguments": [], 385 + "directives": [], 386 386 "kind": "Field", 387 - "name": Object { 387 + "name": { 388 388 "kind": "Name", 389 389 "value": "lastName", 390 390 }, ··· 395 395 }, 396 396 ], 397 397 }, 398 - "variableDefinitions": Array [ 399 - Object { 398 + "variableDefinitions": [ 399 + { 400 400 "defaultValue": undefined, 401 - "directives": Array [], 401 + "directives": [], 402 402 "kind": "VariableDefinition", 403 - "type": Object { 403 + "type": { 404 404 "kind": "NamedType", 405 - "name": Object { 405 + "name": { 406 406 "kind": "Name", 407 407 "value": "String", 408 408 }, 409 409 }, 410 - "variable": Object { 410 + "variable": { 411 411 "kind": "Variable", 412 - "name": Object { 412 + "name": { 413 413 "kind": "Name", 414 414 "value": "name", 415 415 }, ··· 419 419 }, 420 420 ], 421 421 "kind": "Document", 422 - "loc": Object { 422 + "loc": { 423 423 "end": 86, 424 - "source": Object { 424 + "source": { 425 425 "body": "# getUser 426 426 query getUser($name: String) { user(name: $name) { id firstName lastName } }", 427 - "locationOffset": Object { 427 + "locationOffset": { 428 428 "column": 1, 429 429 "line": 1, 430 430 }, ··· 433 433 "start": 0, 434 434 }, 435 435 }, 436 - "variables": Object { 436 + "variables": { 437 437 "name": "Clara", 438 438 }, 439 439 }, 440 440 } 441 441 `; 442 442 443 - exports[`on success returns response data 2`] = `"{\\"query\\":\\"query getUser($name: String) {\\\\n user(name: $name) {\\\\n id\\\\n firstName\\\\n lastName\\\\n }\\\\n}\\",\\"operationName\\":\\"getUser\\",\\"variables\\":{\\"name\\":\\"Clara\\"}}"`; 443 + exports[`on success > returns response data 2`] = `"{\\"query\\":\\"query getUser($name: String) {\\\\n user(name: $name) {\\\\n id\\\\n firstName\\\\n lastName\\\\n }\\\\n}\\",\\"operationName\\":\\"getUser\\",\\"variables\\":{\\"name\\":\\"Clara\\"}}"`;
+38 -38
packages/core/src/exchanges/__snapshots__/subscription.test.ts.snap
··· 1 - // Jest Snapshot v1, https://goo.gl/fbAQLP 1 + // Vitest Snapshot v1 2 2 3 3 exports[`should return response data from forwardSubscription observable 1`] = ` 4 - Object { 5 - "data": Object {}, 4 + { 5 + "data": {}, 6 6 "error": undefined, 7 7 "extensions": undefined, 8 8 "hasNext": false, 9 - "operation": Object { 10 - "context": Object { 11 - "fetchOptions": Object { 9 + "operation": { 10 + "context": { 11 + "fetchOptions": { 12 12 "method": "POST", 13 13 }, 14 14 "requestPolicy": "cache-first", ··· 16 16 }, 17 17 "key": 4, 18 18 "kind": "subscription", 19 - "query": Object { 19 + "query": { 20 20 "__key": 2088253569, 21 - "definitions": Array [ 22 - Object { 23 - "directives": Array [], 21 + "definitions": [ 22 + { 23 + "directives": [], 24 24 "kind": "OperationDefinition", 25 - "name": Object { 25 + "name": { 26 26 "kind": "Name", 27 27 "value": "subscribeToUser", 28 28 }, 29 29 "operation": "subscription", 30 - "selectionSet": Object { 30 + "selectionSet": { 31 31 "kind": "SelectionSet", 32 - "selections": Array [ 33 - Object { 32 + "selections": [ 33 + { 34 34 "alias": undefined, 35 - "arguments": Array [ 36 - Object { 35 + "arguments": [ 36 + { 37 37 "kind": "Argument", 38 - "name": Object { 38 + "name": { 39 39 "kind": "Name", 40 40 "value": "user", 41 41 }, 42 - "value": Object { 42 + "value": { 43 43 "kind": "Variable", 44 - "name": Object { 44 + "name": { 45 45 "kind": "Name", 46 46 "value": "user", 47 47 }, 48 48 }, 49 49 }, 50 50 ], 51 - "directives": Array [], 51 + "directives": [], 52 52 "kind": "Field", 53 - "name": Object { 53 + "name": { 54 54 "kind": "Name", 55 55 "value": "user", 56 56 }, 57 - "selectionSet": Object { 57 + "selectionSet": { 58 58 "kind": "SelectionSet", 59 - "selections": Array [ 60 - Object { 59 + "selections": [ 60 + { 61 61 "alias": undefined, 62 - "arguments": Array [], 63 - "directives": Array [], 62 + "arguments": [], 63 + "directives": [], 64 64 "kind": "Field", 65 - "name": Object { 65 + "name": { 66 66 "kind": "Name", 67 67 "value": "name", 68 68 }, ··· 73 73 }, 74 74 ], 75 75 }, 76 - "variableDefinitions": Array [ 77 - Object { 76 + "variableDefinitions": [ 77 + { 78 78 "defaultValue": undefined, 79 - "directives": Array [], 79 + "directives": [], 80 80 "kind": "VariableDefinition", 81 - "type": Object { 81 + "type": { 82 82 "kind": "NamedType", 83 - "name": Object { 83 + "name": { 84 84 "kind": "Name", 85 85 "value": "String", 86 86 }, 87 87 }, 88 - "variable": Object { 88 + "variable": { 89 89 "kind": "Variable", 90 - "name": Object { 90 + "name": { 91 91 "kind": "Name", 92 92 "value": "user", 93 93 }, ··· 97 97 }, 98 98 ], 99 99 "kind": "Document", 100 - "loc": Object { 100 + "loc": { 101 101 "end": 92, 102 - "source": Object { 102 + "source": { 103 103 "body": "# subscribeToUser 104 104 subscription subscribeToUser($user: String) { user(user: $user) { name } }", 105 - "locationOffset": Object { 105 + "locationOffset": { 106 106 "column": 1, 107 107 "line": 1, 108 108 }, ··· 111 111 "start": 0, 112 112 }, 113 113 }, 114 - "variables": Object { 114 + "variables": { 115 115 "user": "colin", 116 116 }, 117 117 },
+5 -5
packages/core/src/exchanges/cache.test.ts
··· 9 9 scan, 10 10 toPromise, 11 11 } from 'wonka'; 12 + import { vi, expect, it, beforeEach, describe } from 'vitest'; 13 + 12 14 import { Client } from '../client'; 13 15 import { 14 16 mutationOperation, ··· 22 24 import { Operation, OperationResult, ExchangeInput } from '../types'; 23 25 import { cacheExchange } from './cache'; 24 26 25 - const reexecuteOperation = jest.fn(); 26 - const dispatchDebug = jest.fn(); 27 + const reexecuteOperation = vi.fn(); 28 + const dispatchDebug = vi.fn(); 27 29 28 30 let response; 29 31 let exchangeArgs: ExchangeInput; 30 32 let forwardedOperations: Operation[]; 31 33 let input: Subject<Operation>; 32 - 33 - beforeEach(jest.clearAllMocks); 34 34 35 35 beforeEach(() => { 36 36 response = queryResponse; ··· 81 81 82 82 it('respects cache-and-network', () => { 83 83 const { source: ops$, next, complete } = input; 84 - const result = jest.fn(); 84 + const result = vi.fn(); 85 85 const exchange = cacheExchange(exchangeArgs)(ops$); 86 86 87 87 pipe(exchange, forEach(result));
+6 -4
packages/core/src/exchanges/compose.test.ts
··· 1 1 import { empty, Source } from 'wonka'; 2 + import { vi, expect, it, beforeEach, describe } from 'vitest'; 3 + 2 4 import { Exchange } from '../types'; 3 5 import { composeExchanges } from './compose'; 4 6 import { noop } from '../utils'; 5 7 6 8 const mockClient = {} as any; 7 9 8 - const forward = jest.fn(); 10 + const forward = vi.fn(); 9 11 const noopExchange: Exchange = ({ forward }) => ops$ => forward(ops$); 10 12 11 13 beforeEach(() => { 12 - jest.spyOn(Date, 'now').mockReturnValue(1234); 14 + vi.spyOn(Date, 'now').mockReturnValue(1234); 13 15 }); 14 16 15 17 it('composes exchanges correctly', () => { ··· 36 38 }; 37 39 38 40 const exchange = composeExchanges([firstExchange, secondExchange]); 39 - const outerFw = jest.fn(() => noopExchange) as any; 41 + const outerFw = vi.fn(() => noopExchange) as any; 40 42 41 43 exchange({ client: mockClient, forward: outerFw, dispatchDebug: noop })( 42 44 empty as Source<any> ··· 47 49 48 50 describe('on dispatchDebug', () => { 49 51 it('dispatches debug event with exchange source name', () => { 50 - const dispatchDebug = jest.fn(); 52 + const dispatchDebug = vi.fn(); 51 53 const debugArgs = { 52 54 type: 'test', 53 55 message: 'Hello',
+5 -1
packages/core/src/exchanges/debug.test.ts
··· 1 1 import { makeSubject, map, pipe, publish, Source, Subject } from 'wonka'; 2 + import { vi, expect, it, beforeEach, describe, afterEach } from 'vitest'; 3 + 2 4 import { Client } from '../client'; 3 5 import { queryOperation, queryResponse } from '../test-utils'; 4 6 import { Operation } from '../types'; ··· 27 29 }); 28 30 29 31 it('forwards query operations correctly', async () => { 30 - jest.spyOn(global.console, 'log').mockImplementation(); 32 + vi.spyOn(global.console, 'log').mockImplementation(() => { 33 + /** Do NOthing */ 34 + }); 31 35 const { source: ops$, next, complete } = input; 32 36 const exchange = debugExchange(exchangeArgs)(ops$); 33 37
+3 -1
packages/core/src/exchanges/dedup.test.ts
··· 7 7 Source, 8 8 Subject, 9 9 } from 'wonka'; 10 + import { vi, expect, it, beforeEach } from 'vitest'; 11 + 10 12 import { 11 13 mutationOperation, 12 14 queryOperation, ··· 16 18 import { dedupExchange } from './dedup'; 17 19 import { makeOperation } from '../utils'; 18 20 19 - const dispatchDebug = jest.fn(); 21 + const dispatchDebug = vi.fn(); 20 22 let shouldRespond = false; 21 23 let exchangeArgs; 22 24 let forwardedOperations: Operation[];
+5 -3
packages/core/src/exchanges/error.test.ts
··· 1 1 import { makeSubject, map, pipe, publish, Subject } from 'wonka'; 2 + import { vi, expect, it, beforeEach } from 'vitest'; 3 + 2 4 import { Client } from '../client'; 3 5 import { queryOperation } from '../test-utils'; 4 6 import { makeErrorResult, CombinedError } from '../utils'; ··· 13 15 }); 14 16 15 17 it('does not trigger when there are no errors', async () => { 16 - const onError = jest.fn(); 18 + const onError = vi.fn(); 17 19 const { source: ops$, next, complete } = input; 18 20 const exchangeArgs = { 19 21 forward: op$ => ··· 33 35 }); 34 36 35 37 it('triggers correctly when the operations has an error', async () => { 36 - const onError = jest.fn(); 38 + const onError = vi.fn(); 37 39 const { source: ops$, next, complete } = input; 38 40 const exchangeArgs = { 39 41 forward: op$ => ··· 57 59 }); 58 60 59 61 it('triggers correctly multiple times the operations has an error', async () => { 60 - const onError = jest.fn(); 62 + const onError = vi.fn(); 61 63 const { source: ops$, next, complete } = input; 62 64 63 65 const firstQuery = {
+4 -2
packages/core/src/exchanges/fallback.test.ts
··· 1 1 import { forEach, fromValue, pipe } from 'wonka'; 2 + import { vi, expect, it, beforeEach, afterAll } from 'vitest'; 3 + 2 4 import { queryOperation, teardownOperation } from '../test-utils'; 3 5 import { fallbackExchange } from './fallback'; 4 6 5 7 const consoleWarn = console.warn; 6 8 7 - const dispatchDebug = jest.fn(); 9 + const dispatchDebug = vi.fn(); 8 10 9 11 beforeEach(() => { 10 - console.warn = jest.fn(); 12 + console.warn = vi.fn(); 11 13 }); 12 14 13 15 afterAll(() => {
+23 -9
packages/core/src/exchanges/fetch.test.ts
··· 1 1 import { empty, fromValue, pipe, Source, subscribe, toPromise } from 'wonka'; 2 + import { 3 + vi, 4 + expect, 5 + it, 6 + beforeEach, 7 + describe, 8 + beforeAll, 9 + Mock, 10 + afterEach, 11 + afterAll, 12 + } from 'vitest'; 2 13 3 14 import { Client } from '../client'; 4 15 import { makeOperation } from '../utils'; ··· 6 17 import { OperationResult } from '../types'; 7 18 import { fetchExchange } from './fetch'; 8 19 9 - const fetch = (global as any).fetch as jest.Mock; 10 - const abort = jest.fn(); 20 + const fetch = (global as any).fetch as Mock; 21 + const abort = vi.fn(); 11 22 12 23 const abortError = new Error(); 13 24 abortError.name = 'AbortError'; ··· 38 49 }); 39 50 40 51 const exchangeArgs = { 41 - dispatchDebug: jest.fn(), 52 + dispatchDebug: vi.fn(), 42 53 forward: () => empty as Source<OperationResult>, 43 54 client: ({ 44 55 debugTarget: { 45 - dispatchEvent: jest.fn(), 56 + dispatchEvent: vi.fn(), 46 57 }, 47 58 } as any) as Client, 48 59 }; ··· 51 62 beforeEach(() => { 52 63 fetch.mockResolvedValue({ 53 64 status: 200, 54 - text: jest.fn().mockResolvedValue(response), 65 + text: vi.fn().mockResolvedValue(response), 55 66 }); 56 67 }); 57 68 58 69 it('returns response data', async () => { 59 - const fetchOptions = jest.fn().mockReturnValue({}); 70 + const fetchOptions = vi.fn().mockReturnValue({}); 60 71 61 72 const data = await pipe( 62 73 fromValue({ ··· 80 91 beforeEach(() => { 81 92 fetch.mockResolvedValue({ 82 93 status: 400, 83 - text: jest.fn().mockResolvedValue(JSON.stringify({})), 94 + text: vi.fn().mockResolvedValue(JSON.stringify({})), 84 95 }); 85 96 }); 86 97 ··· 95 106 }); 96 107 97 108 it('returns error data with status 400 and manual redirect mode', async () => { 98 - const fetchOptions = jest.fn().mockReturnValue({ redirect: 'manual' }); 109 + const fetchOptions = vi.fn().mockReturnValue({ redirect: 'manual' }); 99 110 100 111 const data = await pipe( 101 112 fromValue({ ··· 115 126 it('ignores the error when a result is available', async () => { 116 127 fetch.mockResolvedValue({ 117 128 status: 400, 118 - text: jest.fn().mockResolvedValue(response), 129 + text: vi.fn().mockResolvedValue(response), 119 130 }); 120 131 121 132 const data = await pipe( ··· 129 140 }); 130 141 131 142 describe('on teardown', () => { 143 + const fail = () => { 144 + expect(true).toEqual(false); 145 + }; 132 146 it('does not start the outgoing request on immediate teardowns', () => { 133 147 fetch.mockRejectedValueOnce(abortError); 134 148
+6 -5
packages/core/src/exchanges/ssr.test.ts
··· 1 1 import { makeSubject, pipe, map, publish, forEach, Subject } from 'wonka'; 2 + import { vi, expect, it, beforeEach, afterEach } from 'vitest'; 2 3 3 4 import { Client } from '../client'; 4 5 import { queryOperation, queryResponse } from '../test-utils'; ··· 19 20 20 21 beforeEach(() => { 21 22 input = makeSubject<Operation>(); 22 - output = jest.fn(operation => ({ operation })); 23 + output = vi.fn(operation => ({ operation })); 23 24 forward = ops$ => pipe(ops$, map(output)); 24 25 client = { suspense: true } as any; 25 26 exchangeInput = { forward, client }; ··· 180 181 }); 181 182 182 183 it('resolves cached query results correctly', () => { 183 - const onPush = jest.fn(); 184 + const onPush = vi.fn(); 184 185 185 186 const ssr = ssrExchange({ 186 187 initialState: { [queryOperation.key]: serializedQueryResponse as any }, ··· 199 200 }); 200 201 201 202 it('resolves deferred, cached query results correctly', () => { 202 - const onPush = jest.fn(); 203 + const onPush = vi.fn(); 203 204 204 205 const ssr = ssrExchange({ 205 206 isClient: true, ··· 226 227 227 228 it('deletes cached results in non-suspense environments', async () => { 228 229 client.suspense = false; 229 - const onPush = jest.fn(); 230 + const onPush = vi.fn(); 230 231 const ssr = ssrExchange(); 231 232 232 233 ssr.restoreData({ [queryOperation.key]: serializedQueryResponse as any }); ··· 250 251 it('never allows restoration of invalidated results', async () => { 251 252 client.suspense = false; 252 253 253 - const onPush = jest.fn(); 254 + const onPush = vi.fn(); 254 255 const initialState = { [queryOperation.key]: serializedQueryResponse as any }; 255 256 256 257 const ssr = ssrExchange({
+10 -8
packages/core/src/exchanges/subscription.test.ts
··· 1 1 import { print } from 'graphql'; 2 + import { vi, expect, it } from 'vitest'; 2 3 import { 3 4 empty, 4 5 publish, ··· 8 9 take, 9 10 toPromise, 10 11 } from 'wonka'; 12 + 11 13 import { Client } from '../client'; 12 14 import { subscriptionOperation, subscriptionResult } from '../test-utils'; 13 15 import { OperationResult } from '../types'; ··· 15 17 16 18 it('should return response data from forwardSubscription observable', async () => { 17 19 const exchangeArgs = { 18 - dispatchDebug: jest.fn(), 20 + dispatchDebug: vi.fn(), 19 21 forward: () => empty as Source<OperationResult>, 20 22 client: {} as Client, 21 23 }; 22 24 23 - const unsubscribe = jest.fn(); 25 + const unsubscribe = vi.fn(); 24 26 const forwardSubscription: SubscriptionForwarder = operation => { 25 27 expect(operation.query).toBe(print(subscriptionOperation.query)); 26 28 expect(operation.variables).toBe(subscriptionOperation.variables); ··· 49 51 }); 50 52 51 53 it('should tear down the operation if the source subscription ends', async () => { 52 - const reexecuteOperation = jest.fn(); 53 - const unsubscribe = jest.fn(); 54 + const reexecuteOperation = vi.fn(); 55 + const unsubscribe = vi.fn(); 54 56 55 57 const exchangeArgs = { 56 - dispatchDebug: jest.fn(), 58 + dispatchDebug: vi.fn(), 57 59 forward: () => empty as Source<OperationResult>, 58 60 client: { reexecuteOperation: reexecuteOperation as any } as Client, 59 61 }; ··· 79 81 80 82 it('should allow providing a custom isSubscriptionOperation implementation', async () => { 81 83 const exchangeArgs = { 82 - dispatchDebug: jest.fn(), 84 + dispatchDebug: vi.fn(), 83 85 forward: () => empty as Source<OperationResult>, 84 86 client: {} as Client, 85 87 }; 86 88 87 - const isSubscriptionOperation = jest.fn(() => true); 89 + const isSubscriptionOperation = vi.fn(() => true); 88 90 89 91 const forwardSubscription: SubscriptionForwarder = () => ({ 90 92 subscribe(observer) { 91 93 observer.next(subscriptionResult); 92 - return { unsubscribe: jest.fn() }; 94 + return { unsubscribe: vi.fn() }; 93 95 }, 94 96 }); 95 97
+4 -2
packages/core/src/gql.test.ts
··· 1 1 import { parse, print } from 'graphql'; 2 + import { vi, expect, it, beforeEach, SpyInstance } from 'vitest'; 3 + 2 4 import { gql } from './gql'; 3 5 import { keyDocument } from './utils'; 4 6 5 - let warn: jest.SpyInstance; 7 + let warn: SpyInstance; 6 8 7 9 beforeEach(() => { 8 - warn = jest.spyOn(console, 'warn'); 10 + warn = vi.spyOn(console, 'warn'); 9 11 warn.mockClear(); 10 12 }); 11 13
+250 -237
packages/core/src/internal/__snapshots__/fetchSource.test.ts.snap
··· 1 - // Jest Snapshot v1, https://goo.gl/fbAQLP 1 + // Vitest Snapshot v1 2 2 3 - exports[`on error ignores the error when a result is available 1`] = ` 4 - Object { 3 + exports[`on error > ignores the error when a result is available 1`] = ` 4 + { 5 5 "data": undefined, 6 6 "error": [CombinedError: [Network] Forbidden], 7 7 "extensions": undefined, 8 - "operation": Object { 9 - "context": Object { 10 - "fetchOptions": Object { 8 + "operation": { 9 + "context": { 10 + "fetchOptions": { 11 11 "method": "POST", 12 12 }, 13 13 "requestPolicy": "cache-first", ··· 15 15 }, 16 16 "key": 2, 17 17 "kind": "query", 18 - "query": Object { 18 + "query": { 19 19 "__key": 3521976120, 20 - "definitions": Array [ 21 - Object { 22 - "directives": Array [], 20 + "definitions": [ 21 + { 22 + "directives": [], 23 23 "kind": "OperationDefinition", 24 - "name": Object { 24 + "name": { 25 25 "kind": "Name", 26 26 "value": "getUser", 27 27 }, 28 28 "operation": "query", 29 - "selectionSet": Object { 29 + "selectionSet": { 30 30 "kind": "SelectionSet", 31 - "selections": Array [ 32 - Object { 31 + "selections": [ 32 + { 33 33 "alias": undefined, 34 - "arguments": Array [ 35 - Object { 34 + "arguments": [ 35 + { 36 36 "kind": "Argument", 37 - "name": Object { 37 + "name": { 38 38 "kind": "Name", 39 39 "value": "name", 40 40 }, 41 - "value": Object { 41 + "value": { 42 42 "kind": "Variable", 43 - "name": Object { 43 + "name": { 44 44 "kind": "Name", 45 45 "value": "name", 46 46 }, 47 47 }, 48 48 }, 49 49 ], 50 - "directives": Array [], 50 + "directives": [], 51 51 "kind": "Field", 52 - "name": Object { 52 + "name": { 53 53 "kind": "Name", 54 54 "value": "user", 55 55 }, 56 - "selectionSet": Object { 56 + "selectionSet": { 57 57 "kind": "SelectionSet", 58 - "selections": Array [ 59 - Object { 58 + "selections": [ 59 + { 60 60 "alias": undefined, 61 - "arguments": Array [], 62 - "directives": Array [], 61 + "arguments": [], 62 + "directives": [], 63 63 "kind": "Field", 64 - "name": Object { 64 + "name": { 65 65 "kind": "Name", 66 66 "value": "id", 67 67 }, 68 68 "selectionSet": undefined, 69 69 }, 70 - Object { 70 + { 71 71 "alias": undefined, 72 - "arguments": Array [], 73 - "directives": Array [], 72 + "arguments": [], 73 + "directives": [], 74 74 "kind": "Field", 75 - "name": Object { 75 + "name": { 76 76 "kind": "Name", 77 77 "value": "firstName", 78 78 }, 79 79 "selectionSet": undefined, 80 80 }, 81 - Object { 81 + { 82 82 "alias": undefined, 83 - "arguments": Array [], 84 - "directives": Array [], 83 + "arguments": [], 84 + "directives": [], 85 85 "kind": "Field", 86 - "name": Object { 86 + "name": { 87 87 "kind": "Name", 88 88 "value": "lastName", 89 89 }, ··· 94 94 }, 95 95 ], 96 96 }, 97 - "variableDefinitions": Array [ 98 - Object { 97 + "variableDefinitions": [ 98 + { 99 99 "defaultValue": undefined, 100 - "directives": Array [], 100 + "directives": [], 101 101 "kind": "VariableDefinition", 102 - "type": Object { 102 + "type": { 103 103 "kind": "NamedType", 104 - "name": Object { 104 + "name": { 105 105 "kind": "Name", 106 106 "value": "String", 107 107 }, 108 108 }, 109 - "variable": Object { 109 + "variable": { 110 110 "kind": "Variable", 111 - "name": Object { 111 + "name": { 112 112 "kind": "Name", 113 113 "value": "name", 114 114 }, ··· 118 118 }, 119 119 ], 120 120 "kind": "Document", 121 - "loc": Object { 121 + "loc": { 122 122 "end": 86, 123 - "source": Object { 123 + "source": { 124 124 "body": "# getUser 125 125 query getUser($name: String) { user(name: $name) { id firstName lastName } }", 126 - "locationOffset": Object { 126 + "locationOffset": { 127 127 "column": 1, 128 128 "line": 1, 129 129 }, ··· 132 132 "start": 0, 133 133 }, 134 134 }, 135 - "variables": Object { 135 + "variables": { 136 136 "name": "Clara", 137 137 }, 138 138 }, 139 139 } 140 140 `; 141 141 142 - exports[`on error returns error data 1`] = ` 143 - Object { 142 + exports[`on error > returns error data 1`] = ` 143 + { 144 144 "data": undefined, 145 145 "error": [CombinedError: [Network] Forbidden], 146 146 "extensions": undefined, 147 - "operation": Object { 148 - "context": Object { 149 - "fetchOptions": Object { 147 + "operation": { 148 + "context": { 149 + "fetchOptions": { 150 150 "method": "POST", 151 151 }, 152 152 "requestPolicy": "cache-first", ··· 154 154 }, 155 155 "key": 2, 156 156 "kind": "query", 157 - "query": Object { 157 + "query": { 158 158 "__key": 3521976120, 159 - "definitions": Array [ 160 - Object { 161 - "directives": Array [], 159 + "definitions": [ 160 + { 161 + "directives": [], 162 162 "kind": "OperationDefinition", 163 - "name": Object { 163 + "name": { 164 164 "kind": "Name", 165 165 "value": "getUser", 166 166 }, 167 167 "operation": "query", 168 - "selectionSet": Object { 168 + "selectionSet": { 169 169 "kind": "SelectionSet", 170 - "selections": Array [ 171 - Object { 170 + "selections": [ 171 + { 172 172 "alias": undefined, 173 - "arguments": Array [ 174 - Object { 173 + "arguments": [ 174 + { 175 175 "kind": "Argument", 176 - "name": Object { 176 + "name": { 177 177 "kind": "Name", 178 178 "value": "name", 179 179 }, 180 - "value": Object { 180 + "value": { 181 181 "kind": "Variable", 182 - "name": Object { 182 + "name": { 183 183 "kind": "Name", 184 184 "value": "name", 185 185 }, 186 186 }, 187 187 }, 188 188 ], 189 - "directives": Array [], 189 + "directives": [], 190 190 "kind": "Field", 191 - "name": Object { 191 + "name": { 192 192 "kind": "Name", 193 193 "value": "user", 194 194 }, 195 - "selectionSet": Object { 195 + "selectionSet": { 196 196 "kind": "SelectionSet", 197 - "selections": Array [ 198 - Object { 197 + "selections": [ 198 + { 199 199 "alias": undefined, 200 - "arguments": Array [], 201 - "directives": Array [], 200 + "arguments": [], 201 + "directives": [], 202 202 "kind": "Field", 203 - "name": Object { 203 + "name": { 204 204 "kind": "Name", 205 205 "value": "id", 206 206 }, 207 207 "selectionSet": undefined, 208 208 }, 209 - Object { 209 + { 210 210 "alias": undefined, 211 - "arguments": Array [], 212 - "directives": Array [], 211 + "arguments": [], 212 + "directives": [], 213 213 "kind": "Field", 214 - "name": Object { 214 + "name": { 215 215 "kind": "Name", 216 216 "value": "firstName", 217 217 }, 218 218 "selectionSet": undefined, 219 219 }, 220 - Object { 220 + { 221 221 "alias": undefined, 222 - "arguments": Array [], 223 - "directives": Array [], 222 + "arguments": [], 223 + "directives": [], 224 224 "kind": "Field", 225 - "name": Object { 225 + "name": { 226 226 "kind": "Name", 227 227 "value": "lastName", 228 228 }, ··· 233 233 }, 234 234 ], 235 235 }, 236 - "variableDefinitions": Array [ 237 - Object { 236 + "variableDefinitions": [ 237 + { 238 238 "defaultValue": undefined, 239 - "directives": Array [], 239 + "directives": [], 240 240 "kind": "VariableDefinition", 241 - "type": Object { 241 + "type": { 242 242 "kind": "NamedType", 243 - "name": Object { 243 + "name": { 244 244 "kind": "Name", 245 245 "value": "String", 246 246 }, 247 247 }, 248 - "variable": Object { 248 + "variable": { 249 249 "kind": "Variable", 250 - "name": Object { 250 + "name": { 251 251 "kind": "Name", 252 252 "value": "name", 253 253 }, ··· 257 257 }, 258 258 ], 259 259 "kind": "Document", 260 - "loc": Object { 260 + "loc": { 261 261 "end": 86, 262 - "source": Object { 262 + "source": { 263 263 "body": "# getUser 264 264 query getUser($name: String) { user(name: $name) { id firstName lastName } }", 265 - "locationOffset": Object { 265 + "locationOffset": { 266 266 "column": 1, 267 267 "line": 1, 268 268 }, ··· 271 271 "start": 0, 272 272 }, 273 273 }, 274 - "variables": Object { 274 + "variables": { 275 275 "name": "Clara", 276 276 }, 277 277 }, 278 278 } 279 279 `; 280 280 281 - exports[`on error returns error data with status 400 and manual redirect mode 1`] = ` 282 - Object { 281 + exports[`on error > returns error data with status 400 and manual redirect mode 1`] = ` 282 + { 283 283 "data": undefined, 284 284 "error": [CombinedError: [Network] Forbidden], 285 285 "extensions": undefined, 286 - "operation": Object { 287 - "context": Object { 288 - "fetchOptions": Object { 286 + "operation": { 287 + "context": { 288 + "fetchOptions": { 289 289 "method": "POST", 290 290 }, 291 291 "requestPolicy": "cache-first", ··· 293 293 }, 294 294 "key": 2, 295 295 "kind": "query", 296 - "query": Object { 296 + "query": { 297 297 "__key": 3521976120, 298 - "definitions": Array [ 299 - Object { 300 - "directives": Array [], 298 + "definitions": [ 299 + { 300 + "directives": [], 301 301 "kind": "OperationDefinition", 302 - "name": Object { 302 + "name": { 303 303 "kind": "Name", 304 304 "value": "getUser", 305 305 }, 306 306 "operation": "query", 307 - "selectionSet": Object { 307 + "selectionSet": { 308 308 "kind": "SelectionSet", 309 - "selections": Array [ 310 - Object { 309 + "selections": [ 310 + { 311 311 "alias": undefined, 312 - "arguments": Array [ 313 - Object { 312 + "arguments": [ 313 + { 314 314 "kind": "Argument", 315 - "name": Object { 315 + "name": { 316 316 "kind": "Name", 317 317 "value": "name", 318 318 }, 319 - "value": Object { 319 + "value": { 320 320 "kind": "Variable", 321 - "name": Object { 321 + "name": { 322 322 "kind": "Name", 323 323 "value": "name", 324 324 }, 325 325 }, 326 326 }, 327 327 ], 328 - "directives": Array [], 328 + "directives": [], 329 329 "kind": "Field", 330 - "name": Object { 330 + "name": { 331 331 "kind": "Name", 332 332 "value": "user", 333 333 }, 334 - "selectionSet": Object { 334 + "selectionSet": { 335 335 "kind": "SelectionSet", 336 - "selections": Array [ 337 - Object { 336 + "selections": [ 337 + { 338 338 "alias": undefined, 339 - "arguments": Array [], 340 - "directives": Array [], 339 + "arguments": [], 340 + "directives": [], 341 341 "kind": "Field", 342 - "name": Object { 342 + "name": { 343 343 "kind": "Name", 344 344 "value": "id", 345 345 }, 346 346 "selectionSet": undefined, 347 347 }, 348 - Object { 348 + { 349 349 "alias": undefined, 350 - "arguments": Array [], 351 - "directives": Array [], 350 + "arguments": [], 351 + "directives": [], 352 352 "kind": "Field", 353 - "name": Object { 353 + "name": { 354 354 "kind": "Name", 355 355 "value": "firstName", 356 356 }, 357 357 "selectionSet": undefined, 358 358 }, 359 - Object { 359 + { 360 360 "alias": undefined, 361 - "arguments": Array [], 362 - "directives": Array [], 361 + "arguments": [], 362 + "directives": [], 363 363 "kind": "Field", 364 - "name": Object { 364 + "name": { 365 365 "kind": "Name", 366 366 "value": "lastName", 367 367 }, ··· 372 372 }, 373 373 ], 374 374 }, 375 - "variableDefinitions": Array [ 376 - Object { 375 + "variableDefinitions": [ 376 + { 377 377 "defaultValue": undefined, 378 - "directives": Array [], 378 + "directives": [], 379 379 "kind": "VariableDefinition", 380 - "type": Object { 380 + "type": { 381 381 "kind": "NamedType", 382 - "name": Object { 382 + "name": { 383 383 "kind": "Name", 384 384 "value": "String", 385 385 }, 386 386 }, 387 - "variable": Object { 387 + "variable": { 388 388 "kind": "Variable", 389 - "name": Object { 389 + "name": { 390 390 "kind": "Name", 391 391 "value": "name", 392 392 }, ··· 396 396 }, 397 397 ], 398 398 "kind": "Document", 399 - "loc": Object { 399 + "loc": { 400 400 "end": 86, 401 - "source": Object { 401 + "source": { 402 402 "body": "# getUser 403 403 query getUser($name: String) { user(name: $name) { id firstName lastName } }", 404 - "locationOffset": Object { 404 + "locationOffset": { 405 405 "column": 1, 406 406 "line": 1, 407 407 }, ··· 410 410 "start": 0, 411 411 }, 412 412 }, 413 - "variables": Object { 413 + "variables": { 414 414 "name": "Clara", 415 415 }, 416 416 }, 417 417 } 418 418 `; 419 419 420 - exports[`on success returns response data 1`] = ` 421 - Object { 422 - "data": Object { 423 - "data": Object { 420 + exports[`on success > returns response data 1`] = ` 421 + { 422 + "data": { 423 + "data": { 424 424 "user": 1200, 425 425 }, 426 426 }, 427 427 "error": undefined, 428 428 "extensions": undefined, 429 429 "hasNext": false, 430 - "operation": Object { 431 - "context": Object { 432 - "fetchOptions": Object { 430 + "operation": { 431 + "context": { 432 + "fetchOptions": { 433 433 "method": "POST", 434 434 }, 435 435 "requestPolicy": "cache-first", ··· 437 437 }, 438 438 "key": 2, 439 439 "kind": "query", 440 - "query": Object { 440 + "query": { 441 441 "__key": 3521976120, 442 - "definitions": Array [ 443 - Object { 444 - "directives": Array [], 442 + "definitions": [ 443 + { 444 + "directives": [], 445 445 "kind": "OperationDefinition", 446 - "name": Object { 446 + "name": { 447 447 "kind": "Name", 448 448 "value": "getUser", 449 449 }, 450 450 "operation": "query", 451 - "selectionSet": Object { 451 + "selectionSet": { 452 452 "kind": "SelectionSet", 453 - "selections": Array [ 454 - Object { 453 + "selections": [ 454 + { 455 455 "alias": undefined, 456 - "arguments": Array [ 457 - Object { 456 + "arguments": [ 457 + { 458 458 "kind": "Argument", 459 - "name": Object { 459 + "name": { 460 460 "kind": "Name", 461 461 "value": "name", 462 462 }, 463 - "value": Object { 463 + "value": { 464 464 "kind": "Variable", 465 - "name": Object { 465 + "name": { 466 466 "kind": "Name", 467 467 "value": "name", 468 468 }, 469 469 }, 470 470 }, 471 471 ], 472 - "directives": Array [], 472 + "directives": [], 473 473 "kind": "Field", 474 - "name": Object { 474 + "name": { 475 475 "kind": "Name", 476 476 "value": "user", 477 477 }, 478 - "selectionSet": Object { 478 + "selectionSet": { 479 479 "kind": "SelectionSet", 480 - "selections": Array [ 481 - Object { 480 + "selections": [ 481 + { 482 482 "alias": undefined, 483 - "arguments": Array [], 484 - "directives": Array [], 483 + "arguments": [], 484 + "directives": [], 485 485 "kind": "Field", 486 - "name": Object { 486 + "name": { 487 487 "kind": "Name", 488 488 "value": "id", 489 489 }, 490 490 "selectionSet": undefined, 491 491 }, 492 - Object { 492 + { 493 493 "alias": undefined, 494 - "arguments": Array [], 495 - "directives": Array [], 494 + "arguments": [], 495 + "directives": [], 496 496 "kind": "Field", 497 - "name": Object { 497 + "name": { 498 498 "kind": "Name", 499 499 "value": "firstName", 500 500 }, 501 501 "selectionSet": undefined, 502 502 }, 503 - Object { 503 + { 504 504 "alias": undefined, 505 - "arguments": Array [], 506 - "directives": Array [], 505 + "arguments": [], 506 + "directives": [], 507 507 "kind": "Field", 508 - "name": Object { 508 + "name": { 509 509 "kind": "Name", 510 510 "value": "lastName", 511 511 }, ··· 516 516 }, 517 517 ], 518 518 }, 519 - "variableDefinitions": Array [ 520 - Object { 519 + "variableDefinitions": [ 520 + { 521 521 "defaultValue": undefined, 522 - "directives": Array [], 522 + "directives": [], 523 523 "kind": "VariableDefinition", 524 - "type": Object { 524 + "type": { 525 525 "kind": "NamedType", 526 - "name": Object { 526 + "name": { 527 527 "kind": "Name", 528 528 "value": "String", 529 529 }, 530 530 }, 531 - "variable": Object { 531 + "variable": { 532 532 "kind": "Variable", 533 - "name": Object { 533 + "name": { 534 534 "kind": "Name", 535 535 "value": "name", 536 536 }, ··· 540 540 }, 541 541 ], 542 542 "kind": "Document", 543 - "loc": Object { 543 + "loc": { 544 544 "end": 86, 545 - "source": Object { 545 + "source": { 546 546 "body": "# getUser 547 547 query getUser($name: String) { user(name: $name) { id firstName lastName } }", 548 - "locationOffset": Object { 548 + "locationOffset": { 549 549 "column": 1, 550 550 "line": 1, 551 551 }, ··· 554 554 "start": 0, 555 555 }, 556 556 }, 557 - "variables": Object { 557 + "variables": { 558 558 "name": "Clara", 559 559 }, 560 560 }, 561 561 } 562 562 `; 563 563 564 - exports[`on success uses the mock fetch if given 1`] = ` 565 - Object { 566 - "data": Object { 567 - "data": Object { 564 + exports[`on success > uses the mock fetch if given 1`] = ` 565 + { 566 + "data": { 567 + "data": { 568 568 "user": 1200, 569 569 }, 570 570 }, 571 571 "error": undefined, 572 572 "extensions": undefined, 573 573 "hasNext": false, 574 - "operation": Object { 575 - "context": Object { 576 - "fetch": [MockFunction] { 577 - "calls": Array [ 578 - Array [ 574 + "operation": { 575 + "context": { 576 + "fetch": [MockFunction spy] { 577 + "calls": [ 578 + [ 579 579 "https://test.com/graphql", 580 - Object { 580 + { 581 581 "signal": undefined, 582 582 }, 583 583 ], 584 584 ], 585 - "results": Array [ 586 - Object { 585 + "results": [ 586 + { 587 587 "type": "return", 588 - "value": Promise {}, 588 + "value": { 589 + "status": 200, 590 + "text": [MockFunction spy] { 591 + "calls": [ 592 + [], 593 + ], 594 + "results": [ 595 + { 596 + "type": "return", 597 + "value": "{\\"status\\":200,\\"data\\":{\\"data\\":{\\"user\\":1200}}}", 598 + }, 599 + ], 600 + }, 601 + }, 589 602 }, 590 603 ], 591 604 }, 592 - "fetchOptions": Object { 605 + "fetchOptions": { 593 606 "method": "POST", 594 607 }, 595 608 "requestPolicy": "cache-first", ··· 597 610 }, 598 611 "key": 2, 599 612 "kind": "query", 600 - "query": Object { 613 + "query": { 601 614 "__key": 3521976120, 602 - "definitions": Array [ 603 - Object { 604 - "directives": Array [], 615 + "definitions": [ 616 + { 617 + "directives": [], 605 618 "kind": "OperationDefinition", 606 - "name": Object { 619 + "name": { 607 620 "kind": "Name", 608 621 "value": "getUser", 609 622 }, 610 623 "operation": "query", 611 - "selectionSet": Object { 624 + "selectionSet": { 612 625 "kind": "SelectionSet", 613 - "selections": Array [ 614 - Object { 626 + "selections": [ 627 + { 615 628 "alias": undefined, 616 - "arguments": Array [ 617 - Object { 629 + "arguments": [ 630 + { 618 631 "kind": "Argument", 619 - "name": Object { 632 + "name": { 620 633 "kind": "Name", 621 634 "value": "name", 622 635 }, 623 - "value": Object { 636 + "value": { 624 637 "kind": "Variable", 625 - "name": Object { 638 + "name": { 626 639 "kind": "Name", 627 640 "value": "name", 628 641 }, 629 642 }, 630 643 }, 631 644 ], 632 - "directives": Array [], 645 + "directives": [], 633 646 "kind": "Field", 634 - "name": Object { 647 + "name": { 635 648 "kind": "Name", 636 649 "value": "user", 637 650 }, 638 - "selectionSet": Object { 651 + "selectionSet": { 639 652 "kind": "SelectionSet", 640 - "selections": Array [ 641 - Object { 653 + "selections": [ 654 + { 642 655 "alias": undefined, 643 - "arguments": Array [], 644 - "directives": Array [], 656 + "arguments": [], 657 + "directives": [], 645 658 "kind": "Field", 646 - "name": Object { 659 + "name": { 647 660 "kind": "Name", 648 661 "value": "id", 649 662 }, 650 663 "selectionSet": undefined, 651 664 }, 652 - Object { 665 + { 653 666 "alias": undefined, 654 - "arguments": Array [], 655 - "directives": Array [], 667 + "arguments": [], 668 + "directives": [], 656 669 "kind": "Field", 657 - "name": Object { 670 + "name": { 658 671 "kind": "Name", 659 672 "value": "firstName", 660 673 }, 661 674 "selectionSet": undefined, 662 675 }, 663 - Object { 676 + { 664 677 "alias": undefined, 665 - "arguments": Array [], 666 - "directives": Array [], 678 + "arguments": [], 679 + "directives": [], 667 680 "kind": "Field", 668 - "name": Object { 681 + "name": { 669 682 "kind": "Name", 670 683 "value": "lastName", 671 684 }, ··· 676 689 }, 677 690 ], 678 691 }, 679 - "variableDefinitions": Array [ 680 - Object { 692 + "variableDefinitions": [ 693 + { 681 694 "defaultValue": undefined, 682 - "directives": Array [], 695 + "directives": [], 683 696 "kind": "VariableDefinition", 684 - "type": Object { 697 + "type": { 685 698 "kind": "NamedType", 686 - "name": Object { 699 + "name": { 687 700 "kind": "Name", 688 701 "value": "String", 689 702 }, 690 703 }, 691 - "variable": Object { 704 + "variable": { 692 705 "kind": "Variable", 693 - "name": Object { 706 + "name": { 694 707 "kind": "Name", 695 708 "value": "name", 696 709 }, ··· 700 713 }, 701 714 ], 702 715 "kind": "Document", 703 - "loc": Object { 716 + "loc": { 704 717 "end": 86, 705 - "source": Object { 718 + "source": { 706 719 "body": "# getUser 707 720 query getUser($name: String) { user(name: $name) { id firstName lastName } }", 708 - "locationOffset": Object { 721 + "locationOffset": { 709 722 "column": 1, 710 723 "line": 1, 711 724 }, ··· 714 727 "start": 0, 715 728 }, 716 729 }, 717 - "variables": Object { 730 + "variables": { 718 731 "name": "Clara", 719 732 }, 720 733 },
+21 -7
packages/core/src/internal/fetchSource.test.ts
··· 1 1 import { pipe, scan, subscribe, toPromise } from 'wonka'; 2 + import { 3 + vi, 4 + expect, 5 + it, 6 + beforeEach, 7 + describe, 8 + beforeAll, 9 + Mock, 10 + afterAll, 11 + } from 'vitest'; 2 12 3 13 import { queryOperation, context } from '../test-utils'; 4 14 import { makeFetchSource } from './fetchSource'; ··· 6 16 import { OperationResult, Operation } from '../types'; 7 17 import { makeOperation } from '../utils'; 8 18 9 - const fetch = (global as any).fetch as jest.Mock; 10 - const abort = jest.fn(); 19 + const fetch = (global as any).fetch as Mock; 20 + const abort = vi.fn(); 11 21 12 22 const abortError = new Error(); 13 23 abortError.name = 'AbortError'; ··· 41 51 beforeEach(() => { 42 52 fetch.mockResolvedValue({ 43 53 status: 200, 44 - text: jest.fn().mockResolvedValue(response), 54 + text: vi.fn().mockResolvedValue(response), 45 55 }); 46 56 }); 47 57 ··· 61 71 62 72 it('uses the mock fetch if given', async () => { 63 73 const fetchOptions = {}; 64 - const fetcher = jest.fn().mockResolvedValue({ 74 + const fetcher = vi.fn().mockResolvedValue({ 65 75 status: 200, 66 - text: jest.fn().mockResolvedValue(response), 76 + text: vi.fn().mockResolvedValue(response), 67 77 }); 68 78 69 79 const data = await pipe( ··· 92 102 fetch.mockResolvedValue({ 93 103 status: 400, 94 104 statusText: 'Forbidden', 95 - text: jest.fn().mockResolvedValue('{}'), 105 + text: vi.fn().mockResolvedValue('{}'), 96 106 }); 97 107 }); 98 108 ··· 132 142 fetch.mockResolvedValue({ 133 143 status: 200, 134 144 headers: new Map([['Content-Type', 'text/plain']]), 135 - text: jest.fn().mockResolvedValue('Some Error Message'), 145 + text: vi.fn().mockResolvedValue('Some Error Message'), 136 146 }); 137 147 }); 138 148 ··· 150 160 }); 151 161 152 162 describe('on teardown', () => { 163 + const fail = () => { 164 + expect(true).toEqual(false); 165 + }; 166 + 153 167 it('does not start the outgoing request on immediate teardowns', () => { 154 168 fetch.mockRejectedValue(abortError); 155 169
+2 -2
packages/core/src/utils/__snapshots__/error.test.ts.snap
··· 1 - // Jest Snapshot v1, https://goo.gl/fbAQLP 1 + // Vitest Snapshot v1 2 2 3 - exports[`CombinedError behaves like a normal Error 1`] = `"[Network] test"`; 3 + exports[`CombinedError > behaves like a normal Error 1`] = `"[Network] test"`;
+1
packages/core/src/utils/error.test.ts
··· 1 + import { describe, it, expect } from 'vitest'; 1 2 import { CombinedError } from './error'; 2 3 3 4 describe('CombinedError', () => {
+1
packages/core/src/utils/maskTypename.test.ts
··· 1 + import { it, expect } from 'vitest'; 1 2 import { maskTypename } from './maskTypename'; 2 3 3 4 it('strips typename from flat objects', () => {
+10 -5
packages/core/src/utils/request.test.ts
··· 1 + import { vi, expect, it, describe } from 'vitest'; 2 + 3 + vi.mock('./hash', async () => { 4 + const hash = await vi.importActual('./hash'); 5 + return { 6 + ...hash, 7 + phash: (x: number) => x, 8 + }; 9 + }); 10 + 1 11 import { parse, print } from 'graphql'; 2 12 import { gql } from '../gql'; 3 13 import { createRequest, stringifyDocument } from './request'; 4 - 5 - jest.mock('./hash', () => ({ 6 - hash: jest.requireActual('./hash').hash, 7 - phash: (x: number) => x, 8 - })); 9 14 10 15 it('should hash identical queries identically', () => { 11 16 const reqA = createRequest('{ test }');
+1
packages/core/src/utils/result.test.ts
··· 1 + import { describe, it, expect } from 'vitest'; 1 2 import { queryOperation } from '../test-utils'; 2 3 import { makeResult } from './result'; 3 4
+1
packages/core/src/utils/stringifyVariables.test.ts
··· 1 1 import { stringifyVariables } from './stringifyVariables'; 2 + import { it, expect } from 'vitest'; 2 3 3 4 it('stringifies objects stabily', () => { 4 5 expect(stringifyVariables({ b: 'b', a: 'a' })).toBe('{"a":"a","b":"b"}');
+1
packages/core/src/utils/typenames.test.ts
··· 1 1 import { parse, print } from 'graphql'; 2 + import { describe, it, expect } from 'vitest'; 2 3 import { collectTypesFromResponse, formatDocument } from './typenames'; 3 4 import { createRequest } from './request'; 4 5
+1 -4
packages/introspection/package.json
··· 36 36 "dist/" 37 37 ], 38 38 "scripts": { 39 - "test": "jest", 39 + "test": "vitest --config ../../vitest.config.ts", 40 40 "clean": "rimraf dist", 41 41 "check": "tsc --noEmit", 42 42 "lint": "eslint --ext=js,jsx,ts,tsx .", 43 43 "build": "rollup -c ../../scripts/rollup/config.mjs", 44 44 "prepare": "node ../../scripts/prepare/index.js", 45 45 "prepublishOnly": "run-s clean build" 46 - }, 47 - "jest": { 48 - "preset": "../../scripts/jest/preset" 49 46 }, 50 47 "devDependencies": { 51 48 "graphql": "^16.0.0"
+1 -5
packages/next-urql/package.json
··· 22 22 "dist/" 23 23 ], 24 24 "scripts": { 25 - "test": "jest", 25 + "test": "vitest --config ../../vitest.config.ts", 26 26 "clean": "rimraf dist", 27 27 "check": "tsc --noEmit", 28 28 "lint": "eslint --ext=js,jsx,ts,tsx .", 29 29 "build": "rollup -c ../../scripts/rollup/config.mjs", 30 30 "prepare": "node ../../scripts/prepare/index.js", 31 31 "prepublishOnly": "run-s clean build" 32 - }, 33 - "jest": { 34 - "preset": "../../scripts/jest/preset", 35 - "testEnvironment": "node" 36 32 }, 37 33 "devDependencies": { 38 34 "@types/enzyme": "^3.10.3",
-28
packages/next-urql/src/__tests__/init-urql-client.spec.ts
··· 1 - import { Client } from '@urql/core'; 2 - import { initUrqlClient } from '../init-urql-client'; 3 - 4 - describe('initUrqlClient', () => { 5 - it('should return the urqlClient instance (suspense)', () => { 6 - const urqlClient = initUrqlClient( 7 - { 8 - url: 'http://localhost:3000', 9 - }, 10 - true 11 - ); 12 - 13 - expect(urqlClient).toBeInstanceOf(Client); 14 - expect(urqlClient).toHaveProperty('suspense', true); 15 - }); 16 - 17 - it('should return the urqlClient instance (no-suspense)', () => { 18 - const urqlClient = initUrqlClient( 19 - { 20 - url: 'http://localhost:3000', 21 - }, 22 - false 23 - ); 24 - 25 - expect(urqlClient).toBeInstanceOf(Client); 26 - expect(urqlClient).toHaveProperty('suspense', false); 27 - }); 28 - });
+3 -29
packages/next-urql/src/__tests__/with-urql-client.spec.ts
··· 2 2 import { shallow, configure } from 'enzyme'; 3 3 import Adapter from 'enzyme-adapter-react-16'; 4 4 import { Client } from 'urql'; 5 + import { vi, expect, it, beforeEach, describe, beforeAll } from 'vitest'; 5 6 6 7 import { withUrqlClient, NextUrqlPageContext } from '..'; 7 8 import * as init from '../init-urql-client'; 8 - 9 - beforeEach(jest.clearAllMocks); 10 9 11 10 const MockApp: React.FC<any> = () => { 12 11 return h('div'); ··· 17 16 }; 18 17 19 18 describe('withUrqlClient', () => { 20 - const spyInitUrqlClient = jest.spyOn(init, 'initUrqlClient'); 19 + const spyInitUrqlClient = vi.spyOn(init, 'initUrqlClient'); 21 20 let Component: any; 22 21 23 22 beforeAll(() => { ··· 45 44 46 45 expect(app.props().urqlClient).toBeInstanceOf(Client); 47 46 expect(spyInitUrqlClient).toHaveBeenCalledTimes(1); 47 + // @ts-ignore 48 48 expect(spyInitUrqlClient.mock.calls[0][0].exchanges).toHaveLength(4); 49 49 }); 50 50 ··· 133 133 Component.getInitialProps && (await Component.getInitialProps(mockContext)); 134 134 expect(spyInitUrqlClient).toHaveBeenCalledTimes(0); 135 135 expect(Component.getInitialProps).toBeUndefined(); 136 - }); 137 - 138 - describe('with exchanges provided', () => { 139 - const exchange = jest.fn(() => op => op); 140 - 141 - beforeEach(() => { 142 - Component = withUrqlClient(() => ({ 143 - url: 'http://localhost:3000', 144 - exchanges: [exchange] as any[], 145 - }))(MockApp); 146 - }); 147 - 148 - it('uses exchanges defined in the client config', () => { 149 - const tree = shallow(h(Component)); 150 - const app = tree.find(MockApp); 151 - 152 - const client = app.props().urqlClient; 153 - client.query(` 154 - { 155 - users { 156 - id 157 - } 158 - } 159 - `); 160 - expect(exchange).toBeCalledTimes(1); 161 - }); 162 136 }); 163 137 164 138 describe('never-suspend', () => {
+1 -1
packages/next-urql/tsconfig.json
··· 3 3 "include": ["src"], 4 4 "compilerOptions": { 5 5 "baseUrl": "./", 6 - "types": ["node", "jest", "react"], 6 + "types": ["node", "react"], 7 7 "jsx": "react", 8 8 "paths": { 9 9 "urql": ["../../node_modules/urql/src"],
+1 -4
packages/preact-urql/package.json
··· 39 39 "dist/" 40 40 ], 41 41 "scripts": { 42 - "test": "jest", 42 + "test": "vitest --config ../../vitest.config.ts", 43 43 "clean": "rimraf dist", 44 44 "check": "tsc --noEmit", 45 45 "lint": "eslint --ext=js,jsx,ts,tsx .", 46 46 "build": "rollup -c ../../scripts/rollup/config.mjs", 47 47 "prepare": "node ../../scripts/prepare/index.js", 48 48 "prepublishOnly": "run-s clean build" 49 - }, 50 - "jest": { 51 - "preset": "../../scripts/jest/preset" 52 49 }, 53 50 "devDependencies": { 54 51 "@testing-library/preact": "^2.0.0",
+15 -8
packages/preact-urql/src/components/Mutation.test.tsx
··· 1 1 import { h } from 'preact'; 2 2 import { act, cleanup, render } from '@testing-library/preact'; 3 3 import { pipe, fromValue, delay } from 'wonka'; 4 + import { vi, expect, it, beforeEach, describe, afterEach, Mock } from 'vitest'; 5 + 4 6 import { Provider } from '../context'; 5 7 import { Mutation } from './Mutation'; 6 8 7 9 const mock = { 8 - executeMutation: jest.fn(() => 10 + executeMutation: vi.fn(() => 9 11 pipe(fromValue({ data: 1, error: 2, extensions: { i: 1 } }), delay(200)) 10 12 ), 11 13 }; 12 - const client = mock as { executeMutation: jest.Mock }; 14 + const client = mock as { executeMutation: Mock }; 13 15 const query = 'mutation Example { example }'; 14 16 15 17 describe('Mutation', () => { 16 18 beforeEach(() => { 17 - jest.spyOn(global.console, 'error').mockImplementation(); 19 + vi.spyOn(global.console, 'error').mockImplementation(() => { 20 + // do nothing 21 + }); 18 22 }); 19 23 20 24 afterEach(() => { 21 25 cleanup(); 22 26 }); 23 27 24 - it('Should execute the mutation', done => { 28 + it('Should execute the mutation', async () => { 25 29 // eslint-disable-next-line 26 30 let execute = () => {}, 27 31 props = {}; ··· 60 64 fetching: true, 61 65 error: undefined, 62 66 }); 63 - setTimeout(() => { 64 - expect(props).toStrictEqual({ data: 1, fetching: false, error: 2 }); 65 - done(); 66 - }, 400); 67 + 68 + await new Promise(res => { 69 + setTimeout(() => { 70 + expect(props).toStrictEqual({ data: 1, fetching: false, error: 2 }); 71 + res(null); 72 + }, 400); 73 + }); 67 74 }); 68 75 });
+14 -7
packages/preact-urql/src/components/Query.test.tsx
··· 1 1 import { h } from 'preact'; 2 2 import { cleanup, render } from '@testing-library/preact'; 3 3 import { map, interval, pipe } from 'wonka'; 4 + import { vi, expect, it, beforeEach, describe, afterEach } from 'vitest'; 5 + 4 6 import { Query } from './Query'; 5 7 import { Provider } from '../context'; 6 8 ··· 10 12 }; 11 13 12 14 const client = { 13 - executeQuery: jest.fn(() => 15 + executeQuery: vi.fn(() => 14 16 pipe( 15 17 interval(200), 16 18 map((i: number) => ({ data: i, error: i + 1 })) ··· 20 22 21 23 describe('Query', () => { 22 24 beforeEach(() => { 23 - jest.spyOn(global.console, 'error').mockImplementation(); 25 + vi.spyOn(global.console, 'error').mockImplementation(() => { 26 + // do nothing 27 + }); 24 28 }); 25 29 26 30 afterEach(() => { 27 31 cleanup(); 28 32 }); 29 33 30 - it('Should execute the query', done => { 34 + it('Should execute the query', async () => { 31 35 let props = {}; 32 36 const Test = () => h('p', {}, 'hi'); 33 37 const App = () => { ··· 50 54 fetching: true, 51 55 error: undefined, 52 56 }); 53 - setTimeout(() => { 54 - expect(props).toStrictEqual({ data: 0, fetching: false, error: 1 }); 55 - done(); 56 - }, 250); 57 + 58 + await new Promise(res => { 59 + setTimeout(() => { 60 + expect(props).toStrictEqual({ data: 0, fetching: false, error: 1 }); 61 + res(null); 62 + }, 250); 63 + }); 57 64 }); 58 65 });
+14 -7
packages/preact-urql/src/components/Subscription.test.tsx
··· 1 1 import { h } from 'preact'; 2 2 import { cleanup, render } from '@testing-library/preact'; 3 3 import { map, interval, pipe } from 'wonka'; 4 + import { vi, expect, it, beforeEach, describe, afterEach } from 'vitest'; 5 + 4 6 import { Provider } from '../context'; 5 7 import { Subscription } from './Subscription'; 6 8 7 9 const query = 'subscription Example { example }'; 8 10 const client = { 9 - executeSubscription: jest.fn(() => 11 + executeSubscription: vi.fn(() => 10 12 pipe( 11 13 interval(200), 12 14 map((i: number) => ({ data: i, error: i + 1 })) ··· 16 18 17 19 describe('Subscription', () => { 18 20 beforeEach(() => { 19 - jest.spyOn(global.console, 'error').mockImplementation(); 21 + vi.spyOn(global.console, 'error').mockImplementation(() => { 22 + // do nothing 23 + }); 20 24 }); 21 25 22 26 afterEach(() => { 23 27 cleanup(); 24 28 }); 25 29 26 - it('Should execute the subscription', done => { 30 + it('Should execute the subscription', async () => { 27 31 let props = {}; 28 32 const Test = () => h('p', {}, 'hi'); 29 33 const App = () => { ··· 46 50 fetching: true, 47 51 error: undefined, 48 52 }); 49 - setTimeout(() => { 50 - expect(props).toStrictEqual({ data: 0, fetching: true, error: 1 }); 51 - done(); 52 - }, 300); 53 + 54 + await new Promise(res => { 55 + setTimeout(() => { 56 + expect(props).toStrictEqual({ data: 0, fetching: true, error: 1 }); 57 + res(null); 58 + }, 300); 59 + }); 53 60 }); 54 61 });
+17 -4
packages/preact-urql/src/hooks/useMutation.test.tsx
··· 2 2 import { render, cleanup, act } from '@testing-library/preact'; 3 3 import { print } from 'graphql'; 4 4 import { gql } from '@urql/core'; 5 + import { fromValue, delay, pipe } from 'wonka'; 6 + import { 7 + vi, 8 + expect, 9 + it, 10 + beforeEach, 11 + describe, 12 + beforeAll, 13 + afterEach, 14 + Mock, 15 + } from 'vitest'; 16 + 5 17 import { useMutation } from './useMutation'; 6 - import { fromValue, delay, pipe } from 'wonka'; 7 18 import { Provider } from '../context'; 8 19 9 20 const mock = { 10 - executeMutation: jest.fn(() => 21 + executeMutation: vi.fn(() => 11 22 pipe(fromValue({ data: 1, error: 2, extensions: { i: 1 } }), delay(200)) 12 23 ), 13 24 }; 14 25 15 - const client = mock as { executeMutation: jest.Mock }; 26 + const client = mock as { executeMutation: Mock }; 16 27 const props = { 17 28 query: 'mutation Example { example }', 18 29 }; ··· 26 37 }; 27 38 28 39 beforeAll(() => { 29 - jest.spyOn(global.console, 'error').mockImplementation(); 40 + vi.spyOn(global.console, 'error').mockImplementation(() => { 41 + // do nothing 42 + }); 30 43 }); 31 44 32 45 describe('useMutation', () => {
+69 -50
packages/preact-urql/src/hooks/useQuery.test.tsx
··· 1 1 import { FunctionalComponent as FC, h } from 'preact'; 2 2 import { render, cleanup, act } from '@testing-library/preact'; 3 3 import { OperationContext } from '@urql/core'; 4 + import { map, interval, pipe, never, onStart, onEnd, empty } from 'wonka'; 5 + import { 6 + vi, 7 + expect, 8 + it, 9 + beforeEach, 10 + describe, 11 + beforeAll, 12 + Mock, 13 + afterEach, 14 + } from 'vitest'; 15 + 4 16 import { useQuery, UseQueryArgs, UseQueryState } from './useQuery'; 5 - import { map, interval, pipe, never, onStart, onEnd, empty } from 'wonka'; 6 17 import { Provider } from '../context'; 7 18 8 19 const mock = { 9 - executeQuery: jest.fn(() => 20 + executeQuery: vi.fn(() => 10 21 pipe( 11 22 interval(400), 12 23 map((i: number) => ({ data: i, error: i + 1, extensions: { i: 1 } })) ··· 14 25 ), 15 26 }; 16 27 17 - const client = mock as { executeQuery: jest.Mock }; 28 + const client = mock as { executeQuery: Mock }; 18 29 const props: UseQueryArgs<{ myVar: number }> = { 19 30 query: '{ example }', 20 31 variables: { ··· 36 47 }; 37 48 38 49 beforeAll(() => { 39 - jest.spyOn(global.console, 'error').mockImplementation(); 50 + vi.spyOn(global.console, 'error').mockImplementation(); 40 51 }); 41 52 42 53 describe('useQuery', () => { ··· 95 106 expect(state).toHaveProperty('fetching', true); 96 107 }); 97 108 98 - it('forwards data response', done => { 109 + it('forwards data response', async () => { 99 110 const { rerender } = render( 100 111 h(Provider, { 101 112 value: client as any, ··· 110 121 }) 111 122 ); 112 123 113 - setTimeout(() => { 114 - rerender( 115 - h(Provider, { 116 - value: client as any, 117 - children: [h(QueryUser, { ...props })], 118 - }) 119 - ); 120 - expect(state).toHaveProperty('data', 0); 121 - done(); 122 - }, 400); 124 + await new Promise(res => { 125 + setTimeout(() => { 126 + rerender( 127 + h(Provider, { 128 + value: client as any, 129 + children: [h(QueryUser, { ...props })], 130 + }) 131 + ); 132 + expect(state).toHaveProperty('data', 0); 133 + res(null); 134 + }, 400); 135 + }); 123 136 }); 124 137 125 - it('forwards error response', done => { 138 + it('forwards error response', async () => { 126 139 const { rerender } = render( 127 140 h(Provider, { 128 141 value: client as any, ··· 137 150 }) 138 151 ); 139 152 140 - setTimeout(() => { 141 - rerender( 142 - h(Provider, { 143 - value: client as any, 144 - children: [h(QueryUser, { ...props })], 145 - }) 146 - ); 147 - expect(state).toHaveProperty('error', 1); 148 - done(); 149 - }, 400); 153 + await new Promise(res => { 154 + setTimeout(() => { 155 + rerender( 156 + h(Provider, { 157 + value: client as any, 158 + children: [h(QueryUser, { ...props })], 159 + }) 160 + ); 161 + expect(state).toHaveProperty('error', 1); 162 + res(null); 163 + }, 400); 164 + }); 150 165 }); 151 166 152 - it('forwards extensions response', done => { 167 + it('forwards extensions response', async () => { 153 168 const { rerender } = render( 154 169 h(Provider, { 155 170 value: client as any, ··· 167 182 }) 168 183 ); 169 184 170 - setTimeout(() => { 171 - rerender( 172 - h(Provider, { 173 - value: client as any, 174 - children: [h(QueryUser, { ...props })], 175 - }) 176 - ); 185 + await new Promise(res => { 186 + setTimeout(() => { 187 + rerender( 188 + h(Provider, { 189 + value: client as any, 190 + children: [h(QueryUser, { ...props })], 191 + }) 192 + ); 177 193 178 - expect(state).toHaveProperty('extensions', { i: 1 }); 179 - done(); 180 - }, 400); 194 + expect(state).toHaveProperty('extensions', { i: 1 }); 195 + res(null); 196 + }, 400); 197 + }); 181 198 }); 182 199 183 - it('sets fetching to false', done => { 200 + it('sets fetching to false', async () => { 184 201 const { rerender } = render( 185 202 h(Provider, { 186 203 value: client as any, ··· 195 212 }) 196 213 ); 197 214 198 - setTimeout(() => { 199 - rerender( 200 - h(Provider, { 201 - value: client as any, 202 - children: [h(QueryUser, { ...props })], 203 - }) 204 - ); 205 - expect(state).toHaveProperty('fetching', false); 206 - done(); 207 - }, 400); 215 + await new Promise(res => { 216 + setTimeout(() => { 217 + rerender( 218 + h(Provider, { 219 + value: client as any, 220 + children: [h(QueryUser, { ...props })], 221 + }) 222 + ); 223 + expect(state).toHaveProperty('fetching', false); 224 + res(null); 225 + }, 400); 226 + }); 208 227 }); 209 228 210 229 describe('on change', () => { ··· 241 260 }); 242 261 243 262 describe('on unmount', () => { 244 - const start = jest.fn(); 245 - const unsubscribe = jest.fn(); 263 + const start = vi.fn(); 264 + const unsubscribe = vi.fn(); 246 265 247 266 beforeEach(() => { 248 267 client.executeQuery.mockReturnValue(
+18 -5
packages/preact-urql/src/hooks/useSubscription.test.tsx
··· 1 1 import { FunctionalComponent as FC, h } from 'preact'; 2 2 import { render, cleanup, act } from '@testing-library/preact'; 3 3 import { OperationContext } from '@urql/core'; 4 + import { 5 + vi, 6 + expect, 7 + it, 8 + beforeEach, 9 + describe, 10 + beforeAll, 11 + Mock, 12 + afterEach, 13 + } from 'vitest'; 14 + import { merge, fromValue, never, empty } from 'wonka'; 15 + 4 16 import { useSubscription, UseSubscriptionState } from './useSubscription'; 5 - import { merge, fromValue, never, empty } from 'wonka'; 6 17 import { Provider } from '../context'; 7 18 8 19 const data = { data: 1234, error: 5678 }; 9 20 const mock = { 10 21 // @ts-ignore 11 - executeSubscription: jest.fn(() => merge([fromValue(data), never])), 22 + executeSubscription: vi.fn(() => merge([fromValue(data), never])), 12 23 }; 13 24 14 - const client = mock as { executeSubscription: jest.Mock }; 25 + const client = mock as { executeSubscription: Mock }; 15 26 const query = 'subscription Example { example }'; 16 27 17 28 let state: UseSubscriptionState<any> | undefined; ··· 28 39 }; 29 40 30 41 beforeAll(() => { 31 - jest.spyOn(global.console, 'error').mockImplementation(); 42 + vi.spyOn(global.console, 'error').mockImplementation(() => { 43 + // do nothing 44 + }); 32 45 }); 33 46 34 47 describe('useSubscription', () => { ··· 99 112 }); 100 113 101 114 it('calls handler', () => { 102 - const handler = jest.fn(); 115 + const handler = vi.fn(); 103 116 const { rerender } = render( 104 117 h(Provider, { 105 118 value: client as any,
+1 -1
packages/preact-urql/tsconfig.json
··· 3 3 "include": ["src"], 4 4 "compilerOptions": { 5 5 "baseUrl": "./", 6 - "types": ["node", "jest", "react"], 6 + "types": ["node", "react", "vitest"], 7 7 "jsx": "react", 8 8 "paths": { 9 9 "urql": ["../../node_modules/urql/src"],
+1 -4
packages/react-urql/package.json
··· 31 31 "dist/" 32 32 ], 33 33 "scripts": { 34 - "test": "jest", 34 + "test": "vitest --config ../../vitest.config.ts", 35 35 "clean": "rimraf dist", 36 36 "check": "tsc --noEmit", 37 37 "lint": "eslint --ext=js,jsx,ts,tsx .", 38 38 "build": "rollup -c ../../scripts/rollup/config.mjs", 39 39 "prepare": "node ../../scripts/prepare/index.js", 40 40 "prepublishOnly": "run-s clean build" 41 - }, 42 - "jest": { 43 - "preset": "../../scripts/jest/preset" 44 41 }, 45 42 "devDependencies": { 46 43 "@cypress/react": "^7.0.1",
+15 -11
packages/react-urql/src/components/Mutation.test.tsx
··· 1 1 /* eslint-disable react-hooks/rules-of-hooks */ 2 + import { vi, expect, it, beforeEach, describe, Mock, afterEach } from 'vitest'; 2 3 3 - jest.mock('../context', () => { 4 - // eslint-disable-next-line @typescript-eslint/no-var-requires 5 - const { delay, fromValue, pipe } = require('wonka'); 4 + vi.mock('../context', async () => { 5 + const { delay, fromValue, pipe } = await vi.importActual('wonka'); 6 6 const mock = { 7 - executeMutation: jest.fn(() => 7 + executeMutation: vi.fn(() => 8 8 pipe(fromValue({ data: 1, error: 2 }), delay(200)) 9 9 ), 10 10 }; ··· 20 20 import { useClient } from '../context'; 21 21 22 22 // @ts-ignore 23 - const client = useClient() as { executeMutation: jest.Mock }; 23 + const client = useClient() as { executeMutation: Mock }; 24 24 const query = 'mutation Example { example }'; 25 25 26 26 describe('Mutation', () => { 27 27 beforeEach(() => { 28 28 // TODO: Fix use of act() 29 - jest.spyOn(global.console, 'error').mockImplementation(); 29 + vi.spyOn(global.console, 'error').mockImplementation(() => { 30 + // do nothing 31 + }); 30 32 }); 31 33 32 34 afterEach(() => { 33 35 cleanup(); 34 36 }); 35 37 36 - it('Should execute the mutation', done => { 38 + it('Should execute the mutation', async () => { 37 39 let execute = () => { 38 40 /* noop */ 39 41 }, ··· 66 68 fetching: true, 67 69 error: undefined, 68 70 }); 69 - setTimeout(() => { 70 - expect(props).toStrictEqual({ data: 1, fetching: false, error: 2 }); 71 - done(); 72 - }, 400); 71 + await new Promise(res => { 72 + setTimeout(() => { 73 + expect(props).toStrictEqual({ data: 1, fetching: false, error: 2 }); 74 + res(null); 75 + }, 400); 76 + }); 73 77 }); 74 78 });
+15 -10
packages/react-urql/src/components/Query.test.tsx
··· 1 - jest.mock('../context', () => { 2 - // eslint-disable-next-line @typescript-eslint/no-var-requires 3 - const { map, interval, pipe } = require('wonka'); 1 + import { vi, expect, it, beforeEach, describe, afterEach } from 'vitest'; 2 + 3 + vi.mock('../context', async () => { 4 + const { map, interval, pipe } = await vi.importActual('wonka'); 4 5 const mock = { 5 - executeQuery: jest.fn(() => 6 + executeQuery: vi.fn(() => 6 7 pipe( 7 8 interval(200), 8 9 map((i: number) => ({ data: i, error: i + 1 })) ··· 28 29 describe('Query', () => { 29 30 beforeEach(() => { 30 31 // TODO: Fix use of act() 31 - jest.spyOn(global.console, 'error').mockImplementation(); 32 + vi.spyOn(global.console, 'error').mockImplementation(() => { 33 + // do nothing 34 + }); 32 35 }); 33 36 34 37 afterEach(() => { 35 38 cleanup(); 36 39 }); 37 40 38 - it('Should execute the query', done => { 41 + it('Should execute the query', async () => { 39 42 let props = {}; 40 43 const Test = () => <p>Hi</p>; 41 44 const App = () => { ··· 55 58 fetching: true, 56 59 error: undefined, 57 60 }); 58 - setTimeout(() => { 59 - expect(props).toStrictEqual({ data: 0, fetching: false, error: 1 }); 60 - done(); 61 - }, 200); 61 + await new Promise(res => { 62 + setTimeout(() => { 63 + expect(props).toStrictEqual({ data: 0, fetching: false, error: 1 }); 64 + res(null); 65 + }, 200); 66 + }); 62 67 }); 63 68 });
+3 -3
packages/react-urql/src/hooks/__snapshots__/useMutation.test.tsx.snap
··· 1 - // Jest Snapshot v1, https://goo.gl/fbAQLP 1 + // Vitest Snapshot v1 2 2 3 - exports[`on initial useEffect initialises default state 1`] = ` 4 - Object { 3 + exports[`on initial useEffect > initialises default state 1`] = ` 4 + { 5 5 "data": undefined, 6 6 "error": undefined, 7 7 "extensions": undefined,
+3 -3
packages/react-urql/src/hooks/__snapshots__/useQuery.test.tsx.snap
··· 1 - // Jest Snapshot v1, https://goo.gl/fbAQLP 1 + // Vitest Snapshot v1 2 2 3 - exports[`on initial useEffect initialises default state 1`] = ` 4 - Object { 3 + exports[`on initial useEffect > initialises default state 1`] = ` 4 + { 5 5 "data": undefined, 6 6 "error": undefined, 7 7 "extensions": undefined,
+3 -3
packages/react-urql/src/hooks/__snapshots__/useSubscription.test.tsx.snap
··· 1 - // Jest Snapshot v1, https://goo.gl/fbAQLP 1 + // Vitest Snapshot v1 2 2 3 - exports[`on initial useEffect initialises default state 1`] = ` 4 - Object { 3 + exports[`on initial useEffect > initialises default state 1`] = ` 4 + { 5 5 "data": undefined, 6 6 "error": undefined, 7 7 "extensions": undefined,
+8 -6
packages/react-urql/src/hooks/useMutation.test.tsx
··· 1 1 /* eslint-disable react-hooks/rules-of-hooks */ 2 + import { vi, expect, it, beforeEach, describe, beforeAll, Mock } from 'vitest'; 2 3 3 4 // Note: Testing for hooks is not yet supported in Enzyme - https://github.com/airbnb/enzyme/issues/2011 4 - jest.mock('../context', () => { 5 - // eslint-disable-next-line @typescript-eslint/no-var-requires 6 - const { delay, fromValue, pipe } = require('wonka'); 5 + vi.mock('../context', async () => { 6 + const { delay, fromValue, pipe } = await vi.importActual('wonka'); 7 7 const mock = { 8 - executeMutation: jest.fn(() => 8 + executeMutation: vi.fn(() => 9 9 pipe(fromValue({ data: 1, error: 2, extensions: { i: 1 } }), delay(200)) 10 10 ), 11 11 }; ··· 24 24 import { useMutation } from './useMutation'; 25 25 26 26 // @ts-ignore 27 - const client = useClient() as { executeMutation: jest.Mock }; 27 + const client = useClient() as { executeMutation: Mock }; 28 28 29 29 const props = { 30 30 query: 'mutation Example { example }', ··· 42 42 43 43 beforeAll(() => { 44 44 // TODO: Fix use of act() 45 - jest.spyOn(global.console, 'error').mockImplementation(); 45 + vi.spyOn(global.console, 'error').mockImplementation(() => { 46 + // do nothing 47 + }); 46 48 }); 47 49 48 50 beforeEach(() => {
+7 -4
packages/react-urql/src/hooks/useQuery.spec.ts
··· 3 3 import { renderHook, act } from '@testing-library/react-hooks'; 4 4 import { interval, map, pipe } from 'wonka'; 5 5 import { RequestPolicy } from '@urql/core'; 6 + import { vi, expect, it, beforeEach, describe, beforeAll, Mock } from 'vitest'; 6 7 7 8 import { useClient } from '../context'; 8 9 import { useQuery } from './useQuery'; 9 10 10 - jest.mock('../context', () => { 11 + vi.mock('../context', () => { 11 12 const mock = { 12 - executeQuery: jest.fn(() => 13 + executeQuery: vi.fn(() => 13 14 pipe( 14 15 interval(1000 / 60), 15 16 map(i => ({ data: i, error: i + 1 })) ··· 23 24 }); 24 25 25 26 // @ts-ignore 26 - const client = useClient() as { executeQuery: jest.Mock }; 27 + const client = useClient() as { executeQuery: Mock }; 27 28 28 29 const mockQuery = ` 29 30 query todo($id: ID!) { ··· 42 43 describe('useQuery', () => { 43 44 beforeAll(() => { 44 45 // TODO: Fix use of act() 45 - jest.spyOn(global.console, 'error').mockImplementation(); 46 + vi.spyOn(global.console, 'error').mockImplementation(() => { 47 + // do nothing 48 + }); 46 49 }); 47 50 48 51 beforeEach(() => {
+42 -32
packages/react-urql/src/hooks/useQuery.test.tsx
··· 1 1 /* eslint-disable react-hooks/rules-of-hooks */ 2 + import { vi, expect, it, beforeEach, describe, beforeAll, Mock } from 'vitest'; 2 3 3 4 // Note: Testing for hooks is not yet supported in Enzyme - https://github.com/airbnb/enzyme/issues/2011 4 - jest.mock('../context', () => { 5 - // eslint-disable-next-line @typescript-eslint/no-var-requires 6 - const { map, interval, pipe } = require('wonka'); 5 + vi.mock('../context', async () => { 6 + const { map, interval, pipe } = await vi.importActual('wonka'); 7 7 const mock = { 8 - executeQuery: jest.fn(() => 8 + executeQuery: vi.fn(() => 9 9 pipe( 10 10 interval(400), 11 11 map((i: number) => ({ data: i, error: i + 1, extensions: { i: 1 } })) ··· 27 27 import { useClient } from '../context'; 28 28 29 29 // @ts-ignore 30 - const client = useClient() as { executeQuery: jest.Mock }; 30 + const client = useClient() as { executeQuery: Mock }; 31 31 32 32 const props: UseQueryArgs<{ myVar: number }> = { 33 33 query: '{ example }', ··· 53 53 54 54 beforeAll(() => { 55 55 // TODO: Fix use of act() 56 - jest.spyOn(global.console, 'error').mockImplementation(); 56 + vi.spyOn(global.console, 'error').mockImplementation(() => { 57 + // do nothings 58 + }); 57 59 }); 58 60 59 61 beforeEach(() => { ··· 98 100 }); 99 101 100 102 describe('on subscription update', () => { 101 - it('forwards data response', done => { 103 + it('forwards data response', async () => { 102 104 const wrapper = renderer.create(<QueryUser {...props} />); 103 105 /** 104 106 * Have to call update (without changes) in order to see the ··· 106 108 */ 107 109 wrapper.update(<QueryUser {...props} />); 108 110 109 - setTimeout(() => { 110 - wrapper.update(<QueryUser {...props} />); 111 - expect(state).toHaveProperty('data', 0); 112 - done(); 113 - }, 400); 111 + await new Promise(res => { 112 + setTimeout(() => { 113 + wrapper.update(<QueryUser {...props} />); 114 + expect(state).toHaveProperty('data', 0); 115 + res(null); 116 + }, 400); 117 + }); 114 118 }); 115 119 116 - it('forwards error response', done => { 120 + it('forwards error response', async () => { 117 121 const wrapper = renderer.create(<QueryUser {...props} />); 118 122 /** 119 123 * Have to call update (without changes) in order to see the ··· 121 125 */ 122 126 wrapper.update(<QueryUser {...props} />); 123 127 124 - setTimeout(() => { 125 - wrapper.update(<QueryUser {...props} />); 126 - expect(state).toHaveProperty('error', 1); 127 - done(); 128 - }, 400); 128 + await new Promise(res => { 129 + setTimeout(() => { 130 + wrapper.update(<QueryUser {...props} />); 131 + expect(state).toHaveProperty('error', 1); 132 + res(null); 133 + }, 400); 134 + }); 129 135 }); 130 136 131 - it('forwards extensions response', done => { 137 + it('forwards extensions response', async () => { 132 138 const wrapper = renderer.create(<QueryUser {...props} />); 133 139 /** 134 140 * Have to call update (without changes) in order to see the ··· 136 142 */ 137 143 wrapper.update(<QueryUser {...props} />); 138 144 139 - setTimeout(() => { 140 - wrapper.update(<QueryUser {...props} />); 141 - expect(state).toHaveProperty('extensions', { i: 1 }); 142 - done(); 143 - }, 400); 145 + await new Promise(res => { 146 + setTimeout(() => { 147 + wrapper.update(<QueryUser {...props} />); 148 + expect(state).toHaveProperty('extensions', { i: 1 }); 149 + res(null); 150 + }, 400); 151 + }); 144 152 }); 145 153 146 - it('sets fetching to false', done => { 154 + it('sets fetching to false', async () => { 147 155 const wrapper = renderer.create(<QueryUser {...props} />); 148 156 /** 149 157 * Have to call update (without changes) in order to see the ··· 151 159 */ 152 160 wrapper.update(<QueryUser {...props} />); 153 161 154 - setTimeout(() => { 155 - wrapper.update(<QueryUser {...props} />); 156 - expect(state).toHaveProperty('fetching', false); 157 - done(); 158 - }, 400); 162 + await new Promise(res => { 163 + setTimeout(() => { 164 + wrapper.update(<QueryUser {...props} />); 165 + expect(state).toHaveProperty('fetching', false); 166 + res(null); 167 + }, 400); 168 + }); 159 169 }); 160 170 }); 161 171 ··· 178 188 }); 179 189 180 190 describe('on unmount', () => { 181 - const start = jest.fn(); 182 - const unsubscribe = jest.fn(); 191 + const start = vi.fn(); 192 + const unsubscribe = vi.fn(); 183 193 184 194 beforeEach(() => { 185 195 client.executeQuery.mockReturnValue(
+1
packages/react-urql/src/hooks/useRequest.test.ts
··· 1 1 import { gql } from '@urql/core'; 2 2 import { renderHook } from '@testing-library/react-hooks'; 3 + import { it, expect } from 'vitest'; 3 4 import { useRequest } from './useRequest'; 4 5 5 6 it('preserves instance of request when key has not changed', () => {
+6 -6
packages/react-urql/src/hooks/useSubscription.test.tsx
··· 1 1 /* eslint-disable react-hooks/rules-of-hooks */ 2 + import { vi, expect, it, beforeEach, describe, Mock } from 'vitest'; 2 3 3 4 // Note: Testing for hooks is not yet supported in Enzyme - https://github.com/airbnb/enzyme/issues/2011 4 - jest.mock('../context', () => { 5 + vi.mock('../context', async () => { 5 6 const d = { data: 1234, error: 5678 }; 6 - // eslint-disable-next-line @typescript-eslint/no-var-requires 7 - const { merge, fromValue, never } = require('wonka'); 7 + const { merge, fromValue, never } = await vi.importActual('wonka'); 8 8 const mock = { 9 - executeSubscription: jest.fn(() => merge([fromValue(d), never])), 9 + executeSubscription: vi.fn(() => merge([fromValue(d), never])), 10 10 }; 11 11 12 12 return { ··· 22 22 import { useClient } from '../context'; 23 23 24 24 // @ts-ignore 25 - const client = useClient() as { executeSubscription: jest.Mock }; 25 + const client = useClient() as { executeSubscription: Mock }; 26 26 const query = 'subscription Example { example }'; 27 27 28 28 let state: UseSubscriptionState<any> | undefined; ··· 78 78 }); 79 79 80 80 it('calls handler', () => { 81 - const handler = jest.fn(); 81 + const handler = vi.fn(); 82 82 const wrapper = renderer.create( 83 83 <SubscriptionUser q={query} handler={handler} /> 84 84 );
+1
packages/react-urql/src/test-utils/ssr.test.tsx
··· 1 1 import React from 'react'; 2 2 import prepass from 'react-ssr-prepass'; 3 3 import { never, publish, filter, delay, pipe, map } from 'wonka'; 4 + import { describe, it, beforeEach, expect } from 'vitest'; 4 5 5 6 import { 6 7 gql,
+1 -1
packages/react-urql/tsconfig.json
··· 3 3 "include": ["src"], 4 4 "compilerOptions": { 5 5 "baseUrl": "./", 6 - "types": ["node", "jest", "react"], 6 + "types": ["node", "react"], 7 7 "jsx": "react", 8 8 "paths": { 9 9 "urql": ["../../node_modules/urql/src"],
-3
packages/storage-rn/package.json
··· 47 47 "prepare": "node ../../scripts/prepare/index.js", 48 48 "prepublishOnly": "run-s clean build" 49 49 }, 50 - "jest": { 51 - "preset": "../../scripts/jest/preset" 52 - }, 53 50 "devDependencies": { 54 51 "@react-native-async-storage/async-storage": "^1.15.5", 55 52 "@react-native-community/netinfo": "^6.0.0",
+80 -76
packages/storage-rn/src/makeAsyncStorage.test.ts
··· 1 - import AsyncStorage from '@react-native-async-storage/async-storage'; 2 - import NetInfo from '@react-native-community/netinfo'; 3 - import { makeAsyncStorage } from './makeAsyncStorage'; 1 + import { vi, expect, it, describe } from 'vitest'; 4 2 5 - jest.mock('@react-native-community/netinfo', () => ({ 3 + vi.mock('@react-native-community/netinfo', () => ({ 6 4 addEventListener: () => 'addEventListener', 5 + default: { 6 + addEventListener: () => 'addEventListener', 7 + }, 7 8 })); 8 9 9 - jest.mock('@react-native-async-storage/async-storage', () => ({ 10 + vi.mock('@react-native-async-storage/async-storage', () => ({ 11 + default: { 12 + setItem: () => 'setItem', 13 + getItem: () => 'getItem', 14 + getAllKeys: () => 'getAllKeys', 15 + removeItem: () => 'removeItem', 16 + }, 10 17 setItem: () => 'setItem', 11 18 getItem: () => 'getItem', 12 19 getAllKeys: () => 'getAllKeys', 13 20 removeItem: () => 'removeItem', 14 21 })); 15 22 23 + import AsyncStorage from '@react-native-async-storage/async-storage'; 24 + import NetInfo from '@react-native-community/netinfo'; 25 + import { makeAsyncStorage } from './makeAsyncStorage'; 26 + 16 27 const request = [ 17 28 { 18 29 query: 'something something', ··· 31 42 describe('makeAsyncStorage', () => { 32 43 describe('writeMetadata', () => { 33 44 it('writes metadata to async storage', async () => { 34 - const setItemSpy = jest.fn(); 35 - jest.spyOn(AsyncStorage, 'setItem').mockImplementationOnce(setItemSpy); 45 + const setItemSpy = vi.fn(); 46 + vi.spyOn(AsyncStorage, 'setItem').mockImplementationOnce(setItemSpy); 36 47 37 48 const storage = makeAsyncStorage(); 38 49 ··· 47 58 }); 48 59 49 60 it('writes metadata using a custom key', async () => { 50 - const setItemSpy = jest.fn(); 51 - jest.spyOn(AsyncStorage, 'setItem').mockImplementationOnce(setItemSpy); 61 + const setItemSpy = vi.fn(); 62 + vi.spyOn(AsyncStorage, 'setItem').mockImplementationOnce(setItemSpy); 52 63 53 64 const storage = makeAsyncStorage({ metadataKey: 'my-custom-key' }); 54 65 ··· 65 76 66 77 describe('readMetadata', () => { 67 78 it('returns an empty array if no metadata is found', async () => { 68 - const getItemSpy = jest.fn().mockResolvedValue(null); 69 - jest.spyOn(AsyncStorage, 'getItem').mockImplementationOnce(getItemSpy); 79 + const getItemSpy = vi.fn().mockResolvedValue(null); 80 + vi.spyOn(AsyncStorage, 'getItem').mockImplementationOnce(getItemSpy); 70 81 71 82 const storage = makeAsyncStorage(); 72 83 ··· 78 89 }); 79 90 80 91 it('returns the parsed JSON correctly', async () => { 81 - const getItemSpy = jest.fn().mockResolvedValue(serializedRequest); 82 - jest.spyOn(AsyncStorage, 'getItem').mockImplementationOnce(getItemSpy); 92 + const getItemSpy = vi.fn().mockResolvedValue(serializedRequest); 93 + vi.spyOn(AsyncStorage, 'getItem').mockImplementationOnce(getItemSpy); 83 94 84 95 const storage = makeAsyncStorage(); 85 96 ··· 91 102 }); 92 103 93 104 it('reads metadata using a custom key', async () => { 94 - const getItemSpy = jest.fn().mockResolvedValue(serializedRequest); 95 - jest.spyOn(AsyncStorage, 'getItem').mockImplementationOnce(getItemSpy); 105 + const getItemSpy = vi.fn().mockResolvedValue(serializedRequest); 106 + vi.spyOn(AsyncStorage, 'getItem').mockImplementationOnce(getItemSpy); 96 107 97 108 const storage = makeAsyncStorage({ metadataKey: 'my-custom-key' }); 98 109 ··· 104 115 }); 105 116 106 117 it('returns an empty array if json.parse errors', async () => { 107 - const getItemSpy = jest.fn().mockResolvedValue('surprise!'); 108 - jest.spyOn(AsyncStorage, 'getItem').mockImplementationOnce(getItemSpy); 118 + const getItemSpy = vi.fn().mockResolvedValue('surprise!'); 119 + vi.spyOn(AsyncStorage, 'getItem').mockImplementationOnce(getItemSpy); 109 120 const storage = makeAsyncStorage(); 110 121 111 122 if (storage && storage.readMetadata) { ··· 118 129 119 130 describe('writeData', () => { 120 131 it('writes data to async storage', async () => { 121 - jest.spyOn(Date.prototype, 'valueOf').mockReturnValueOnce(1632209690641); 132 + vi.spyOn(Date.prototype, 'valueOf').mockReturnValueOnce(1632209690641); 122 133 const dayStamp = 18891; 123 134 124 - const setItemSpy = jest.fn(); 125 - jest.spyOn(AsyncStorage, 'setItem').mockImplementationOnce(setItemSpy); 135 + const setItemSpy = vi.fn(); 136 + vi.spyOn(AsyncStorage, 'setItem').mockImplementationOnce(setItemSpy); 126 137 127 138 const storage = makeAsyncStorage(); 128 139 ··· 137 148 }); 138 149 139 150 it('writes data to async storage using custom key', async () => { 140 - jest.spyOn(Date.prototype, 'valueOf').mockReturnValueOnce(1632209690641); 151 + vi.spyOn(Date.prototype, 'valueOf').mockReturnValueOnce(1632209690641); 141 152 const dayStamp = 18891; 142 153 143 - const setItemSpy = jest.fn(); 144 - jest.spyOn(AsyncStorage, 'setItem').mockImplementationOnce(setItemSpy); 154 + const setItemSpy = vi.fn(); 155 + vi.spyOn(AsyncStorage, 'setItem').mockImplementationOnce(setItemSpy); 145 156 146 157 const storage = makeAsyncStorage({ dataKey: 'my-custom-key' }); 147 158 ··· 156 167 }); 157 168 158 169 it('merges previous writes', async () => { 159 - jest.spyOn(Date.prototype, 'valueOf').mockReturnValueOnce(1632209690641); 170 + vi.spyOn(Date.prototype, 'valueOf').mockReturnValueOnce(1632209690641); 160 171 const dayStamp = 18891; 161 172 162 - const setItemSpy = jest.fn(); 163 - jest.spyOn(AsyncStorage, 'setItem').mockImplementationOnce(setItemSpy); 173 + const setItemSpy = vi.fn(); 174 + vi.spyOn(AsyncStorage, 'setItem').mockImplementationOnce(setItemSpy); 164 175 165 176 const storage = makeAsyncStorage(); 166 177 ··· 175 186 ); 176 187 177 188 // write twice 178 - const secondSetItemSpy = jest.fn(); 179 - jest 180 - .spyOn(AsyncStorage, 'setItem') 181 - .mockImplementationOnce(secondSetItemSpy); 189 + const secondSetItemSpy = vi.fn(); 190 + vi.spyOn(AsyncStorage, 'setItem').mockImplementationOnce( 191 + secondSetItemSpy 192 + ); 182 193 183 194 if (storage && storage.writeData) { 184 195 storage.writeData({ foo: 'bar' }); ··· 190 201 }); 191 202 192 203 it('keeps items from previous days', async () => { 193 - jest.spyOn(Date.prototype, 'valueOf').mockReturnValueOnce(1632209690641); 204 + vi.spyOn(Date.prototype, 'valueOf').mockReturnValueOnce(1632209690641); 194 205 const dayStamp = 18891; 195 206 const oldDayStamp = 18857; 196 - jest 197 - .spyOn(AsyncStorage, 'getItem') 198 - .mockResolvedValueOnce( 199 - JSON.stringify({ [oldDayStamp]: { foo: 'bar' } }) 200 - ); 207 + vi.spyOn(AsyncStorage, 'getItem').mockResolvedValueOnce( 208 + JSON.stringify({ [oldDayStamp]: { foo: 'bar' } }) 209 + ); 201 210 202 - const setItemSpy = jest.fn(); 203 - jest.spyOn(AsyncStorage, 'setItem').mockImplementationOnce(setItemSpy); 211 + const setItemSpy = vi.fn(); 212 + vi.spyOn(AsyncStorage, 'setItem').mockImplementationOnce(setItemSpy); 204 213 205 214 const storage = makeAsyncStorage(); 206 215 ··· 215 224 }); 216 225 217 226 it('propagates deleted keys to previous days', async () => { 218 - jest.spyOn(Date.prototype, 'valueOf').mockReturnValueOnce(1632209690641); 227 + vi.spyOn(Date.prototype, 'valueOf').mockReturnValueOnce(1632209690641); 219 228 const dayStamp = 18891; 220 - jest.spyOn(AsyncStorage, 'getItem').mockResolvedValueOnce( 229 + vi.spyOn(AsyncStorage, 'getItem').mockResolvedValueOnce( 221 230 JSON.stringify({ 222 231 [dayStamp]: { foo: 'bar', hello: 'world' }, 223 232 [dayStamp - 1]: { foo: 'bar', hello: 'world' }, ··· 225 234 }) 226 235 ); 227 236 228 - const setItemSpy = jest.fn(); 229 - jest.spyOn(AsyncStorage, 'setItem').mockImplementationOnce(setItemSpy); 237 + const setItemSpy = vi.fn(); 238 + vi.spyOn(AsyncStorage, 'setItem').mockImplementationOnce(setItemSpy); 230 239 231 240 const storage = makeAsyncStorage(); 232 241 ··· 247 256 248 257 describe('readData', () => { 249 258 it('returns an empty object if no data is found', async () => { 250 - const getItemSpy = jest.fn().mockResolvedValue(null); 251 - jest.spyOn(AsyncStorage, 'getItem').mockImplementationOnce(getItemSpy); 259 + const getItemSpy = vi.fn().mockResolvedValue(null); 260 + vi.spyOn(AsyncStorage, 'getItem').mockImplementationOnce(getItemSpy); 252 261 253 262 const storage = makeAsyncStorage(); 254 263 ··· 260 269 }); 261 270 262 271 it("returns today's data correctly", async () => { 263 - jest.spyOn(Date.prototype, 'valueOf').mockReturnValueOnce(1632209690641); 272 + vi.spyOn(Date.prototype, 'valueOf').mockReturnValueOnce(1632209690641); 264 273 const dayStamp = 18891; 265 274 const mockData = JSON.stringify({ [dayStamp]: entires }); 266 - const getItemSpy = jest.fn().mockResolvedValue(mockData); 267 - jest.spyOn(AsyncStorage, 'getItem').mockImplementationOnce(getItemSpy); 275 + const getItemSpy = vi.fn().mockResolvedValue(mockData); 276 + vi.spyOn(AsyncStorage, 'getItem').mockImplementationOnce(getItemSpy); 268 277 269 278 const storage = makeAsyncStorage(); 270 279 ··· 276 285 }); 277 286 278 287 it('merges data from past days correctly', async () => { 279 - jest.spyOn(Date.prototype, 'valueOf').mockReturnValueOnce(1632209690641); 288 + vi.spyOn(Date.prototype, 'valueOf').mockReturnValueOnce(1632209690641); 280 289 const dayStamp = 18891; 281 290 const mockData = JSON.stringify({ 282 291 [dayStamp]: { one: 'one' }, ··· 284 293 [dayStamp - 3]: { three: 'three' }, 285 294 [dayStamp - 4]: { two: 'old' }, 286 295 }); 287 - const getItemSpy = jest.fn().mockResolvedValue(mockData); 288 - jest.spyOn(AsyncStorage, 'getItem').mockImplementationOnce(getItemSpy); 296 + const getItemSpy = vi.fn().mockResolvedValue(mockData); 297 + vi.spyOn(AsyncStorage, 'getItem').mockImplementationOnce(getItemSpy); 289 298 290 299 const storage = makeAsyncStorage(); 291 300 ··· 301 310 }); 302 311 303 312 it('cleans up old data', async () => { 304 - jest.spyOn(Date.prototype, 'valueOf').mockReturnValueOnce(1632209690641); 313 + vi.spyOn(Date.prototype, 'valueOf').mockReturnValueOnce(1632209690641); 305 314 const dayStamp = 18891; 306 315 const maxAge = 5; 307 316 const mockData = JSON.stringify({ ··· 309 318 [dayStamp - maxAge + 1]: entires, // should be kept 310 319 [dayStamp - maxAge - 1]: { old: 'data' }, // should get deleted 311 320 }); 312 - jest.spyOn(AsyncStorage, 'getItem').mockResolvedValueOnce(mockData); 313 - const setItemSpy = jest.fn(); 314 - jest.spyOn(AsyncStorage, 'setItem').mockImplementationOnce(setItemSpy); 321 + vi.spyOn(AsyncStorage, 'getItem').mockResolvedValueOnce(mockData); 322 + const setItemSpy = vi.fn(); 323 + vi.spyOn(AsyncStorage, 'setItem').mockImplementationOnce(setItemSpy); 315 324 316 325 const storage = makeAsyncStorage({ maxAge }); 317 326 ··· 331 340 332 341 describe('onOnline', () => { 333 342 it('sets up an event listener for the network change event', () => { 334 - const addEventListenerSpy = jest.fn(); 335 - jest 336 - .spyOn(NetInfo, 'addEventListener') 337 - .mockImplementationOnce(addEventListenerSpy); 343 + const addEventListenerSpy = vi.fn(); 344 + vi.spyOn(NetInfo, 'addEventListener').mockImplementationOnce( 345 + addEventListenerSpy 346 + ); 338 347 339 348 const storage = makeAsyncStorage(); 340 349 ··· 346 355 }); 347 356 348 357 it('calls the callback when the device comes online', () => { 349 - const callbackSpy = jest.fn(); 358 + const callbackSpy = vi.fn(); 350 359 let networkCallback; 351 - jest 352 - .spyOn(NetInfo, 'addEventListener') 353 - .mockImplementationOnce(callback => { 354 - networkCallback = callback; 355 - return () => null; 356 - }); 360 + vi.spyOn(NetInfo, 'addEventListener').mockImplementationOnce(callback => { 361 + networkCallback = callback; 362 + return () => null; 363 + }); 357 364 358 365 const storage = makeAsyncStorage(); 359 366 ··· 367 374 }); 368 375 369 376 it('does not call the callback when the device is offline', () => { 370 - const callbackSpy = jest.fn(); 377 + const callbackSpy = vi.fn(); 371 378 let networkCallback; 372 - jest 373 - .spyOn(NetInfo, 'addEventListener') 374 - .mockImplementationOnce(callback => { 375 - networkCallback = callback; 376 - return () => null; 377 - }); 379 + vi.spyOn(NetInfo, 'addEventListener').mockImplementationOnce(callback => { 380 + networkCallback = callback; 381 + return () => null; 382 + }); 378 383 379 384 const storage = makeAsyncStorage(); 380 385 ··· 390 395 391 396 describe('clear', () => { 392 397 it('clears all data and metadata', async () => { 393 - const removeItemSpy = jest.fn(); 394 - const secondRemoveItemSpy = jest.fn(); 395 - jest 396 - .spyOn(AsyncStorage, 'removeItem') 398 + const removeItemSpy = vi.fn(); 399 + const secondRemoveItemSpy = vi.fn(); 400 + vi.spyOn(AsyncStorage, 'removeItem') 397 401 .mockImplementationOnce(removeItemSpy) 398 402 .mockImplementationOnce(secondRemoveItemSpy); 399 403
+1 -4
packages/svelte-urql/package.json
··· 39 39 "dist/" 40 40 ], 41 41 "scripts": { 42 - "test": "jest", 42 + "test": "vitest --config ../../vitest.config.ts", 43 43 "clean": "rimraf dist", 44 44 "check": "tsc --noEmit", 45 45 "lint": "eslint --ext=js,jsx,ts,tsx .", 46 46 "build": "rollup -c ../../scripts/rollup/config.mjs", 47 47 "prepare": "node ../../scripts/prepare/index.js", 48 48 "prepublishOnly": "run-s clean build" 49 - }, 50 - "jest": { 51 - "preset": "../../scripts/jest/preset" 52 49 }, 53 50 "peerDependencies": { 54 51 "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0",
+3 -1
packages/svelte-urql/src/mutationStore.test.ts
··· 1 1 import { createClient } from '@urql/core'; 2 2 import { get } from 'svelte/store'; 3 + import { vi, expect, it, describe } from 'vitest'; 4 + 3 5 import { mutationStore } from './mutationStore'; 4 6 5 7 describe('mutationStore', () => { ··· 16 18 }); 17 19 18 20 it('creates a svelte store', () => { 19 - const subscriber = jest.fn(); 21 + const subscriber = vi.fn(); 20 22 store.subscribe(subscriber); 21 23 expect(subscriber).toHaveBeenCalledTimes(1); 22 24 });
+4 -2
packages/svelte-urql/src/queryStore.test.ts
··· 1 1 import { createClient } from '@urql/core'; 2 - import { queryStore } from './queryStore'; 2 + import { vi, expect, it, describe } from 'vitest'; 3 3 import { get } from 'svelte/store'; 4 + 5 + import { queryStore } from './queryStore'; 4 6 5 7 describe('queryStore', () => { 6 8 const client = createClient({ url: 'https://example.com' }); ··· 10 12 const store = queryStore({ client, query, variables, context }); 11 13 12 14 it('creates a svelte store', () => { 13 - const subscriber = jest.fn(); 15 + const subscriber = vi.fn(); 14 16 store.subscribe(subscriber); 15 17 expect(subscriber).toHaveBeenCalledTimes(1); 16 18 });
+3 -1
packages/svelte-urql/src/subscriptionStore.test.ts
··· 1 1 import { createClient } from '@urql/core'; 2 2 import { get } from 'svelte/store'; 3 + import { vi, expect, it, describe } from 'vitest'; 4 + 3 5 import { subscriptionStore } from './subscriptionStore'; 4 6 5 7 describe('subscriptionStore', () => { ··· 15 17 }); 16 18 17 19 it('creates a svelte store', () => { 18 - const subscriber = jest.fn(); 20 + const subscriber = vi.fn(); 19 21 store.subscribe(subscriber); 20 22 expect(subscriber).toHaveBeenCalledTimes(1); 21 23 });
+1 -4
packages/vue-urql/package.json
··· 39 39 "dist/" 40 40 ], 41 41 "scripts": { 42 - "test": "jest", 42 + "test": "vitest --config ../../vitest.config.ts", 43 43 "clean": "rimraf dist", 44 44 "check": "tsc --noEmit", 45 45 "lint": "eslint --ext=js,jsx,ts,tsx .", 46 46 "build": "rollup -c ../../scripts/rollup/config.mjs", 47 47 "prepare": "node ../../scripts/prepare/index.js", 48 48 "prepublishOnly": "run-s clean build" 49 - }, 50 - "jest": { 51 - "preset": "../../scripts/jest/preset" 52 49 }, 53 50 "devDependencies": { 54 51 "graphql": "^16.0.0",
+14 -11
packages/vue-urql/src/useMutation.test.ts
··· 1 - import { reactive, ref } from 'vue'; 1 + import { reactive } from 'vue'; 2 + import { vi, expect, it, beforeEach, describe } from 'vitest'; 2 3 3 - jest.mock('./useClient.ts', () => ({ 4 - __esModule: true, 5 - ...jest.requireActual('./useClient.ts'), 6 - useClient: () => ref(client), 7 - })); 4 + vi.mock('./useClient.ts', async () => { 5 + const { ref } = await vi.importActual('vue'); 6 + return { 7 + __esModule: true, 8 + ...((await vi.importActual('./useClient.ts')) as object), 9 + useClient: () => ref(client), 10 + }; 11 + }); 8 12 9 13 import { makeSubject } from 'wonka'; 10 14 import { createClient, gql } from '@urql/core'; ··· 13 17 const client = createClient({ url: '/graphql', exchanges: [] }); 14 18 15 19 beforeEach(() => { 16 - jest.resetAllMocks(); 20 + vi.resetAllMocks(); 17 21 }); 18 22 19 23 describe('useMutation', () => { 20 - it('provides an execute method that resolves a promise', done => { 24 + it('provides an execute method that resolves a promise', async () => { 21 25 const subject = makeSubject<any>(); 22 - const clientMutation = jest 26 + const clientMutation = vi 23 27 .spyOn(client, 'executeMutation') 24 28 .mockImplementation(() => subject.source); 25 29 ··· 52 56 expect(clientMutation).toHaveBeenCalledTimes(1); 53 57 54 58 subject.next({ data: { test: true } }); 55 - promise.then(function () { 59 + await promise.then(function () { 56 60 expect(mutation.fetching).toBe(false); 57 61 expect(mutation.stale).toBe(false); 58 62 expect(mutation.error).toBe(undefined); 59 63 expect(mutation.data).toEqual({ test: true }); 60 - done(); 61 64 }); 62 65 }); 63 66 });
+7 -6
packages/vue-urql/src/useQuery.test.ts
··· 1 1 import { nextTick, reactive, ref } from 'vue'; 2 + import { vi, expect, it, describe } from 'vitest'; 2 3 3 - jest.mock('./useClient.ts', () => ({ 4 + vi.mock('./useClient.ts', async () => ({ 4 5 __esModule: true, 5 - ...jest.requireActual('./useClient.ts'), 6 + ...((await vi.importActual('./useClient.ts')) as object), 6 7 useClient: () => ref(client), 7 8 })); 8 9 ··· 15 16 describe('useQuery', () => { 16 17 it('runs a query and updates data', async () => { 17 18 const subject = makeSubject<any>(); 18 - const executeQuery = jest 19 + const executeQuery = vi 19 20 .spyOn(client, 'executeQuery') 20 21 .mockImplementation(() => subject.source); 21 22 ··· 59 60 }); 60 61 61 62 it('runs queries as a promise-like that resolves when used', async () => { 62 - const executeQuery = jest 63 + const executeQuery = vi 63 64 .spyOn(client, 'executeQuery') 64 65 .mockImplementation(() => { 65 66 return pipe(fromValue({ data: { test: true } }), delay(1)) as any; ··· 75 76 }); 76 77 77 78 it('runs queries as a promise-like that resolves even when the query changes', async () => { 78 - const executeQuery = jest 79 + const executeQuery = vi 79 80 .spyOn(client, 'executeQuery') 80 81 .mockImplementation(request => { 81 82 return pipe( ··· 106 107 107 108 it('pauses query when asked to do so', async () => { 108 109 const subject = makeSubject<any>(); 109 - const executeQuery = jest 110 + const executeQuery = vi 110 111 .spyOn(client, 'executeQuery') 111 112 .mockImplementation(() => subject.source); 112 113
+6 -5
packages/vue-urql/src/useSubscription.test.ts
··· 1 1 import { nextTick, reactive, ref } from 'vue'; 2 + import { vi, expect, it, describe } from 'vitest'; 2 3 3 - jest.mock('./useClient.ts', () => ({ 4 + vi.mock('./useClient.ts', async () => ({ 4 5 __esModule: true, 5 - ...jest.requireActual('./useClient.ts'), 6 + ...((await vi.importActual('./useClient.ts')) as object), 6 7 useClient: () => ref(client), 7 8 })); 8 9 ··· 15 16 describe('useSubscription', () => { 16 17 it('subscribes to a subscription and updates data', async () => { 17 18 const subject = makeSubject<any>(); 18 - const executeQuery = jest 19 + const executeQuery = vi 19 20 .spyOn(client, 'executeSubscription') 20 21 .mockImplementation(() => subject.source); 21 22 ··· 57 58 58 59 it('updates the executed subscription when inputs change', async () => { 59 60 const subject = makeSubject<any>(); 60 - const executeSubscription = jest 61 + const executeSubscription = vi 61 62 .spyOn(client, 'executeSubscription') 62 63 .mockImplementation(() => subject.source); 63 64 ··· 98 99 }); 99 100 it('supports a custom scanning handler', async () => { 100 101 const subject = makeSubject<any>(); 101 - const executeSubscription = jest 102 + const executeSubscription = vi 102 103 .spyOn(client, 'executeSubscription') 103 104 .mockImplementation(() => subject.source); 104 105
+1 -1
packages/vue-urql/tsconfig.json
··· 3 3 "include": ["src"], 4 4 "compilerOptions": { 5 5 "baseUrl": "./", 6 - "types": ["node", "vue", "jest"], 6 + "types": ["node", "vue"], 7 7 "paths": { 8 8 "urql": ["../../node_modules/urql/src"], 9 9 "*-urql": ["../../node_modules/*-urql/src"],
+3 -7
scripts/eslint/common.js
··· 22 22 plugins: [ 23 23 'react-hooks', 24 24 'prettier', 25 - 'jest', 26 25 'es5', 27 26 ], 28 27 rules: { ··· 45 44 trailingComma: 'es5', 46 45 }], 47 46 }, 48 - 47 + globals: { 48 + "vi": true 49 + }, 49 50 overrides: [ 50 51 { 51 52 files: [ ··· 58 59 'es5/no-for-of': 'off', 59 60 'es5/no-generators': 'off', 60 61 'es5/no-typeof-symbol': 'off', 61 - 62 - 'jest/no-disabled-tests': 'error', 63 - 'jest/no-focused-tests': 'error', 64 - 'jest/no-identical-title': 'warn', 65 - 'jest/consistent-test-it': ['warn', { fn: 'it' }], 66 62 } 67 63 } 68 64 ],
-21
scripts/jest/preset.js
··· 1 - module.exports = { 2 - setupFiles: [ 3 - require.resolve('./setup.js') 4 - ], 5 - clearMocks: true, 6 - transform: { 7 - '^.+\\.tsx?$': '@sucrase/jest-plugin', 8 - }, 9 - moduleNameMapper: { 10 - "^urql$": "<rootDir>/../../node_modules/urql/src", 11 - "^(.*-urql)$": "<rootDir>/../../node_modules/$1/src", 12 - "^@urql/(.*)/(.*)$": "<rootDir>/../../node_modules/@urql/$1/src/$2", 13 - "^@urql/(.*)$": "<rootDir>/../../node_modules/@urql/$1/src", 14 - }, 15 - watchPlugins: ['jest-watch-yarn-workspaces'], 16 - testRegex: '(src/.*(\\.|/)(test|spec))\\.tsx?$', 17 - moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'json'], 18 - collectCoverageFrom: ['<rootDir>/src/**/*.{ts,tsx}'], 19 - coveragePathIgnorePatterns: ['<rootDir>/src/test-utils'], 20 - testPathIgnorePatterns: ["<rootDir>/e2e-tests/*"], 21 - };
-19
scripts/jest/setup.js
··· 1 - // This script is run before each `.test.ts` file. 2 - 3 - global.AbortController = undefined; 4 - global.fetch = jest.fn(); 5 - 6 - process.on('unhandledRejection', error => { 7 - throw error; 8 - }); 9 - 10 - const originalConsole = console; 11 - global.console = { 12 - ...originalConsole, 13 - warn: jest.SpyInstance = () => { /* noop */ }, 14 - error: jest.SpyInstance = (message) => { throw new Error(message); } 15 - }; 16 - 17 - jest.spyOn(console, 'log'); 18 - jest.spyOn(console, 'warn'); 19 - jest.spyOn(console, 'error');
+20
scripts/vitest/setup.js
··· 1 + // This script is run before each `.test.ts` file. 2 + import { vi } from 'vitest'; 3 + 4 + global.AbortController = undefined; 5 + global.fetch = vi.fn(); 6 + 7 + process.on('unhandledRejection', error => { 8 + throw error; 9 + }); 10 + 11 + const originalConsole = console; 12 + global.console = { 13 + ...originalConsole, 14 + warn: vi.SpyInstance = () => { /* noop */ }, 15 + error: vi.SpyInstance = (message) => { throw new Error(message); } 16 + }; 17 + 18 + vi.spyOn(console, 'log'); 19 + vi.spyOn(console, 'warn'); 20 + vi.spyOn(console, 'error');
+1 -1
tsconfig.json
··· 1 1 { 2 2 "compilerOptions": { 3 3 "baseUrl": "./", 4 - "types": ["node", "jest"], 4 + "types": ["node"], 5 5 "paths": { 6 6 "urql": ["packages/react-urql/src"], 7 7 "*-urql": ["packages/*-urql/src"],
+28
vitest.config.ts
··· 1 + import { defineConfig } from 'vitest/config'; 2 + import path from 'path'; 3 + 4 + export default defineConfig({ 5 + test: { 6 + environment: 'jsdom', 7 + globals: false, 8 + maxConcurrency: 20, 9 + setupFiles: [path.resolve(__dirname, 'scripts/vitest/setup.js')], 10 + clearMocks: true, 11 + alias: { 12 + urql: path.resolve(__dirname, 'node_modules/urql/src'), 13 + '@urql/core': path.resolve(__dirname, 'node_modules/@urql/core/src'), 14 + '@urql/introspection': path.resolve( 15 + __dirname, 16 + 'node_modules/@urql/introspection/src' 17 + ), 18 + }, 19 + exclude: [ 20 + '**/node_modules/**', 21 + '**/dist/**', 22 + '**/cypress/**', 23 + '**/e2e-tests/**', 24 + '**/.{idea,git,cache,output,temp}/**', 25 + '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress}.config.*', 26 + ], 27 + }, 28 + });
+356 -1341
yarn.lock
··· 99 99 semver "^5.4.1" 100 100 source-map "^0.5.0" 101 101 102 - "@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.2.0", "@babel/core@^7.20.2", "@babel/core@^7.5.5", "@babel/core@^7.7.5": 102 + "@babel/core@^7.12.10", "@babel/core@^7.2.0", "@babel/core@^7.20.2", "@babel/core@^7.5.5", "@babel/core@^7.7.5": 103 103 version "7.20.2" 104 104 resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.2.tgz#8dc9b1620a673f92d3624bd926dc49a52cf25b92" 105 105 integrity sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g== ··· 356 356 chalk "^2.0.0" 357 357 js-tokens "^4.0.0" 358 358 359 - "@babel/parser@^7.1.0", "@babel/parser@^7.12.0", "@babel/parser@^7.12.7", "@babel/parser@^7.18.10", "@babel/parser@^7.20.1", "@babel/parser@^7.20.2": 359 + "@babel/parser@^7.12.0", "@babel/parser@^7.12.7", "@babel/parser@^7.18.10", "@babel/parser@^7.20.1", "@babel/parser@^7.20.2": 360 360 version "7.20.3" 361 361 resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.3.tgz#5358cf62e380cf69efcb87a7bb922ff88bfac6e2" 362 362 integrity sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg== ··· 512 512 dependencies: 513 513 "@babel/helper-plugin-utils" "^7.8.0" 514 514 515 - "@babel/plugin-syntax-bigint@^7.8.3": 516 - version "7.8.3" 517 - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" 518 - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== 519 - dependencies: 520 - "@babel/helper-plugin-utils" "^7.8.0" 521 - 522 - "@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": 515 + "@babel/plugin-syntax-class-properties@^7.12.13": 523 516 version "7.12.13" 524 517 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" 525 518 integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== ··· 561 554 dependencies: 562 555 "@babel/helper-plugin-utils" "^7.12.13" 563 556 564 - "@babel/plugin-syntax-import-meta@^7.8.3": 565 - version "7.10.4" 566 - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" 567 - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== 568 - dependencies: 569 - "@babel/helper-plugin-utils" "^7.10.4" 570 - 571 557 "@babel/plugin-syntax-json-strings@^7.8.3": 572 558 version "7.8.3" 573 559 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" ··· 589 575 dependencies: 590 576 "@babel/helper-plugin-utils" "^7.18.6" 591 577 592 - "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": 578 + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": 593 579 version "7.10.4" 594 580 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" 595 581 integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== ··· 603 589 dependencies: 604 590 "@babel/helper-plugin-utils" "^7.8.0" 605 591 606 - "@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": 592 + "@babel/plugin-syntax-numeric-separator@^7.10.4": 607 593 version "7.10.4" 608 594 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" 609 595 integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== ··· 631 617 dependencies: 632 618 "@babel/helper-plugin-utils" "^7.8.0" 633 619 634 - "@babel/plugin-syntax-top-level-await@^7.12.13", "@babel/plugin-syntax-top-level-await@^7.8.3": 620 + "@babel/plugin-syntax-top-level-await@^7.12.13": 635 621 version "7.12.13" 636 622 resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" 637 623 integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== ··· 1109 1095 dependencies: 1110 1096 regenerator-runtime "^0.13.4" 1111 1097 1112 - "@babel/template@^7.12.13", "@babel/template@^7.12.7", "@babel/template@^7.18.10", "@babel/template@^7.3.3": 1098 + "@babel/template@^7.12.13", "@babel/template@^7.12.7", "@babel/template@^7.18.10": 1113 1099 version "7.18.10" 1114 1100 resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" 1115 1101 integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== ··· 1118 1104 "@babel/parser" "^7.18.10" 1119 1105 "@babel/types" "^7.18.10" 1120 1106 1121 - "@babel/traverse@^7.1.0", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.20.1", "@babel/traverse@^7.4.5": 1107 + "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.20.1", "@babel/traverse@^7.4.5": 1122 1108 version "7.20.1" 1123 1109 resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.1.tgz#9b15ccbf882f6d107eeeecf263fbcdd208777ec8" 1124 1110 integrity sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA== ··· 1143 1129 lodash "^4.17.13" 1144 1130 to-fast-properties "^2.0.0" 1145 1131 1146 - "@babel/types@^7.0.0", "@babel/types@^7.12.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.7", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.14", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": 1132 + "@babel/types@^7.12.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.7", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.14", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.4.4": 1147 1133 version "7.20.2" 1148 1134 resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.2.tgz#67ac09266606190f496322dbaff360fdaa5e7842" 1149 1135 integrity sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog== ··· 1151 1137 "@babel/helper-string-parser" "^7.19.4" 1152 1138 "@babel/helper-validator-identifier" "^7.19.1" 1153 1139 to-fast-properties "^2.0.0" 1154 - 1155 - "@bcoe/v8-coverage@^0.2.3": 1156 - version "0.2.3" 1157 - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" 1158 - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== 1159 1140 1160 1141 "@changesets/apply-release-plan@^5.0.0": 1161 1142 version "5.0.0" ··· 1349 1330 human-id "^1.0.2" 1350 1331 prettier "^1.19.1" 1351 1332 1352 - "@cnakazawa/watch@^1.0.3": 1353 - version "1.0.4" 1354 - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" 1355 - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== 1356 - dependencies: 1357 - exec-sh "^0.3.2" 1358 - minimist "^1.2.0" 1359 - 1360 1333 "@cypress/react@^7.0.1": 1361 1334 version "7.0.1" 1362 1335 resolved "https://registry.yarnpkg.com/@cypress/react/-/react-7.0.1.tgz#30089e918434a934db70e5d0d7efaa49c653c791" ··· 1555 1528 resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.0.tgz#f3933a44e365864f4dad5db94158106d511e8131" 1556 1529 integrity sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug== 1557 1530 1558 - "@istanbuljs/load-nyc-config@^1.0.0": 1559 - version "1.1.0" 1560 - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" 1561 - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== 1562 - dependencies: 1563 - camelcase "^5.3.1" 1564 - find-up "^4.1.0" 1565 - get-package-type "^0.1.0" 1566 - js-yaml "^3.13.1" 1567 - resolve-from "^5.0.0" 1568 - 1569 - "@istanbuljs/schema@^0.1.2": 1570 - version "0.1.3" 1571 - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" 1572 - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== 1573 - 1574 - "@jest/console@^26.6.2": 1575 - version "26.6.2" 1576 - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" 1577 - integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== 1578 - dependencies: 1579 - "@jest/types" "^26.6.2" 1580 - "@types/node" "*" 1581 - chalk "^4.0.0" 1582 - jest-message-util "^26.6.2" 1583 - jest-util "^26.6.2" 1584 - slash "^3.0.0" 1585 - 1586 - "@jest/core@^26.6.3": 1587 - version "26.6.3" 1588 - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" 1589 - integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== 1590 - dependencies: 1591 - "@jest/console" "^26.6.2" 1592 - "@jest/reporters" "^26.6.2" 1593 - "@jest/test-result" "^26.6.2" 1594 - "@jest/transform" "^26.6.2" 1595 - "@jest/types" "^26.6.2" 1596 - "@types/node" "*" 1597 - ansi-escapes "^4.2.1" 1598 - chalk "^4.0.0" 1599 - exit "^0.1.2" 1600 - graceful-fs "^4.2.4" 1601 - jest-changed-files "^26.6.2" 1602 - jest-config "^26.6.3" 1603 - jest-haste-map "^26.6.2" 1604 - jest-message-util "^26.6.2" 1605 - jest-regex-util "^26.0.0" 1606 - jest-resolve "^26.6.2" 1607 - jest-resolve-dependencies "^26.6.3" 1608 - jest-runner "^26.6.3" 1609 - jest-runtime "^26.6.3" 1610 - jest-snapshot "^26.6.2" 1611 - jest-util "^26.6.2" 1612 - jest-validate "^26.6.2" 1613 - jest-watcher "^26.6.2" 1614 - micromatch "^4.0.2" 1615 - p-each-series "^2.1.0" 1616 - rimraf "^3.0.0" 1617 - slash "^3.0.0" 1618 - strip-ansi "^6.0.0" 1619 - 1620 - "@jest/environment@^26.6.2": 1621 - version "26.6.2" 1622 - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" 1623 - integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== 1624 - dependencies: 1625 - "@jest/fake-timers" "^26.6.2" 1626 - "@jest/types" "^26.6.2" 1627 - "@types/node" "*" 1628 - jest-mock "^26.6.2" 1629 - 1630 - "@jest/fake-timers@^26.6.2": 1631 - version "26.6.2" 1632 - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" 1633 - integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== 1634 - dependencies: 1635 - "@jest/types" "^26.6.2" 1636 - "@sinonjs/fake-timers" "^6.0.1" 1637 - "@types/node" "*" 1638 - jest-message-util "^26.6.2" 1639 - jest-mock "^26.6.2" 1640 - jest-util "^26.6.2" 1641 - 1642 - "@jest/globals@^26.6.2": 1643 - version "26.6.2" 1644 - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" 1645 - integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== 1646 - dependencies: 1647 - "@jest/environment" "^26.6.2" 1648 - "@jest/types" "^26.6.2" 1649 - expect "^26.6.2" 1650 - 1651 - "@jest/reporters@^26.6.2": 1652 - version "26.6.2" 1653 - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" 1654 - integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== 1655 - dependencies: 1656 - "@bcoe/v8-coverage" "^0.2.3" 1657 - "@jest/console" "^26.6.2" 1658 - "@jest/test-result" "^26.6.2" 1659 - "@jest/transform" "^26.6.2" 1660 - "@jest/types" "^26.6.2" 1661 - chalk "^4.0.0" 1662 - collect-v8-coverage "^1.0.0" 1663 - exit "^0.1.2" 1664 - glob "^7.1.2" 1665 - graceful-fs "^4.2.4" 1666 - istanbul-lib-coverage "^3.0.0" 1667 - istanbul-lib-instrument "^4.0.3" 1668 - istanbul-lib-report "^3.0.0" 1669 - istanbul-lib-source-maps "^4.0.0" 1670 - istanbul-reports "^3.0.2" 1671 - jest-haste-map "^26.6.2" 1672 - jest-resolve "^26.6.2" 1673 - jest-util "^26.6.2" 1674 - jest-worker "^26.6.2" 1675 - slash "^3.0.0" 1676 - source-map "^0.6.0" 1677 - string-length "^4.0.1" 1678 - terminal-link "^2.0.0" 1679 - v8-to-istanbul "^7.0.0" 1680 - optionalDependencies: 1681 - node-notifier "^8.0.0" 1682 - 1683 - "@jest/source-map@^26.6.2": 1684 - version "26.6.2" 1685 - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" 1686 - integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== 1687 - dependencies: 1688 - callsites "^3.0.0" 1689 - graceful-fs "^4.2.4" 1690 - source-map "^0.6.0" 1691 - 1692 - "@jest/test-result@^26.6.2": 1693 - version "26.6.2" 1694 - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" 1695 - integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== 1696 - dependencies: 1697 - "@jest/console" "^26.6.2" 1698 - "@jest/types" "^26.6.2" 1699 - "@types/istanbul-lib-coverage" "^2.0.0" 1700 - collect-v8-coverage "^1.0.0" 1701 - 1702 - "@jest/test-sequencer@^26.6.3": 1703 - version "26.6.3" 1704 - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" 1705 - integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== 1706 - dependencies: 1707 - "@jest/test-result" "^26.6.2" 1708 - graceful-fs "^4.2.4" 1709 - jest-haste-map "^26.6.2" 1710 - jest-runner "^26.6.3" 1711 - jest-runtime "^26.6.3" 1712 - 1713 - "@jest/transform@^26.6.2": 1714 - version "26.6.2" 1715 - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" 1716 - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== 1717 - dependencies: 1718 - "@babel/core" "^7.1.0" 1719 - "@jest/types" "^26.6.2" 1720 - babel-plugin-istanbul "^6.0.0" 1721 - chalk "^4.0.0" 1722 - convert-source-map "^1.4.0" 1723 - fast-json-stable-stringify "^2.0.0" 1724 - graceful-fs "^4.2.4" 1725 - jest-haste-map "^26.6.2" 1726 - jest-regex-util "^26.0.0" 1727 - jest-util "^26.6.2" 1728 - micromatch "^4.0.2" 1729 - pirates "^4.0.1" 1730 - slash "^3.0.0" 1731 - source-map "^0.6.1" 1732 - write-file-atomic "^3.0.0" 1733 - 1734 1531 "@jest/types@^26.6.2": 1735 1532 version "26.6.2" 1736 1533 resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" ··· 2166 1963 version "0.7.0" 2167 1964 resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" 2168 1965 integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== 2169 - 2170 - "@sinonjs/commons@^1.7.0": 2171 - version "1.8.3" 2172 - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" 2173 - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== 2174 - dependencies: 2175 - type-detect "4.0.8" 2176 - 2177 - "@sinonjs/fake-timers@^6.0.1": 2178 - version "6.0.1" 2179 - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" 2180 - integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== 2181 - dependencies: 2182 - "@sinonjs/commons" "^1.7.0" 2183 1966 2184 1967 "@storybook/addons@6.2.9", "@storybook/addons@>=6.0.28": 2185 1968 version "6.2.9" ··· 2674 2457 resolve-from "^5.0.0" 2675 2458 store2 "^2.12.0" 2676 2459 2677 - "@sucrase/jest-plugin@^2.2.1": 2678 - version "2.2.1" 2679 - resolved "https://registry.yarnpkg.com/@sucrase/jest-plugin/-/jest-plugin-2.2.1.tgz#659d31f34412fc9c50e6e0622298baaf27b75366" 2680 - integrity sha512-5fG+kHOlfwPNi82MCvTFQdAg50YQymGbdwH9nzTA9D9FhJVHynTjadXi58gb/Ae17RMvinY0+Fglx33MB056Rg== 2681 - dependencies: 2682 - sucrase "^3.18.0" 2683 - 2684 2460 "@testing-library/dom@^7.16.2", "@testing-library/dom@^7.28.1": 2685 2461 version "7.30.4" 2686 2462 resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.30.4.tgz#c6a4a91557e92035fd565246bbbfb8107aa4634d" ··· 2722 2498 "@babel/runtime" "^7.12.5" 2723 2499 "@testing-library/dom" "^7.28.1" 2724 2500 2501 + "@tootallnate/once@2": 2502 + version "2.0.0" 2503 + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" 2504 + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== 2505 + 2725 2506 "@types/anymatch@*": 2726 2507 version "1.3.1" 2727 2508 resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" ··· 2732 2513 resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.1.tgz#78b5433344e2f92e8b306c06a5622c50c245bf6b" 2733 2514 integrity sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg== 2734 2515 2735 - "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": 2736 - version "7.1.14" 2737 - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402" 2738 - integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g== 2739 - dependencies: 2740 - "@babel/parser" "^7.1.0" 2741 - "@babel/types" "^7.0.0" 2742 - "@types/babel__generator" "*" 2743 - "@types/babel__template" "*" 2744 - "@types/babel__traverse" "*" 2745 - 2746 - "@types/babel__generator@*": 2747 - version "7.6.2" 2748 - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" 2749 - integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== 2750 - dependencies: 2751 - "@babel/types" "^7.0.0" 2752 - 2753 - "@types/babel__template@*": 2754 - version "7.4.0" 2755 - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" 2756 - integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== 2757 - dependencies: 2758 - "@babel/parser" "^7.1.0" 2759 - "@babel/types" "^7.0.0" 2760 - 2761 - "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": 2762 - version "7.11.1" 2763 - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.1.tgz#654f6c4f67568e24c23b367e947098c6206fa639" 2764 - integrity sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw== 2765 - dependencies: 2766 - "@babel/types" "^7.3.0" 2767 - 2768 2516 "@types/braces@*": 2769 2517 version "3.0.0" 2770 2518 resolved "https://registry.yarnpkg.com/@types/braces/-/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb" 2771 2519 integrity sha512-TbH79tcyi9FHwbyboOKeRachRq63mSuWYXOflsNO9ZyE5ClQ/JaozNKl+aWUq87qPNsXasXxi2AbgfwIJ+8GQw== 2520 + 2521 + "@types/chai-subset@^1.3.3": 2522 + version "1.3.3" 2523 + resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.3.tgz#97893814e92abd2c534de422cb377e0e0bdaac94" 2524 + integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw== 2525 + dependencies: 2526 + "@types/chai" "*" 2527 + 2528 + "@types/chai@*", "@types/chai@^4.3.3": 2529 + version "4.3.4" 2530 + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.4.tgz#e913e8175db8307d78b4e8fa690408ba6b65dee4" 2531 + integrity sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw== 2772 2532 2773 2533 "@types/cheerio@*": 2774 2534 version "0.22.28" ··· 2822 2582 "@types/minimatch" "*" 2823 2583 "@types/node" "*" 2824 2584 2825 - "@types/graceful-fs@^4.1.2": 2826 - version "4.1.5" 2827 - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" 2828 - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== 2829 - dependencies: 2830 - "@types/node" "*" 2831 - 2832 2585 "@types/hast@^2.0.0": 2833 2586 version "2.3.1" 2834 2587 resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.1.tgz#b16872f2a6144c7025f296fb9636a667ebb79cd9" ··· 2846 2599 resolved "https://registry.yarnpkg.com/@types/is-function/-/is-function-1.0.0.tgz#1b0b819b1636c7baf0d6785d030d12edf70c3e83" 2847 2600 integrity sha512-iTs9HReBu7evG77Q4EC8hZnqRt57irBDkK9nvmHroiOIVwYMQc4IvYvdRgwKfYepunIY7Oh/dBuuld+Gj9uo6w== 2848 2601 2849 - "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": 2602 + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": 2850 2603 version "2.0.3" 2851 2604 resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" 2852 2605 integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== ··· 2865 2618 dependencies: 2866 2619 "@types/istanbul-lib-report" "*" 2867 2620 2868 - "@types/jest@^26.0.23": 2869 - version "26.0.23" 2870 - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.23.tgz#a1b7eab3c503b80451d019efb588ec63522ee4e7" 2871 - integrity sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA== 2872 - dependencies: 2873 - jest-diff "^26.0.0" 2874 - pretty-format "^26.0.0" 2875 - 2876 2621 "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": 2877 2622 version "7.0.7" 2878 2623 resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" ··· 2962 2707 resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" 2963 2708 integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== 2964 2709 2965 - "@types/prettier@^2.0.0": 2966 - version "2.2.3" 2967 - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.3.tgz#ef65165aea2924c9359205bf748865b8881753c0" 2968 - integrity sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA== 2969 - 2970 2710 "@types/pretty-hrtime@^1.0.0": 2971 2711 version "1.0.0" 2972 2712 resolved "https://registry.yarnpkg.com/@types/pretty-hrtime/-/pretty-hrtime-1.0.0.tgz#c5a2d644a135e988b2932f99737e67b3c62528d0" ··· 3053 2793 version "0.1.2" 3054 2794 resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" 3055 2795 integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== 3056 - 3057 - "@types/stack-utils@^2.0.0": 3058 - version "2.0.0" 3059 - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" 3060 - integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== 3061 2796 3062 2797 "@types/tapable@^1", "@types/tapable@^1.0.5": 3063 2798 version "1.0.7" ··· 3135 2870 semver "^7.3.2" 3136 2871 tsutils "^3.17.1" 3137 2872 3138 - "@typescript-eslint/experimental-utils@4.22.0", "@typescript-eslint/experimental-utils@^4.0.1": 2873 + "@typescript-eslint/experimental-utils@4.22.0": 3139 2874 version "4.22.0" 3140 2875 resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.22.0.tgz#68765167cca531178e7b650a53456e6e0bef3b1f" 3141 2876 integrity sha512-xJXHHl6TuAxB5AWiVrGhvbGL8/hbiCQ8FiWwObO3r0fnvBdrbWEDy1hlvGQOAWc6qsCWuWMKdVWlLAEMpxnddg== ··· 3406 3141 resolved "https://registry.yarnpkg.com/@zeit/schemas/-/schemas-2.6.0.tgz#004e8e553b4cd53d538bd38eac7bcbf58a867fe3" 3407 3142 integrity sha512-uUrgZ8AxS+Lio0fZKAipJjAh415JyrOZowliZAzmnJSsf7piVL5w+G0+gFJ0KSu3QRhvui/7zuvpLz03YjXAhg== 3408 3143 3409 - abab@^2.0.3, abab@^2.0.5: 3410 - version "2.0.5" 3411 - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" 3412 - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== 3144 + abab@^2.0.6: 3145 + version "2.0.6" 3146 + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" 3147 + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== 3413 3148 3414 3149 accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: 3415 3150 version "1.3.7" ··· 3419 3154 mime-types "~2.1.24" 3420 3155 negotiator "0.6.2" 3421 3156 3422 - acorn-globals@^6.0.0: 3423 - version "6.0.0" 3424 - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" 3425 - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== 3157 + acorn-globals@^7.0.0: 3158 + version "7.0.1" 3159 + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" 3160 + integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== 3426 3161 dependencies: 3427 - acorn "^7.1.1" 3428 - acorn-walk "^7.1.1" 3162 + acorn "^8.1.0" 3163 + acorn-walk "^8.0.2" 3429 3164 3430 3165 acorn-jsx@^5.3.1: 3431 3166 version "5.3.1" ··· 3436 3171 version "7.2.0" 3437 3172 resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" 3438 3173 integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== 3174 + 3175 + acorn-walk@^8.0.2, acorn-walk@^8.2.0: 3176 + version "8.2.0" 3177 + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" 3178 + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== 3439 3179 3440 3180 acorn@^6.4.1: 3441 3181 version "6.4.2" ··· 3447 3187 resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 3448 3188 integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 3449 3189 3450 - acorn@^8.1.0, acorn@^8.5.0: 3451 - version "8.7.1" 3452 - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" 3453 - integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== 3190 + acorn@^8.1.0, acorn@^8.5.0, acorn@^8.8.0, acorn@^8.8.1: 3191 + version "8.8.1" 3192 + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" 3193 + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== 3454 3194 3455 3195 address@1.1.2, address@^1.0.1: 3456 3196 version "1.1.2" ··· 3462 3202 resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" 3463 3203 integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= 3464 3204 3205 + agent-base@6: 3206 + version "6.0.2" 3207 + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" 3208 + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== 3209 + dependencies: 3210 + debug "4" 3211 + 3465 3212 aggregate-error@^3.0.0: 3466 3213 version "3.1.0" 3467 3214 resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" ··· 3582 3329 resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 3583 3330 integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 3584 3331 3585 - ansi-escapes@^3.1.0, ansi-escapes@^3.2.0: 3332 + ansi-escapes@^3.2.0: 3586 3333 version "3.2.0" 3587 3334 resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" 3588 3335 integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== 3589 3336 3590 - ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.1: 3337 + ansi-escapes@^4.3.0, ansi-escapes@^4.3.1: 3591 3338 version "4.3.2" 3592 3339 resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" 3593 3340 integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== ··· 3653 3400 micromatch "^3.1.4" 3654 3401 normalize-path "^2.1.1" 3655 3402 3656 - anymatch@^3.0.3, anymatch@~3.1.1: 3403 + anymatch@~3.1.1: 3657 3404 version "3.1.2" 3658 3405 resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 3659 3406 integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== ··· 3866 3613 dependencies: 3867 3614 object-assign "^4.1.1" 3868 3615 util "0.10.3" 3616 + 3617 + assertion-error@^1.1.0: 3618 + version "1.1.0" 3619 + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" 3620 + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== 3869 3621 3870 3622 assign-symbols@^1.0.0: 3871 3623 version "1.0.0" ··· 3966 3718 resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" 3967 3719 integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== 3968 3720 3969 - babel-jest@^26.6.3: 3970 - version "26.6.3" 3971 - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" 3972 - integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== 3973 - dependencies: 3974 - "@jest/transform" "^26.6.2" 3975 - "@jest/types" "^26.6.2" 3976 - "@types/babel__core" "^7.1.7" 3977 - babel-plugin-istanbul "^6.0.0" 3978 - babel-preset-jest "^26.6.2" 3979 - chalk "^4.0.0" 3980 - graceful-fs "^4.2.4" 3981 - slash "^3.0.0" 3982 - 3983 3721 babel-loader@^8.0.6, babel-loader@^8.2.2: 3984 3722 version "8.2.2" 3985 3723 resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" ··· 4033 3771 dependencies: 4034 3772 "@babel/helper-plugin-utils" "7.10.4" 4035 3773 4036 - babel-plugin-istanbul@^6.0.0: 4037 - version "6.0.0" 4038 - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" 4039 - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== 4040 - dependencies: 4041 - "@babel/helper-plugin-utils" "^7.0.0" 4042 - "@istanbuljs/load-nyc-config" "^1.0.0" 4043 - "@istanbuljs/schema" "^0.1.2" 4044 - istanbul-lib-instrument "^4.0.0" 4045 - test-exclude "^6.0.0" 4046 - 4047 - babel-plugin-jest-hoist@^26.6.2: 4048 - version "26.6.2" 4049 - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" 4050 - integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== 4051 - dependencies: 4052 - "@babel/template" "^7.3.3" 4053 - "@babel/types" "^7.3.3" 4054 - "@types/babel__core" "^7.0.0" 4055 - "@types/babel__traverse" "^7.0.6" 4056 - 4057 3774 babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.6.1, babel-plugin-macros@^2.8.0: 4058 3775 version "2.8.0" 4059 3776 resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" ··· 4145 3862 dependencies: 4146 3863 "@babel/helper-module-imports" "^7.0.0" 4147 3864 4148 - babel-preset-current-node-syntax@^1.0.0: 4149 - version "1.0.1" 4150 - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" 4151 - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== 4152 - dependencies: 4153 - "@babel/plugin-syntax-async-generators" "^7.8.4" 4154 - "@babel/plugin-syntax-bigint" "^7.8.3" 4155 - "@babel/plugin-syntax-class-properties" "^7.8.3" 4156 - "@babel/plugin-syntax-import-meta" "^7.8.3" 4157 - "@babel/plugin-syntax-json-strings" "^7.8.3" 4158 - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" 4159 - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" 4160 - "@babel/plugin-syntax-numeric-separator" "^7.8.3" 4161 - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" 4162 - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" 4163 - "@babel/plugin-syntax-optional-chaining" "^7.8.3" 4164 - "@babel/plugin-syntax-top-level-await" "^7.8.3" 4165 - 4166 - babel-preset-jest@^26.6.2: 4167 - version "26.6.2" 4168 - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" 4169 - integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== 4170 - dependencies: 4171 - babel-plugin-jest-hoist "^26.6.2" 4172 - babel-preset-current-node-syntax "^1.0.0" 4173 - 4174 3865 babel-runtime@^6.26.0: 4175 3866 version "6.26.0" 4176 3867 resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" ··· 4454 4145 resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" 4455 4146 integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= 4456 4147 4457 - browser-process-hrtime@^1.0.0: 4458 - version "1.0.0" 4459 - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" 4460 - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== 4461 - 4462 4148 browserify-aes@^1.0.0, browserify-aes@^1.0.4: 4463 4149 version "1.2.0" 4464 4150 resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" ··· 4558 4244 node-releases "^2.0.6" 4559 4245 update-browserslist-db "^1.0.9" 4560 4246 4561 - bser@2.1.1: 4562 - version "2.1.1" 4563 - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" 4564 - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== 4565 - dependencies: 4566 - node-int64 "^0.4.0" 4567 - 4568 4247 buffer-alloc-unsafe@^1.1.0: 4569 4248 version "1.1.0" 4570 4249 resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" ··· 4802 4481 resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 4803 4482 integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 4804 4483 4805 - camelcase@^6.0.0: 4806 - version "6.2.0" 4807 - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" 4808 - integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== 4809 - 4810 4484 camelize@^1.0.0: 4811 4485 version "1.0.0" 4812 4486 resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" ··· 4827 4501 resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz#e7c59bd1bc518fae03a4656be442ce6c4887a795" 4828 4502 integrity sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ== 4829 4503 4830 - capture-exit@^2.0.0: 4831 - version "2.0.0" 4832 - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" 4833 - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== 4834 - dependencies: 4835 - rsvp "^4.8.4" 4836 - 4837 4504 case-sensitive-paths-webpack-plugin@^2.2.0, case-sensitive-paths-webpack-plugin@^2.3.0: 4838 4505 version "2.4.0" 4839 4506 resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" ··· 4859 4526 resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" 4860 4527 integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== 4861 4528 4529 + chai@^4.3.6: 4530 + version "4.3.7" 4531 + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" 4532 + integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== 4533 + dependencies: 4534 + assertion-error "^1.1.0" 4535 + check-error "^1.0.2" 4536 + deep-eql "^4.1.2" 4537 + get-func-name "^2.0.0" 4538 + loupe "^2.3.1" 4539 + pathval "^1.1.1" 4540 + type-detect "^4.0.5" 4541 + 4862 4542 chalk@2.4.1: 4863 4543 version "2.4.1" 4864 4544 resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" ··· 4901 4581 ansi-styles "^4.1.0" 4902 4582 supports-color "^7.1.0" 4903 4583 4904 - char-regex@^1.0.2: 4905 - version "1.0.2" 4906 - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" 4907 - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== 4908 - 4909 4584 character-entities-html4@^1.0.0: 4910 4585 version "1.1.4" 4911 4586 resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125" ··· 4931 4606 resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" 4932 4607 integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== 4933 4608 4609 + check-error@^1.0.2: 4610 + version "1.0.2" 4611 + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" 4612 + integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== 4613 + 4934 4614 check-more-types@^2.24.0: 4935 4615 version "2.24.0" 4936 4616 resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" ··· 5035 4715 version "5.2.2" 5036 4716 resolved "https://registry.yarnpkg.com/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz#39e836079db1d3cf2f988dc48c5188a44058b600" 5037 4717 integrity sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ== 5038 - 5039 - cjs-module-lexer@^0.6.0: 5040 - version "0.6.0" 5041 - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" 5042 - integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== 5043 4718 5044 4719 cjs-module-lexer@^1.2.2: 5045 4720 version "1.2.2" ··· 5209 4884 resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" 5210 4885 integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= 5211 4886 5212 - co@^4.6.0: 5213 - version "4.6.0" 5214 - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 5215 - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= 5216 - 5217 4887 coa@^2.0.2: 5218 4888 version "2.0.2" 5219 4889 resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" ··· 5233 4903 resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" 5234 4904 integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== 5235 4905 5236 - collect-v8-coverage@^1.0.0: 5237 - version "1.0.1" 5238 - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" 5239 - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== 5240 - 5241 4906 collection-visit@^1.0.0: 5242 4907 version "1.0.0" 5243 4908 resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" ··· 5481 5146 resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 5482 5147 integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 5483 5148 5484 - convert-source-map@1.7.0, convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: 5149 + convert-source-map@1.7.0, convert-source-map@^1.1.0, convert-source-map@^1.5.0, convert-source-map@^1.7.0: 5485 5150 version "1.7.0" 5486 5151 resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" 5487 5152 integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== ··· 5774 5439 domutils "^1.7.0" 5775 5440 nth-check "^1.0.2" 5776 5441 5777 - css-select@^4.1.2: 5778 - version "4.1.2" 5779 - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.2.tgz#8b52b6714ed3a80d8221ec971c543f3b12653286" 5780 - integrity sha512-nu5ye2Hg/4ISq4XqdLY2bEatAcLIdt3OYGFc9Tm9n7VSlFBcfRv0gBNksHRgSdUDQGtN3XrZ94ztW+NfzkFSUw== 5781 - dependencies: 5782 - boolbase "^1.0.0" 5783 - css-what "^5.0.0" 5784 - domhandler "^4.2.0" 5785 - domutils "^2.6.0" 5786 - nth-check "^2.0.0" 5787 - 5788 - css-select@^4.2.1: 5442 + css-select@^4.1.2, css-select@^4.2.1: 5789 5443 version "4.3.0" 5790 5444 resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" 5791 5445 integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== ··· 5940 5594 dependencies: 5941 5595 css-tree "^1.1.2" 5942 5596 5943 - cssom@^0.4.4: 5944 - version "0.4.4" 5945 - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" 5946 - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== 5597 + cssom@^0.5.0: 5598 + version "0.5.0" 5599 + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" 5600 + integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== 5947 5601 5948 5602 cssom@~0.3.6: 5949 5603 version "0.3.8" ··· 6057 5711 resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" 6058 5712 integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== 6059 5713 6060 - data-urls@^2.0.0: 6061 - version "2.0.0" 6062 - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" 6063 - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== 5714 + data-urls@^3.0.2: 5715 + version "3.0.2" 5716 + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" 5717 + integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== 6064 5718 dependencies: 6065 - abab "^2.0.3" 6066 - whatwg-mimetype "^2.3.0" 6067 - whatwg-url "^8.0.0" 5719 + abab "^2.0.6" 5720 + whatwg-mimetype "^3.0.0" 5721 + whatwg-url "^11.0.0" 6068 5722 6069 5723 dataloader@^1.4.0: 6070 5724 version "1.4.0" ··· 6083 5737 dependencies: 6084 5738 ms "2.0.0" 6085 5739 5740 + debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.2, debug@^4.3.4: 5741 + version "4.3.4" 5742 + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 5743 + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 5744 + dependencies: 5745 + ms "2.1.2" 5746 + 6086 5747 debug@=3.1.0, debug@~3.1.0: 6087 5748 version "3.1.0" 6088 5749 resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" ··· 6097 5758 dependencies: 6098 5759 ms "^2.1.1" 6099 5760 6100 - debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.2: 6101 - version "4.3.3" 6102 - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" 6103 - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== 6104 - dependencies: 6105 - ms "2.1.2" 6106 - 6107 - debug@^4.3.4: 6108 - version "4.3.4" 6109 - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 6110 - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 6111 - dependencies: 6112 - ms "2.1.2" 6113 - 6114 5761 debug@~4.1.0: 6115 5762 version "4.1.1" 6116 5763 resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" ··· 6131 5778 resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 6132 5779 integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 6133 5780 6134 - decimal.js@^10.2.1: 6135 - version "10.2.1" 6136 - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" 6137 - integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== 5781 + decimal.js@^10.4.2: 5782 + version "10.4.2" 5783 + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.2.tgz#0341651d1d997d86065a2ce3a441fbd0d8e8b98e" 5784 + integrity sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA== 6138 5785 6139 5786 decode-uri-component@^0.2.0: 6140 5787 version "0.2.0" ··· 6213 5860 dependencies: 6214 5861 is-obj "^1.0.0" 6215 5862 5863 + deep-eql@^4.1.2: 5864 + version "4.1.2" 5865 + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.2.tgz#270ceb902f87724077e6f6449aed81463f42fc1c" 5866 + integrity sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w== 5867 + dependencies: 5868 + type-detect "^4.0.0" 5869 + 6216 5870 deep-equal@^1.0.1: 6217 5871 version "1.1.1" 6218 5872 resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" ··· 6231 5885 integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 6232 5886 6233 5887 deep-is@^0.1.3, deep-is@~0.1.3: 6234 - version "0.1.3" 6235 - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 6236 - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 5888 + version "0.1.4" 5889 + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 5890 + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 6237 5891 6238 5892 deep-object-diff@^1.1.0: 6239 5893 version "1.1.0" ··· 6362 6016 resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" 6363 6017 integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== 6364 6018 6365 - detect-newline@^3.0.0: 6366 - version "3.1.0" 6367 - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" 6368 - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== 6369 - 6370 6019 detect-node@^2.0.4: 6371 6020 version "2.0.5" 6372 6021 resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.5.tgz#9d270aa7eaa5af0b72c4c9d9b814e7f4ce738b79" ··· 6387 6036 dependencies: 6388 6037 address "^1.0.1" 6389 6038 debug "^2.6.0" 6390 - 6391 - diff-sequences@^26.6.2: 6392 - version "26.6.2" 6393 - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" 6394 - integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== 6395 6039 6396 6040 diffie-hellman@^5.0.0: 6397 6041 version "5.0.3" ··· 6517 6161 resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" 6518 6162 integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== 6519 6163 6520 - domexception@^2.0.1: 6521 - version "2.0.1" 6522 - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" 6523 - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== 6164 + domexception@^4.0.0: 6165 + version "4.0.0" 6166 + resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" 6167 + integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== 6524 6168 dependencies: 6525 - webidl-conversions "^5.0.0" 6169 + webidl-conversions "^7.0.0" 6526 6170 6527 6171 domhandler@^2.3.0: 6528 6172 version "2.4.2" ··· 6531 6175 dependencies: 6532 6176 domelementtype "1" 6533 6177 6534 - domhandler@^4.0.0, domhandler@^4.1.0, domhandler@^4.2.0: 6535 - version "4.2.0" 6536 - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" 6537 - integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== 6538 - dependencies: 6539 - domelementtype "^2.2.0" 6540 - 6541 - domhandler@^4.3.1: 6178 + domhandler@^4.0.0, domhandler@^4.1.0, domhandler@^4.2.0, domhandler@^4.3.1: 6542 6179 version "4.3.1" 6543 6180 resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" 6544 6181 integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== ··· 6553 6190 dom-serializer "0" 6554 6191 domelementtype "1" 6555 6192 6556 - domutils@^2.5.2, domutils@^2.6.0: 6557 - version "2.6.0" 6558 - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.6.0.tgz#2e15c04185d43fb16ae7057cb76433c6edb938b7" 6559 - integrity sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA== 6560 - dependencies: 6561 - dom-serializer "^1.0.1" 6562 - domelementtype "^2.2.0" 6563 - domhandler "^4.2.0" 6564 - 6565 - domutils@^2.8.0: 6193 + domutils@^2.5.2, domutils@^2.6.0, domutils@^2.8.0: 6566 6194 version "2.8.0" 6567 6195 resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" 6568 6196 integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== ··· 6715 6343 minimalistic-assert "^1.0.1" 6716 6344 minimalistic-crypto-utils "^1.0.1" 6717 6345 6718 - emittery@^0.7.1: 6719 - version "0.7.2" 6720 - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" 6721 - integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== 6722 - 6723 6346 "emoji-regex@>=6.0.0 <=6.1.1": 6724 6347 version "6.1.1" 6725 6348 resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e" ··· 6847 6470 version "2.2.0" 6848 6471 resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" 6849 6472 integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== 6473 + 6474 + entities@^4.4.0: 6475 + version "4.4.0" 6476 + resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" 6477 + integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== 6850 6478 6851 6479 enzyme-adapter-react-16@^1.15.2: 6852 6480 version "1.15.6" ··· 7136 6764 resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 7137 6765 integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 7138 6766 7139 - escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: 6767 + escape-string-regexp@2.0.0: 7140 6768 version "2.0.0" 7141 6769 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" 7142 6770 integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== ··· 7202 6830 read-pkg-up "^2.0.0" 7203 6831 resolve "^1.17.0" 7204 6832 tsconfig-paths "^3.9.0" 7205 - 7206 - eslint-plugin-jest@^24.3.6: 7207 - version "24.3.6" 7208 - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.3.6.tgz#5f0ca019183c3188c5ad3af8e80b41de6c8e9173" 7209 - integrity sha512-WOVH4TIaBLIeCX576rLcOgjNXqP+jNlCiEmRgFTfQtJ52DpwnIQKAVGlGPAN7CZ33bW6eNfHD6s8ZbEUTQubJg== 7210 - dependencies: 7211 - "@typescript-eslint/experimental-utils" "^4.0.1" 7212 6833 7213 6834 eslint-plugin-prettier@^3.4.0: 7214 6835 version "3.4.0" ··· 7399 7020 md5.js "^1.3.4" 7400 7021 safe-buffer "^5.1.1" 7401 7022 7402 - exec-sh@^0.3.2: 7403 - version "0.3.6" 7404 - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" 7405 - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== 7406 - 7407 - execa@4.1.0, execa@^4.0.0, execa@^4.0.1, execa@^4.1.0: 7023 + execa@4.1.0, execa@^4.0.1, execa@^4.1.0: 7408 7024 version "4.1.0" 7409 7025 resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" 7410 7026 integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== ··· 7485 7101 resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" 7486 7102 integrity sha1-KueOhdmJQVhnCwPUe+wfA72Ru50= 7487 7103 7488 - exit@^0.1.2: 7489 - version "0.1.2" 7490 - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" 7491 - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= 7492 - 7493 7104 expand-brackets@^2.1.4: 7494 7105 version "2.1.4" 7495 7106 resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" ··· 7502 7113 regex-not "^1.0.0" 7503 7114 snapdragon "^0.8.1" 7504 7115 to-regex "^3.0.1" 7505 - 7506 - expect@^26.6.2: 7507 - version "26.6.2" 7508 - resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" 7509 - integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== 7510 - dependencies: 7511 - "@jest/types" "^26.6.2" 7512 - ansi-styles "^4.0.0" 7513 - jest-get-type "^26.3.0" 7514 - jest-matcher-utils "^26.6.2" 7515 - jest-message-util "^26.6.2" 7516 - jest-regex-util "^26.0.0" 7517 7116 7518 7117 express@^4.16.3, express@^4.17.1: 7519 7118 version "4.17.1" ··· 7731 7330 integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== 7732 7331 dependencies: 7733 7332 websocket-driver ">=0.5.1" 7734 - 7735 - fb-watchman@^2.0.0: 7736 - version "2.0.1" 7737 - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" 7738 - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== 7739 - dependencies: 7740 - bser "2.1.1" 7741 7333 7742 7334 fd-slicer@~1.1.0: 7743 7335 version "1.1.0" ··· 8064 7656 combined-stream "^1.0.8" 8065 7657 mime-types "^2.1.12" 8066 7658 7659 + form-data@^4.0.0: 7660 + version "4.0.0" 7661 + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" 7662 + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 7663 + dependencies: 7664 + asynckit "^0.4.0" 7665 + combined-stream "^1.0.8" 7666 + mime-types "^2.1.12" 7667 + 8067 7668 form-data@~2.3.2: 8068 7669 version "2.3.3" 8069 7670 resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" ··· 8215 7816 bindings "^1.5.0" 8216 7817 nan "^2.12.1" 8217 7818 8218 - fsevents@^2.1.2, fsevents@~2.3.1, fsevents@~2.3.2: 7819 + fsevents@~2.3.1, fsevents@~2.3.2: 8219 7820 version "2.3.2" 8220 7821 resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 8221 7822 integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== ··· 8289 7890 resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 8290 7891 integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 8291 7892 7893 + get-func-name@^2.0.0: 7894 + version "2.0.0" 7895 + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" 7896 + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== 7897 + 8292 7898 get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: 8293 7899 version "1.1.1" 8294 7900 resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" ··· 8310 7916 resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" 8311 7917 integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== 8312 7918 8313 - get-package-type@^0.1.0: 8314 - version "0.1.0" 8315 - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" 8316 - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== 8317 - 8318 7919 get-proxy@^2.0.0: 8319 7920 version "2.1.0" 8320 7921 resolved "https://registry.yarnpkg.com/get-proxy/-/get-proxy-2.1.0.tgz#349f2b4d91d44c4d4d4e9cba2ad90143fac5ef93" ··· 8440 8041 resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" 8441 8042 integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== 8442 8043 8443 - glob@7.1.6, glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: 8044 + glob@7.1.6, glob@^7.0.0, glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: 8444 8045 version "7.1.6" 8445 8046 resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 8446 8047 integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== ··· 8599 8200 url-parse-lax "^3.0.0" 8600 8201 url-to-options "^1.0.1" 8601 8202 8602 - graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: 8203 + graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: 8603 8204 version "4.2.6" 8604 8205 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" 8605 8206 integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== ··· 8614 8215 resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.0.1.tgz#93a13cd4e0e38ca8d0832e79614c8578bfd34f10" 8615 8216 integrity sha512-oPvCuu6dlLdiz8gZupJ47o1clgb72r1u8NDBcQYjcV6G/iEdmE11B1bBlkhXRvV0LisP/SXRFP7tT6AgaTjpzg== 8616 8217 8617 - growly@^1.3.0: 8618 - version "1.3.0" 8619 - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" 8620 - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= 8621 - 8622 8218 gud@^1.0.0: 8623 8219 version "1.0.0" 8624 8220 resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" ··· 8927 8523 array-filter "^1.0.0" 8928 8524 call-bind "^1.0.2" 8929 8525 8930 - html-encoding-sniffer@^2.0.1: 8931 - version "2.0.1" 8932 - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" 8933 - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== 8526 + html-encoding-sniffer@^3.0.0: 8527 + version "3.0.0" 8528 + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" 8529 + integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== 8934 8530 dependencies: 8935 - whatwg-encoding "^1.0.5" 8531 + whatwg-encoding "^2.0.0" 8936 8532 8937 8533 html-entities@^1.2.0, html-entities@^1.2.1, html-entities@^1.3.1: 8938 8534 version "1.4.0" 8939 8535 resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" 8940 8536 integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== 8941 - 8942 - html-escaper@^2.0.0: 8943 - version "2.0.2" 8944 - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" 8945 - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== 8946 8537 8947 8538 html-minifier-terser@^5.0.1: 8948 8539 version "5.1.1" ··· 9072 8663 resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" 9073 8664 integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== 9074 8665 8666 + http-proxy-agent@^5.0.0: 8667 + version "5.0.0" 8668 + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" 8669 + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== 8670 + dependencies: 8671 + "@tootallnate/once" "2" 8672 + agent-base "6" 8673 + debug "4" 8674 + 9075 8675 http-proxy-middleware@0.19.1: 9076 8676 version "0.19.1" 9077 8677 resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" ··· 9114 8714 resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" 9115 8715 integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= 9116 8716 8717 + https-proxy-agent@^5.0.1: 8718 + version "5.0.1" 8719 + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" 8720 + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== 8721 + dependencies: 8722 + agent-base "6" 8723 + debug "4" 8724 + 9117 8725 human-id@^1.0.2: 9118 8726 version "1.0.2" 9119 8727 resolved "https://registry.yarnpkg.com/human-id/-/human-id-1.0.2.tgz#e654d4b2b0d8b07e45da9f6020d8af17ec0a5df3" ··· 9152 8760 dependencies: 9153 8761 safer-buffer ">= 2.1.2 < 3" 9154 8762 9155 - iconv-lite@^0.6.2: 8763 + iconv-lite@0.6.3, iconv-lite@^0.6.2: 9156 8764 version "0.6.3" 9157 8765 resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" 9158 8766 integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== ··· 9247 8855 dependencies: 9248 8856 pkg-dir "^3.0.0" 9249 8857 resolve-cwd "^2.0.0" 9250 - 9251 - import-local@^3.0.2: 9252 - version "3.0.2" 9253 - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" 9254 - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== 9255 - dependencies: 9256 - pkg-dir "^4.2.0" 9257 - resolve-cwd "^3.0.0" 9258 8858 9259 8859 imurmurhash@^0.1.4: 9260 8860 version "0.1.4" ··· 9652 9252 resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" 9653 9253 integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== 9654 9254 9655 - is-generator-fn@^2.0.0: 9656 - version "2.1.0" 9657 - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" 9658 - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== 9659 - 9660 9255 is-generator-function@^1.0.7: 9661 9256 version "1.0.9" 9662 9257 resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.9.tgz#e5f82c2323673e7fcad3d12858c83c4039f6399c" ··· 9773 9368 dependencies: 9774 9369 is-path-inside "^2.1.0" 9775 9370 9776 - is-path-inside@^2.0.0, is-path-inside@^2.1.0: 9371 + is-path-inside@^2.1.0: 9777 9372 version "2.1.0" 9778 9373 resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" 9779 9374 integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== ··· 9807 9402 resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" 9808 9403 integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== 9809 9404 9810 - is-potential-custom-element-name@^1.0.0: 9405 + is-potential-custom-element-name@^1.0.1: 9811 9406 version "1.0.1" 9812 9407 resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" 9813 9408 integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== ··· 9897 9492 foreach "^2.0.5" 9898 9493 has-symbols "^1.0.1" 9899 9494 9900 - is-typedarray@^1.0.0, is-typedarray@~1.0.0: 9495 + is-typedarray@~1.0.0: 9901 9496 version "1.0.0" 9902 9497 resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 9903 9498 integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= ··· 9981 9576 resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 9982 9577 integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= 9983 9578 9984 - istanbul-lib-coverage@^3.0.0: 9985 - version "3.0.0" 9986 - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" 9987 - integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== 9988 - 9989 - istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: 9990 - version "4.0.3" 9991 - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" 9992 - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== 9993 - dependencies: 9994 - "@babel/core" "^7.7.5" 9995 - "@istanbuljs/schema" "^0.1.2" 9996 - istanbul-lib-coverage "^3.0.0" 9997 - semver "^6.3.0" 9998 - 9999 - istanbul-lib-report@^3.0.0: 10000 - version "3.0.0" 10001 - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" 10002 - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== 10003 - dependencies: 10004 - istanbul-lib-coverage "^3.0.0" 10005 - make-dir "^3.0.0" 10006 - supports-color "^7.1.0" 10007 - 10008 - istanbul-lib-source-maps@^4.0.0: 10009 - version "4.0.0" 10010 - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" 10011 - integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== 10012 - dependencies: 10013 - debug "^4.1.1" 10014 - istanbul-lib-coverage "^3.0.0" 10015 - source-map "^0.6.1" 10016 - 10017 - istanbul-reports@^3.0.2: 10018 - version "3.0.2" 10019 - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" 10020 - integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== 10021 - dependencies: 10022 - html-escaper "^2.0.0" 10023 - istanbul-lib-report "^3.0.0" 10024 - 10025 9579 isurl@^1.0.0-alpha5: 10026 9580 version "1.0.0" 10027 9581 resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" ··· 10043 9597 es-get-iterator "^1.0.2" 10044 9598 iterate-iterator "^1.0.1" 10045 9599 10046 - jest-changed-files@^26.6.2: 10047 - version "26.6.2" 10048 - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" 10049 - integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== 10050 - dependencies: 10051 - "@jest/types" "^26.6.2" 10052 - execa "^4.0.0" 10053 - throat "^5.0.0" 10054 - 10055 - jest-cli@^26.6.3: 10056 - version "26.6.3" 10057 - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" 10058 - integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== 10059 - dependencies: 10060 - "@jest/core" "^26.6.3" 10061 - "@jest/test-result" "^26.6.2" 10062 - "@jest/types" "^26.6.2" 10063 - chalk "^4.0.0" 10064 - exit "^0.1.2" 10065 - graceful-fs "^4.2.4" 10066 - import-local "^3.0.2" 10067 - is-ci "^2.0.0" 10068 - jest-config "^26.6.3" 10069 - jest-util "^26.6.2" 10070 - jest-validate "^26.6.2" 10071 - prompts "^2.0.1" 10072 - yargs "^15.4.1" 10073 - 10074 - jest-config@^26.6.3: 10075 - version "26.6.3" 10076 - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" 10077 - integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== 10078 - dependencies: 10079 - "@babel/core" "^7.1.0" 10080 - "@jest/test-sequencer" "^26.6.3" 10081 - "@jest/types" "^26.6.2" 10082 - babel-jest "^26.6.3" 10083 - chalk "^4.0.0" 10084 - deepmerge "^4.2.2" 10085 - glob "^7.1.1" 10086 - graceful-fs "^4.2.4" 10087 - jest-environment-jsdom "^26.6.2" 10088 - jest-environment-node "^26.6.2" 10089 - jest-get-type "^26.3.0" 10090 - jest-jasmine2 "^26.6.3" 10091 - jest-regex-util "^26.0.0" 10092 - jest-resolve "^26.6.2" 10093 - jest-util "^26.6.2" 10094 - jest-validate "^26.6.2" 10095 - micromatch "^4.0.2" 10096 - pretty-format "^26.6.2" 10097 - 10098 - jest-diff@^26.0.0, jest-diff@^26.6.2: 10099 - version "26.6.2" 10100 - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" 10101 - integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== 10102 - dependencies: 10103 - chalk "^4.0.0" 10104 - diff-sequences "^26.6.2" 10105 - jest-get-type "^26.3.0" 10106 - pretty-format "^26.6.2" 10107 - 10108 - jest-docblock@^26.0.0: 10109 - version "26.0.0" 10110 - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" 10111 - integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== 10112 - dependencies: 10113 - detect-newline "^3.0.0" 10114 - 10115 - jest-each@^26.6.2: 10116 - version "26.6.2" 10117 - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" 10118 - integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== 10119 - dependencies: 10120 - "@jest/types" "^26.6.2" 10121 - chalk "^4.0.0" 10122 - jest-get-type "^26.3.0" 10123 - jest-util "^26.6.2" 10124 - pretty-format "^26.6.2" 10125 - 10126 - jest-environment-jsdom@^26.6.2: 10127 - version "26.6.2" 10128 - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" 10129 - integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== 10130 - dependencies: 10131 - "@jest/environment" "^26.6.2" 10132 - "@jest/fake-timers" "^26.6.2" 10133 - "@jest/types" "^26.6.2" 10134 - "@types/node" "*" 10135 - jest-mock "^26.6.2" 10136 - jest-util "^26.6.2" 10137 - jsdom "^16.4.0" 10138 - 10139 - jest-environment-node@^26.6.2: 10140 - version "26.6.2" 10141 - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" 10142 - integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== 10143 - dependencies: 10144 - "@jest/environment" "^26.6.2" 10145 - "@jest/fake-timers" "^26.6.2" 10146 - "@jest/types" "^26.6.2" 10147 - "@types/node" "*" 10148 - jest-mock "^26.6.2" 10149 - jest-util "^26.6.2" 10150 - 10151 - jest-get-type@^26.3.0: 10152 - version "26.3.0" 10153 - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" 10154 - integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== 10155 - 10156 - jest-haste-map@^26.6.2: 10157 - version "26.6.2" 10158 - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" 10159 - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== 10160 - dependencies: 10161 - "@jest/types" "^26.6.2" 10162 - "@types/graceful-fs" "^4.1.2" 10163 - "@types/node" "*" 10164 - anymatch "^3.0.3" 10165 - fb-watchman "^2.0.0" 10166 - graceful-fs "^4.2.4" 10167 - jest-regex-util "^26.0.0" 10168 - jest-serializer "^26.6.2" 10169 - jest-util "^26.6.2" 10170 - jest-worker "^26.6.2" 10171 - micromatch "^4.0.2" 10172 - sane "^4.0.3" 10173 - walker "^1.0.7" 10174 - optionalDependencies: 10175 - fsevents "^2.1.2" 10176 - 10177 - jest-jasmine2@^26.6.3: 10178 - version "26.6.3" 10179 - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" 10180 - integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== 10181 - dependencies: 10182 - "@babel/traverse" "^7.1.0" 10183 - "@jest/environment" "^26.6.2" 10184 - "@jest/source-map" "^26.6.2" 10185 - "@jest/test-result" "^26.6.2" 10186 - "@jest/types" "^26.6.2" 10187 - "@types/node" "*" 10188 - chalk "^4.0.0" 10189 - co "^4.6.0" 10190 - expect "^26.6.2" 10191 - is-generator-fn "^2.0.0" 10192 - jest-each "^26.6.2" 10193 - jest-matcher-utils "^26.6.2" 10194 - jest-message-util "^26.6.2" 10195 - jest-runtime "^26.6.3" 10196 - jest-snapshot "^26.6.2" 10197 - jest-util "^26.6.2" 10198 - pretty-format "^26.6.2" 10199 - throat "^5.0.0" 10200 - 10201 - jest-leak-detector@^26.6.2: 10202 - version "26.6.2" 10203 - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" 10204 - integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== 10205 - dependencies: 10206 - jest-get-type "^26.3.0" 10207 - pretty-format "^26.6.2" 10208 - 10209 - jest-matcher-utils@^26.6.2: 10210 - version "26.6.2" 10211 - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" 10212 - integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== 10213 - dependencies: 10214 - chalk "^4.0.0" 10215 - jest-diff "^26.6.2" 10216 - jest-get-type "^26.3.0" 10217 - pretty-format "^26.6.2" 10218 - 10219 - jest-message-util@^26.6.2: 10220 - version "26.6.2" 10221 - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" 10222 - integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== 10223 - dependencies: 10224 - "@babel/code-frame" "^7.0.0" 10225 - "@jest/types" "^26.6.2" 10226 - "@types/stack-utils" "^2.0.0" 10227 - chalk "^4.0.0" 10228 - graceful-fs "^4.2.4" 10229 - micromatch "^4.0.2" 10230 - pretty-format "^26.6.2" 10231 - slash "^3.0.0" 10232 - stack-utils "^2.0.2" 10233 - 10234 - jest-mock@^26.6.2: 10235 - version "26.6.2" 10236 - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" 10237 - integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== 10238 - dependencies: 10239 - "@jest/types" "^26.6.2" 10240 - "@types/node" "*" 10241 - 10242 - jest-pnp-resolver@^1.2.2: 10243 - version "1.2.2" 10244 - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" 10245 - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== 10246 - 10247 - jest-regex-util@^26.0.0: 10248 - version "26.0.0" 10249 - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" 10250 - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== 10251 - 10252 - jest-resolve-dependencies@^26.6.3: 10253 - version "26.6.3" 10254 - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" 10255 - integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== 10256 - dependencies: 10257 - "@jest/types" "^26.6.2" 10258 - jest-regex-util "^26.0.0" 10259 - jest-snapshot "^26.6.2" 10260 - 10261 - jest-resolve@^26.6.2: 10262 - version "26.6.2" 10263 - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" 10264 - integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== 10265 - dependencies: 10266 - "@jest/types" "^26.6.2" 10267 - chalk "^4.0.0" 10268 - graceful-fs "^4.2.4" 10269 - jest-pnp-resolver "^1.2.2" 10270 - jest-util "^26.6.2" 10271 - read-pkg-up "^7.0.1" 10272 - resolve "^1.18.1" 10273 - slash "^3.0.0" 10274 - 10275 - jest-runner@^26.6.3: 10276 - version "26.6.3" 10277 - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" 10278 - integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== 10279 - dependencies: 10280 - "@jest/console" "^26.6.2" 10281 - "@jest/environment" "^26.6.2" 10282 - "@jest/test-result" "^26.6.2" 10283 - "@jest/types" "^26.6.2" 10284 - "@types/node" "*" 10285 - chalk "^4.0.0" 10286 - emittery "^0.7.1" 10287 - exit "^0.1.2" 10288 - graceful-fs "^4.2.4" 10289 - jest-config "^26.6.3" 10290 - jest-docblock "^26.0.0" 10291 - jest-haste-map "^26.6.2" 10292 - jest-leak-detector "^26.6.2" 10293 - jest-message-util "^26.6.2" 10294 - jest-resolve "^26.6.2" 10295 - jest-runtime "^26.6.3" 10296 - jest-util "^26.6.2" 10297 - jest-worker "^26.6.2" 10298 - source-map-support "^0.5.6" 10299 - throat "^5.0.0" 10300 - 10301 - jest-runtime@^26.6.3: 10302 - version "26.6.3" 10303 - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" 10304 - integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== 10305 - dependencies: 10306 - "@jest/console" "^26.6.2" 10307 - "@jest/environment" "^26.6.2" 10308 - "@jest/fake-timers" "^26.6.2" 10309 - "@jest/globals" "^26.6.2" 10310 - "@jest/source-map" "^26.6.2" 10311 - "@jest/test-result" "^26.6.2" 10312 - "@jest/transform" "^26.6.2" 10313 - "@jest/types" "^26.6.2" 10314 - "@types/yargs" "^15.0.0" 10315 - chalk "^4.0.0" 10316 - cjs-module-lexer "^0.6.0" 10317 - collect-v8-coverage "^1.0.0" 10318 - exit "^0.1.2" 10319 - glob "^7.1.3" 10320 - graceful-fs "^4.2.4" 10321 - jest-config "^26.6.3" 10322 - jest-haste-map "^26.6.2" 10323 - jest-message-util "^26.6.2" 10324 - jest-mock "^26.6.2" 10325 - jest-regex-util "^26.0.0" 10326 - jest-resolve "^26.6.2" 10327 - jest-snapshot "^26.6.2" 10328 - jest-util "^26.6.2" 10329 - jest-validate "^26.6.2" 10330 - slash "^3.0.0" 10331 - strip-bom "^4.0.0" 10332 - yargs "^15.4.1" 10333 - 10334 - jest-serializer@^26.6.2: 10335 - version "26.6.2" 10336 - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" 10337 - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== 10338 - dependencies: 10339 - "@types/node" "*" 10340 - graceful-fs "^4.2.4" 10341 - 10342 - jest-snapshot@^26.6.2: 10343 - version "26.6.2" 10344 - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" 10345 - integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== 10346 - dependencies: 10347 - "@babel/types" "^7.0.0" 10348 - "@jest/types" "^26.6.2" 10349 - "@types/babel__traverse" "^7.0.4" 10350 - "@types/prettier" "^2.0.0" 10351 - chalk "^4.0.0" 10352 - expect "^26.6.2" 10353 - graceful-fs "^4.2.4" 10354 - jest-diff "^26.6.2" 10355 - jest-get-type "^26.3.0" 10356 - jest-haste-map "^26.6.2" 10357 - jest-matcher-utils "^26.6.2" 10358 - jest-message-util "^26.6.2" 10359 - jest-resolve "^26.6.2" 10360 - natural-compare "^1.4.0" 10361 - pretty-format "^26.6.2" 10362 - semver "^7.3.2" 10363 - 10364 - jest-util@^26.6.2: 10365 - version "26.6.2" 10366 - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" 10367 - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== 10368 - dependencies: 10369 - "@jest/types" "^26.6.2" 10370 - "@types/node" "*" 10371 - chalk "^4.0.0" 10372 - graceful-fs "^4.2.4" 10373 - is-ci "^2.0.0" 10374 - micromatch "^4.0.2" 10375 - 10376 - jest-validate@^26.6.2: 10377 - version "26.6.2" 10378 - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" 10379 - integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== 10380 - dependencies: 10381 - "@jest/types" "^26.6.2" 10382 - camelcase "^6.0.0" 10383 - chalk "^4.0.0" 10384 - jest-get-type "^26.3.0" 10385 - leven "^3.1.0" 10386 - pretty-format "^26.6.2" 10387 - 10388 - jest-watch-directories@1.1.0: 10389 - version "1.1.0" 10390 - resolved "https://registry.yarnpkg.com/jest-watch-directories/-/jest-watch-directories-1.1.0.tgz#c9cd3fb40ba3d985c5c029ca91d95b081e92efbb" 10391 - integrity sha512-hSXyGELXGUnkV2RsbPSV2m6jUzKY+WEOMG35sq9ZLm4yIJzeXNnOiNYtvIusi1/4rizS6PgTRAF6hiCmBClt4g== 10392 - dependencies: 10393 - ansi-escapes "^3.1.0" 10394 - glob "^7.1.3" 10395 - is-path-inside "^2.0.0" 10396 - messageformat "^2.0.4" 10397 - prompts "^1.1.1" 10398 - 10399 - jest-watch-yarn-workspaces@^1.1.0: 10400 - version "1.1.0" 10401 - resolved "https://registry.yarnpkg.com/jest-watch-yarn-workspaces/-/jest-watch-yarn-workspaces-1.1.0.tgz#6b77666da152f7a5d89321a8333de7011b2ebbff" 10402 - integrity sha512-kfufQPfJoBN5n1qP9LjsVA//D6LIGxDd0/ZZbRorN6cinCKs5u+7ACIkk7XGFIaW+PH2HjBlvelIw6G0rPwFIA== 10403 - dependencies: 10404 - jest-watch-directories "1.1.0" 10405 - 10406 - jest-watcher@^26.6.2: 10407 - version "26.6.2" 10408 - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" 10409 - integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== 10410 - dependencies: 10411 - "@jest/test-result" "^26.6.2" 10412 - "@jest/types" "^26.6.2" 10413 - "@types/node" "*" 10414 - ansi-escapes "^4.2.1" 10415 - chalk "^4.0.0" 10416 - jest-util "^26.6.2" 10417 - string-length "^4.0.1" 10418 - 10419 9600 jest-worker@27.0.0-next.5: 10420 9601 version "27.0.0-next.5" 10421 9602 resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.0-next.5.tgz#5985ee29b12a4e191f4aae4bb73b97971d86ec28" ··· 10425 9606 merge-stream "^2.0.0" 10426 9607 supports-color "^8.0.0" 10427 9608 10428 - jest-worker@^26.2.1, jest-worker@^26.6.2: 9609 + jest-worker@^26.2.1: 10429 9610 version "26.6.2" 10430 9611 resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" 10431 9612 integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== ··· 10434 9615 merge-stream "^2.0.0" 10435 9616 supports-color "^7.0.0" 10436 9617 10437 - jest@^26.6.3: 10438 - version "26.6.3" 10439 - resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" 10440 - integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== 10441 - dependencies: 10442 - "@jest/core" "^26.6.3" 10443 - import-local "^3.0.2" 10444 - jest-cli "^26.6.3" 10445 - 10446 9618 "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 10447 9619 version "4.0.0" 10448 9620 resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" ··· 10461 9633 resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 10462 9634 integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= 10463 9635 10464 - jsdom@^16.4.0: 10465 - version "16.5.3" 10466 - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.5.3.tgz#13a755b3950eb938b4482c407238ddf16f0d2136" 10467 - integrity sha512-Qj1H+PEvUsOtdPJ056ewXM4UJPCi4hhLA8wpiz9F2YvsRBhuFsXxtrIFAgGBDynQA9isAMGE91PfUYbdMPXuTA== 9636 + jsdom@^20.0.3: 9637 + version "20.0.3" 9638 + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" 9639 + integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ== 10468 9640 dependencies: 10469 - abab "^2.0.5" 10470 - acorn "^8.1.0" 10471 - acorn-globals "^6.0.0" 10472 - cssom "^0.4.4" 9641 + abab "^2.0.6" 9642 + acorn "^8.8.1" 9643 + acorn-globals "^7.0.0" 9644 + cssom "^0.5.0" 10473 9645 cssstyle "^2.3.0" 10474 - data-urls "^2.0.0" 10475 - decimal.js "^10.2.1" 10476 - domexception "^2.0.1" 9646 + data-urls "^3.0.2" 9647 + decimal.js "^10.4.2" 9648 + domexception "^4.0.0" 10477 9649 escodegen "^2.0.0" 10478 - html-encoding-sniffer "^2.0.1" 10479 - is-potential-custom-element-name "^1.0.0" 10480 - nwsapi "^2.2.0" 10481 - parse5 "6.0.1" 10482 - request "^2.88.2" 10483 - request-promise-native "^1.0.9" 10484 - saxes "^5.0.1" 9650 + form-data "^4.0.0" 9651 + html-encoding-sniffer "^3.0.0" 9652 + http-proxy-agent "^5.0.0" 9653 + https-proxy-agent "^5.0.1" 9654 + is-potential-custom-element-name "^1.0.1" 9655 + nwsapi "^2.2.2" 9656 + parse5 "^7.1.1" 9657 + saxes "^6.0.0" 10485 9658 symbol-tree "^3.2.4" 10486 - tough-cookie "^4.0.0" 10487 - w3c-hr-time "^1.0.2" 10488 - w3c-xmlserializer "^2.0.0" 10489 - webidl-conversions "^6.1.0" 10490 - whatwg-encoding "^1.0.5" 10491 - whatwg-mimetype "^2.3.0" 10492 - whatwg-url "^8.5.0" 10493 - ws "^7.4.4" 10494 - xml-name-validator "^3.0.0" 9659 + tough-cookie "^4.1.2" 9660 + w3c-xmlserializer "^4.0.0" 9661 + webidl-conversions "^7.0.0" 9662 + whatwg-encoding "^2.0.0" 9663 + whatwg-mimetype "^3.0.0" 9664 + whatwg-url "^11.0.0" 9665 + ws "^8.11.0" 9666 + xml-name-validator "^4.0.0" 10495 9667 10496 9668 jsesc@^2.5.1, jsesc@^2.5.2: 10497 9669 version "2.5.2" ··· 10669 9841 optionalDependencies: 10670 9842 graceful-fs "^4.1.9" 10671 9843 10672 - kleur@^3.0.0, kleur@^3.0.3: 9844 + kleur@^3.0.3: 10673 9845 version "3.0.3" 10674 9846 resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" 10675 9847 integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== ··· 10703 9875 dotenv "^8.0.0" 10704 9876 dotenv-expand "^5.1.0" 10705 9877 10706 - leven@^3.1.0: 10707 - version "3.1.0" 10708 - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" 10709 - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== 10710 - 10711 9878 levn@^0.4.1: 10712 9879 version "0.4.1" 10713 9880 resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" ··· 10719 9886 levn@~0.3.0: 10720 9887 version "0.3.0" 10721 9888 resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 10722 - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 9889 + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== 10723 9890 dependencies: 10724 9891 prelude-ls "~1.1.2" 10725 9892 type-check "~0.3.2" ··· 10836 10003 emojis-list "^3.0.0" 10837 10004 json5 "^1.0.1" 10838 10005 10006 + local-pkg@^0.4.2: 10007 + version "0.4.2" 10008 + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.2.tgz#13107310b77e74a0e513147a131a2ba288176c2f" 10009 + integrity sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg== 10010 + 10839 10011 locate-path@^2.0.0: 10840 10012 version "2.0.0" 10841 10013 resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" ··· 10938 10110 resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" 10939 10111 integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= 10940 10112 10941 - lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.3, lodash@^4.17.5, lodash@^4.7.0: 10113 + lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.3, lodash@^4.17.5: 10942 10114 version "4.17.21" 10943 10115 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 10944 10116 integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== ··· 10978 10150 dependencies: 10979 10151 js-tokens "^3.0.0 || ^4.0.0" 10980 10152 10153 + loupe@^2.3.1: 10154 + version "2.3.6" 10155 + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" 10156 + integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== 10157 + dependencies: 10158 + get-func-name "^2.0.0" 10159 + 10981 10160 lower-case@^1.1.1: 10982 10161 version "1.1.4" 10983 10162 resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" ··· 11068 10247 integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 11069 10248 dependencies: 11070 10249 semver "^6.0.0" 11071 - 11072 - make-plural@^4.3.0: 11073 - version "4.3.0" 11074 - resolved "https://registry.yarnpkg.com/make-plural/-/make-plural-4.3.0.tgz#f23de08efdb0cac2e0c9ba9f315b0dff6b4c2735" 11075 - integrity sha512-xTYd4JVHpSCW+aqDof6w/MebaMVNTVYBZhbB/vi513xXdiPT92JMVCo0Jq8W2UZnzYRFeVbQiQ+I25l13JuKvA== 11076 - optionalDependencies: 11077 - minimist "^1.2.0" 11078 - 11079 - makeerror@1.0.x: 11080 - version "1.0.11" 11081 - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" 11082 - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= 11083 - dependencies: 11084 - tmpl "1.0.x" 11085 10250 11086 10251 map-cache@^0.2.2: 11087 10252 version "0.2.2" ··· 11290 10455 resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 11291 10456 integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 11292 10457 11293 - messageformat-formatters@^2.0.1: 11294 - version "2.0.1" 11295 - resolved "https://registry.yarnpkg.com/messageformat-formatters/-/messageformat-formatters-2.0.1.tgz#0492c1402a48775f751c9b17c0354e92be012b08" 11296 - integrity sha512-E/lQRXhtHwGuiQjI7qxkLp8AHbMD5r2217XNe/SREbBlSawe0lOqsFb7rflZJmlQFSULNLIqlcjjsCPlB3m3Mg== 11297 - 11298 - messageformat-parser@^4.1.2: 11299 - version "4.1.3" 11300 - resolved "https://registry.yarnpkg.com/messageformat-parser/-/messageformat-parser-4.1.3.tgz#b824787f57fcda7d50769f5b63e8d4fda68f5b9e" 11301 - integrity sha512-2fU3XDCanRqeOCkn7R5zW5VQHWf+T3hH65SzuqRvjatBK7r4uyFa5mEX+k6F9Bd04LVM5G4/BHBTUJsOdW7uyg== 11302 - 11303 - messageformat@^2.0.4: 11304 - version "2.3.0" 11305 - resolved "https://registry.yarnpkg.com/messageformat/-/messageformat-2.3.0.tgz#de263c49029d5eae65d7ee25e0754f57f425ad91" 11306 - integrity sha512-uTzvsv0lTeQxYI2y1NPa1lItL5VRI8Gb93Y2K2ue5gBPyrbJxfDi/EYWxh2PKv5yO42AJeeqblS9MJSh/IEk4w== 11307 - dependencies: 11308 - make-plural "^4.3.0" 11309 - messageformat-formatters "^2.0.1" 11310 - messageformat-parser "^4.1.2" 11311 - 11312 10458 methods@~1.1.2: 11313 10459 version "1.1.2" 11314 10460 resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" ··· 11461 10607 resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.3.tgz#3db5c0765545ab8637be71f333a104a965a9ca3f" 11462 10608 integrity sha512-+bMdgqjMN/Z77a6NlY/I3U5LlRDbnmaAk6lDveAPKwSpcPM4tKAuYsvYF8xjhOPXhOYGe/73vVLVez5PW+jqhw== 11463 10609 11464 - minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: 11465 - version "1.2.5" 11466 - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 11467 - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 11468 - 11469 - minimist@^1.2.6: 10610 + minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: 11470 10611 version "1.2.7" 11471 10612 resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" 11472 10613 integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== ··· 11816 10957 css-select "^4.2.1" 11817 10958 he "1.2.0" 11818 10959 11819 - node-int64@^0.4.0: 11820 - version "0.4.0" 11821 - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" 11822 - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= 11823 - 11824 10960 node-libs-browser@^2.2.1: 11825 10961 version "2.2.1" 11826 10962 resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" ··· 11855 10991 resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" 11856 10992 integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= 11857 10993 11858 - node-notifier@^8.0.0: 11859 - version "8.0.2" 11860 - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" 11861 - integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== 11862 - dependencies: 11863 - growly "^1.3.0" 11864 - is-wsl "^2.2.0" 11865 - semver "^7.3.2" 11866 - shellwords "^0.1.1" 11867 - uuid "^8.3.0" 11868 - which "^2.0.2" 11869 - 11870 10994 node-releases@^1.1.61, node-releases@^1.1.71: 11871 10995 version "1.1.71" 11872 10996 resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" ··· 12009 11133 dependencies: 12010 11134 boolbase "~1.0.0" 12011 11135 12012 - nth-check@^2.0.0: 12013 - version "2.0.0" 12014 - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" 12015 - integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== 12016 - dependencies: 12017 - boolbase "^1.0.0" 12018 - 12019 - nth-check@^2.0.1: 11136 + nth-check@^2.0.0, nth-check@^2.0.1: 12020 11137 version "2.1.1" 12021 11138 resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" 12022 11139 integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== ··· 12033 11150 resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 12034 11151 integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 12035 11152 12036 - nwsapi@^2.2.0: 12037 - version "2.2.0" 12038 - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" 12039 - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== 11153 + nwsapi@^2.2.2: 11154 + version "2.2.2" 11155 + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" 11156 + integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== 12040 11157 12041 11158 oauth-sign@~0.9.0: 12042 11159 version "0.9.0" ··· 12299 11416 resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" 12300 11417 integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== 12301 11418 12302 - p-each-series@^2.1.0: 12303 - version "2.2.0" 12304 - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" 12305 - integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== 12306 - 12307 11419 p-event@^2.1.0: 12308 11420 version "2.3.1" 12309 11421 resolved "https://registry.yarnpkg.com/p-event/-/p-event-2.3.1.tgz#596279ef169ab2c3e0cae88c1cfbb08079993ef6" ··· 12556 11668 dependencies: 12557 11669 parse5 "^6.0.1" 12558 11670 12559 - parse5@6.0.1, parse5@^6.0.0, parse5@^6.0.1: 11671 + parse5@^6.0.0, parse5@^6.0.1: 12560 11672 version "6.0.1" 12561 11673 resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" 12562 11674 integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== 11675 + 11676 + parse5@^7.1.1: 11677 + version "7.1.2" 11678 + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" 11679 + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== 11680 + dependencies: 11681 + entities "^4.4.0" 12563 11682 12564 11683 parseqs@0.0.6: 12565 11684 version "0.0.6" ··· 12687 11806 dependencies: 12688 11807 process "^0.11.1" 12689 11808 util "^0.10.3" 11809 + 11810 + pathval@^1.1.1: 11811 + version "1.1.1" 11812 + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" 11813 + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== 12690 11814 12691 11815 pbkdf2@^3.0.3: 12692 11816 version "3.1.2" ··· 13251 12375 prelude-ls@~1.1.2: 13252 12376 version "1.1.2" 13253 12377 resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 13254 - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 12378 + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== 13255 12379 13256 12380 prepend-http@^1.0.0: 13257 12381 version "1.0.4" ··· 13293 12417 lodash "^4.17.20" 13294 12418 renderkid "^2.0.4" 13295 12419 13296 - pretty-format@^26.0.0, pretty-format@^26.6.2: 12420 + pretty-format@^26.6.2: 13297 12421 version "26.6.2" 13298 12422 resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" 13299 12423 integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== ··· 13374 12498 kleur "^3.0.3" 13375 12499 sisteransi "^1.0.5" 13376 12500 13377 - prompts@^1.1.1: 13378 - version "1.2.1" 13379 - resolved "https://registry.yarnpkg.com/prompts/-/prompts-1.2.1.tgz#7fd4116a458d6a62761e3ccb1432d7bbd8b2cb29" 13380 - integrity sha512-GE33SMMVO1ISfnq3i6cE+WYK/tLxRWtZiRkl5vdg0KR0owOCPFOsq8BuFajFbW7b2bMHb8krXaQHOpZyUEuvmA== 13381 - dependencies: 13382 - kleur "^3.0.0" 13383 - sisteransi "^1.0.0" 13384 - 13385 - prompts@^2.0.1, prompts@^2.4.0: 12501 + prompts@^2.4.0: 13386 12502 version "2.4.1" 13387 12503 resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" 13388 12504 integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== ··· 13444 12560 integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= 13445 12561 13446 12562 psl@^1.1.28, psl@^1.1.33: 13447 - version "1.8.0" 13448 - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" 13449 - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== 12563 + version "1.9.0" 12564 + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" 12565 + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== 13450 12566 13451 12567 public-encrypt@^4.0.0: 13452 12568 version "4.0.3" ··· 14486 13602 dependencies: 14487 13603 throttleit "^1.0.0" 14488 13604 14489 - request-promise-core@1.1.4: 14490 - version "1.1.4" 14491 - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" 14492 - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== 14493 - dependencies: 14494 - lodash "^4.17.19" 14495 - 14496 - request-promise-native@^1.0.9: 14497 - version "1.0.9" 14498 - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" 14499 - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== 14500 - dependencies: 14501 - request-promise-core "1.1.4" 14502 - stealthy-require "^1.1.1" 14503 - tough-cookie "^2.3.3" 14504 - 14505 - request@^2.88.0, request@^2.88.2: 13605 + request@^2.88.0: 14506 13606 version "2.88.2" 14507 13607 resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" 14508 13608 integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== ··· 14555 13655 dependencies: 14556 13656 resolve-from "^3.0.0" 14557 13657 14558 - resolve-cwd@^3.0.0: 14559 - version "3.0.0" 14560 - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" 14561 - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== 14562 - dependencies: 14563 - resolve-from "^5.0.0" 14564 - 14565 13658 resolve-from@^3.0.0: 14566 13659 version "3.0.0" 14567 13660 resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" ··· 14587 13680 resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" 14588 13681 integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= 14589 13682 14590 - resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.3.2: 13683 + resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.3.2: 14591 13684 version "1.22.1" 14592 13685 resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" 14593 13686 integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== ··· 14729 13822 lodash.flattendeep "^4.4.0" 14730 13823 nearley "^2.7.10" 14731 13824 14732 - rsvp@^4.8.4: 14733 - version "4.8.5" 14734 - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" 14735 - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== 14736 - 14737 13825 run-async@^2.2.0, run-async@^2.4.0: 14738 13826 version "2.4.1" 14739 13827 resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" ··· 14794 13882 resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 14795 13883 integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 14796 13884 14797 - sane@^4.0.3: 14798 - version "4.1.0" 14799 - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" 14800 - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== 14801 - dependencies: 14802 - "@cnakazawa/watch" "^1.0.3" 14803 - anymatch "^2.0.0" 14804 - capture-exit "^2.0.0" 14805 - exec-sh "^0.3.2" 14806 - execa "^1.0.0" 14807 - fb-watchman "^2.0.0" 14808 - micromatch "^3.1.4" 14809 - minimist "^1.1.1" 14810 - walker "~1.0.5" 14811 - 14812 13885 sax@~1.2.4: 14813 13886 version "1.2.4" 14814 13887 resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 14815 13888 integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== 14816 13889 14817 - saxes@^5.0.1: 14818 - version "5.0.1" 14819 - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" 14820 - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== 13890 + saxes@^6.0.0: 13891 + version "6.0.0" 13892 + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" 13893 + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== 14821 13894 dependencies: 14822 13895 xmlchars "^2.2.0" 14823 13896 ··· 15102 14175 resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.5.3.tgz#c54982b996c76ef0c1e6b59fbdc5825f5b713113" 15103 14176 integrity sha1-xUmCuZbHbvDB5rWfvcWCX1txMRM= 15104 14177 15105 - shellwords@^0.1.1: 15106 - version "0.1.1" 15107 - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" 15108 - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== 15109 - 15110 14178 shorthash@^0.0.2: 15111 14179 version "0.0.2" 15112 14180 resolved "https://registry.yarnpkg.com/shorthash/-/shorthash-0.0.2.tgz#59b268eecbde59038b30da202bcfbddeb2c4a4eb" ··· 15133 14201 dependencies: 15134 14202 is-arrayish "^0.3.1" 15135 14203 15136 - sisteransi@^1.0.0, sisteransi@^1.0.5: 14204 + sisteransi@^1.0.5: 15137 14205 version "1.0.5" 15138 14206 resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" 15139 14207 integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== ··· 15322 14390 source-map-url "^0.4.0" 15323 14391 urix "^0.1.0" 15324 14392 15325 - source-map-support@^0.5.16, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.20: 14393 + source-map-support@^0.5.16, source-map-support@~0.5.12, source-map-support@~0.5.20: 15326 14394 version "0.5.21" 15327 14395 resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 15328 14396 integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== ··· 15482 14550 resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" 15483 14551 integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== 15484 14552 15485 - stack-utils@^2.0.2: 15486 - version "2.0.3" 15487 - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" 15488 - integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== 15489 - dependencies: 15490 - escape-string-regexp "^2.0.0" 15491 - 15492 14553 stackframe@^1.1.1: 15493 14554 version "1.2.0" 15494 14555 resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" ··· 15518 14579 version "1.5.0" 15519 14580 resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 15520 14581 integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 15521 - 15522 - stealthy-require@^1.1.1: 15523 - version "1.1.1" 15524 - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" 15525 - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= 15526 14582 15527 14583 store2@^2.12.0: 15528 14584 version "2.12.0" ··· 15607 14663 version "1.1.3" 15608 14664 resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" 15609 14665 integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= 15610 - 15611 - string-length@^4.0.1: 15612 - version "4.0.2" 15613 - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" 15614 - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== 15615 - dependencies: 15616 - char-regex "^1.0.2" 15617 - strip-ansi "^6.0.0" 15618 14666 15619 14667 string-width@^1.0.1: 15620 14668 version "1.0.2" ··· 15781 14829 resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 15782 14830 integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 15783 14831 15784 - strip-bom@^4.0.0: 15785 - version "4.0.0" 15786 - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" 15787 - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== 15788 - 15789 14832 strip-dirs@^2.0.0: 15790 14833 version "2.1.0" 15791 14834 resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" ··· 15819 14862 version "2.0.1" 15820 14863 resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 15821 14864 integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 14865 + 14866 + strip-literal@^0.4.2: 14867 + version "0.4.2" 14868 + resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-0.4.2.tgz#4f9fa6c38bb157b924e9ace7155ebf8a2342cbcf" 14869 + integrity sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw== 14870 + dependencies: 14871 + acorn "^8.8.0" 15822 14872 15823 14873 strip-outer@^1.0.0: 15824 14874 version "1.0.1" ··· 15899 14949 resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe" 15900 14950 integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q== 15901 14951 15902 - sucrase@^3.18.0, sucrase@^3.27.0: 14952 + sucrase@^3.27.0: 15903 14953 version "3.29.0" 15904 14954 resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.29.0.tgz#3207c5bc1b980fdae1e539df3f8a8a518236da7d" 15905 14955 integrity sha512-bZPAuGA5SdFHuzqIhTAqt9fvNEo9rESqXIG3oiKdF8K4UmkQxC4KlNL3lVyAErXp+mPvUqZ5l13qx6TrDIGf3A== ··· 15938 14988 integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 15939 14989 dependencies: 15940 14990 has-flag "^4.0.0" 15941 - 15942 - supports-hyperlinks@^2.0.0: 15943 - version "2.2.0" 15944 - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" 15945 - integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== 15946 - dependencies: 15947 - has-flag "^4.0.0" 15948 - supports-color "^7.0.0" 15949 14991 15950 14992 supports-preserve-symlinks-flag@^1.0.0: 15951 14993 version "1.0.0" ··· 16132 15174 resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" 16133 15175 integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== 16134 15176 16135 - terminal-link@^2.0.0: 16136 - version "2.1.1" 16137 - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" 16138 - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== 16139 - dependencies: 16140 - ansi-escapes "^4.2.1" 16141 - supports-hyperlinks "^2.0.0" 16142 - 16143 15177 terser-webpack-plugin@^1.4.1, terser-webpack-plugin@^1.4.3: 16144 15178 version "1.4.5" 16145 15179 resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" ··· 16188 15222 acorn "^8.5.0" 16189 15223 commander "^2.20.0" 16190 15224 source-map-support "~0.5.20" 16191 - 16192 - test-exclude@^6.0.0: 16193 - version "6.0.0" 16194 - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" 16195 - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== 16196 - dependencies: 16197 - "@istanbuljs/schema" "^0.1.2" 16198 - glob "^7.1.4" 16199 - minimatch "^3.0.4" 16200 15225 16201 15226 text-table@0.2.0, text-table@^0.2.0: 16202 15227 version "0.2.0" ··· 16217 15242 dependencies: 16218 15243 any-promise "^1.0.0" 16219 15244 16220 - throat@^5.0.0: 16221 - version "5.0.0" 16222 - resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" 16223 - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== 16224 - 16225 15245 throttle-debounce@^3.0.1: 16226 15246 version "3.0.1" 16227 15247 resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" ··· 16282 15302 resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" 16283 15303 integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== 16284 15304 15305 + tinybench@^2.3.1: 15306 + version "2.3.1" 15307 + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.3.1.tgz#14f64e6b77d7ef0b1f6ab850c7a808c6760b414d" 15308 + integrity sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA== 15309 + 15310 + tinypool@^0.3.0: 15311 + version "0.3.0" 15312 + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.3.0.tgz#c405d8b743509fc28ea4ca358433190be654f819" 15313 + integrity sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ== 15314 + 15315 + tinyspy@^1.0.2: 15316 + version "1.0.2" 15317 + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-1.0.2.tgz#6da0b3918bfd56170fb3cd3a2b5ef832ee1dff0d" 15318 + integrity sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q== 15319 + 16285 15320 tmp-promise@^3.0.2: 16286 15321 version "3.0.3" 16287 15322 resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7" ··· 16302 15337 integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== 16303 15338 dependencies: 16304 15339 rimraf "^3.0.0" 16305 - 16306 - tmpl@1.0.x: 16307 - version "1.0.4" 16308 - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" 16309 - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= 16310 15340 16311 15341 to-array@0.1.4: 16312 15342 version "0.1.4" ··· 16383 15413 resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" 16384 15414 integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= 16385 15415 16386 - tough-cookie@^2.3.3, tough-cookie@~2.5.0: 15416 + tough-cookie@^4.1.2: 15417 + version "4.1.2" 15418 + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" 15419 + integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== 15420 + dependencies: 15421 + psl "^1.1.33" 15422 + punycode "^2.1.1" 15423 + universalify "^0.2.0" 15424 + url-parse "^1.5.3" 15425 + 15426 + tough-cookie@~2.5.0: 16387 15427 version "2.5.0" 16388 15428 resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" 16389 15429 integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== ··· 16391 15431 psl "^1.1.28" 16392 15432 punycode "^2.1.1" 16393 15433 16394 - tough-cookie@^4.0.0: 16395 - version "4.0.0" 16396 - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" 16397 - integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== 16398 - dependencies: 16399 - psl "^1.1.33" 16400 - punycode "^2.1.1" 16401 - universalify "^0.1.2" 16402 - 16403 15434 tr46@^1.0.1: 16404 15435 version "1.0.1" 16405 15436 resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" ··· 16407 15438 dependencies: 16408 15439 punycode "^2.1.0" 16409 15440 16410 - tr46@^2.0.2: 16411 - version "2.0.2" 16412 - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" 16413 - integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== 15441 + tr46@^3.0.0: 15442 + version "3.0.0" 15443 + resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" 15444 + integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== 16414 15445 dependencies: 16415 15446 punycode "^2.1.1" 16416 15447 ··· 16542 15573 type-check@~0.3.2: 16543 15574 version "0.3.2" 16544 15575 resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 16545 - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 15576 + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== 16546 15577 dependencies: 16547 15578 prelude-ls "~1.1.2" 16548 15579 16549 - type-detect@4.0.8: 15580 + type-detect@^4.0.0, type-detect@^4.0.5: 16550 15581 version "4.0.8" 16551 15582 resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 16552 15583 integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== ··· 16593 15624 dependencies: 16594 15625 media-typer "0.3.0" 16595 15626 mime-types "~2.1.24" 16596 - 16597 - typedarray-to-buffer@^3.1.5: 16598 - version "3.1.5" 16599 - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" 16600 - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== 16601 - dependencies: 16602 - is-typedarray "^1.0.0" 16603 15627 16604 15628 typedarray@^0.0.6: 16605 15629 version "0.0.6" ··· 16844 15868 resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" 16845 15869 integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== 16846 15870 16847 - universalify@^0.1.0, universalify@^0.1.2: 15871 + universalify@^0.1.0: 16848 15872 version "0.1.2" 16849 15873 resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" 16850 15874 integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== 16851 15875 15876 + universalify@^0.2.0: 15877 + version "0.2.0" 15878 + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" 15879 + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== 15880 + 16852 15881 universalify@^2.0.0: 16853 15882 version "2.0.0" 16854 15883 resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" ··· 16945 15974 dependencies: 16946 15975 prepend-http "^2.0.0" 16947 15976 16948 - url-parse@^1.4.3, url-parse@^1.5.1: 16949 - version "1.5.1" 16950 - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" 16951 - integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== 15977 + url-parse@^1.4.3, url-parse@^1.5.1, url-parse@^1.5.3: 15978 + version "1.5.10" 15979 + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" 15980 + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== 16952 15981 dependencies: 16953 15982 querystringify "^2.1.1" 16954 15983 requires-port "^1.0.0" ··· 17080 16109 resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" 17081 16110 integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== 17082 16111 17083 - uuid@^8.3.0, uuid@^8.3.2: 16112 + uuid@^8.3.2: 17084 16113 version "8.3.2" 17085 16114 resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" 17086 16115 integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== ··· 17089 16118 version "2.3.0" 17090 16119 resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" 17091 16120 integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== 17092 - 17093 - v8-to-istanbul@^7.0.0: 17094 - version "7.1.1" 17095 - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.1.tgz#04bfd1026ba4577de5472df4f5e89af49de5edda" 17096 - integrity sha512-p0BB09E5FRjx0ELN6RgusIPsSPhtgexSRcKETybEs6IGOTXJSZqfwxp7r//55nnu0f1AxltY5VvdVqy2vZf9AA== 17097 - dependencies: 17098 - "@types/istanbul-lib-coverage" "^2.0.1" 17099 - convert-source-map "^1.6.0" 17100 - source-map "^0.7.3" 17101 16121 17102 16122 validate-npm-package-license@^3.0.1: 17103 16123 version "3.0.4" ··· 17171 16191 optionalDependencies: 17172 16192 fsevents "~2.3.2" 17173 16193 16194 + vitest@^0.25.3: 16195 + version "0.25.3" 16196 + resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.25.3.tgz#4e5ed481e4da6a0ce014bdb71dfc9661fd62b722" 16197 + integrity sha512-/UzHfXIKsELZhL7OaM2xFlRF8HRZgAHtPctacvNK8H4vOcbJJAMEgbWNGSAK7Y9b1NBe5SeM7VTuz2RsTHFJJA== 16198 + dependencies: 16199 + "@types/chai" "^4.3.3" 16200 + "@types/chai-subset" "^1.3.3" 16201 + "@types/node" "*" 16202 + acorn "^8.8.0" 16203 + acorn-walk "^8.2.0" 16204 + chai "^4.3.6" 16205 + debug "^4.3.4" 16206 + local-pkg "^0.4.2" 16207 + source-map "^0.6.1" 16208 + strip-literal "^0.4.2" 16209 + tinybench "^2.3.1" 16210 + tinypool "^0.3.0" 16211 + tinyspy "^1.0.2" 16212 + vite "^3.0.0" 16213 + 17174 16214 vm-browserify@1.1.2, vm-browserify@^1.0.1: 17175 16215 version "1.1.2" 17176 16216 resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" ··· 17185 16225 "@vue/runtime-dom" "3.0.11" 17186 16226 "@vue/shared" "3.0.11" 17187 16227 17188 - w3c-hr-time@^1.0.2: 17189 - version "1.0.2" 17190 - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" 17191 - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== 16228 + w3c-xmlserializer@^4.0.0: 16229 + version "4.0.0" 16230 + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" 16231 + integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== 17192 16232 dependencies: 17193 - browser-process-hrtime "^1.0.0" 17194 - 17195 - w3c-xmlserializer@^2.0.0: 17196 - version "2.0.0" 17197 - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" 17198 - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== 17199 - dependencies: 17200 - xml-name-validator "^3.0.0" 17201 - 17202 - walker@^1.0.7, walker@~1.0.5: 17203 - version "1.0.7" 17204 - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" 17205 - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= 17206 - dependencies: 17207 - makeerror "1.0.x" 16233 + xml-name-validator "^4.0.0" 17208 16234 17209 16235 warning@^4.0.2, warning@^4.0.3: 17210 16236 version "4.0.3" ··· 17263 16289 resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" 17264 16290 integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== 17265 16291 17266 - webidl-conversions@^5.0.0: 17267 - version "5.0.0" 17268 - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" 17269 - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== 17270 - 17271 - webidl-conversions@^6.1.0: 17272 - version "6.1.0" 17273 - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" 17274 - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== 16292 + webidl-conversions@^7.0.0: 16293 + version "7.0.0" 16294 + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" 16295 + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== 17275 16296 17276 16297 webpack-bundle-analyzer@^3.4.1: 17277 16298 version "3.9.0" ··· 17433 16454 resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" 17434 16455 integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== 17435 16456 17436 - whatwg-encoding@^1.0.5: 17437 - version "1.0.5" 17438 - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" 17439 - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== 16457 + whatwg-encoding@^2.0.0: 16458 + version "2.0.0" 16459 + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" 16460 + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== 17440 16461 dependencies: 17441 - iconv-lite "0.4.24" 16462 + iconv-lite "0.6.3" 17442 16463 17443 - whatwg-mimetype@^2.3.0: 17444 - version "2.3.0" 17445 - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" 17446 - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== 16464 + whatwg-mimetype@^3.0.0: 16465 + version "3.0.0" 16466 + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" 16467 + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== 16468 + 16469 + whatwg-url@^11.0.0: 16470 + version "11.0.0" 16471 + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" 16472 + integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== 16473 + dependencies: 16474 + tr46 "^3.0.0" 16475 + webidl-conversions "^7.0.0" 17447 16476 17448 16477 whatwg-url@^7.0.0: 17449 16478 version "7.1.0" ··· 17453 16482 lodash.sortby "^4.7.0" 17454 16483 tr46 "^1.0.1" 17455 16484 webidl-conversions "^4.0.2" 17456 - 17457 - whatwg-url@^8.0.0, whatwg-url@^8.5.0: 17458 - version "8.5.0" 17459 - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.5.0.tgz#7752b8464fc0903fec89aa9846fc9efe07351fd3" 17460 - integrity sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg== 17461 - dependencies: 17462 - lodash "^4.7.0" 17463 - tr46 "^2.0.2" 17464 - webidl-conversions "^6.1.0" 17465 16485 17466 16486 which-boxed-primitive@^1.0.2: 17467 16487 version "1.0.2" ··· 17512 16532 dependencies: 17513 16533 isexe "^2.0.0" 17514 16534 17515 - which@^2.0.1, which@^2.0.2: 16535 + which@^2.0.1: 17516 16536 version "2.0.2" 17517 16537 resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 17518 16538 integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== ··· 17612 16632 imurmurhash "^0.1.4" 17613 16633 signal-exit "^3.0.2" 17614 16634 17615 - write-file-atomic@^3.0.0: 17616 - version "3.0.3" 17617 - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" 17618 - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== 17619 - dependencies: 17620 - imurmurhash "^0.1.4" 17621 - is-typedarray "^1.0.0" 17622 - signal-exit "^3.0.2" 17623 - typedarray-to-buffer "^3.1.5" 17624 - 17625 16635 write-json-file@^3.2.0: 17626 16636 version "3.2.0" 17627 16637 resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" ··· 17650 16660 dependencies: 17651 16661 async-limiter "~1.0.0" 17652 16662 17653 - ws@^7.4.4, ws@~7.4.2: 16663 + ws@^8.11.0: 16664 + version "8.11.0" 16665 + resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" 16666 + integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== 16667 + 16668 + ws@~7.4.2: 17654 16669 version "7.4.5" 17655 16670 resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" 17656 16671 integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== 17657 16672 17658 - xml-name-validator@^3.0.0: 17659 - version "3.0.0" 17660 - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" 17661 - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== 16673 + xml-name-validator@^4.0.0: 16674 + version "4.0.0" 16675 + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" 16676 + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== 17662 16677 17663 16678 xmlchars@^2.2.0: 17664 16679 version "2.2.0" ··· 17742 16757 y18n "^4.0.0" 17743 16758 yargs-parser "^13.1.2" 17744 16759 17745 - yargs@^15.1.0, yargs@^15.4.1: 16760 + yargs@^15.1.0: 17746 16761 version "15.4.1" 17747 16762 resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" 17748 16763 integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==