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.

Add SolidJS integration (#3607)

Co-authored-by: nvos <personal@creoi.dev>
Co-authored-by: jdecroock <decroockjovi@gmail.com>

authored by

Stefan Maric
nvos
jdecroock
and committed by
GitHub
a98f25ce f4eb176d

+2695 -112
+5
.changeset/forty-cameras-check.md
··· 1 + --- 2 + '@urql/solid': minor 3 + --- 4 + 5 + Initial release
+3 -2
exchanges/auth/package.json
··· 40 40 "dist/" 41 41 ], 42 42 "scripts": { 43 - "test": "vitest --config ../../vitest.config.ts", 43 + "test": "vitest", 44 44 "clean": "rimraf dist extras", 45 45 "check": "tsc --noEmit", 46 46 "lint": "eslint --ext=js,jsx,ts,tsx .", ··· 57 57 }, 58 58 "devDependencies": { 59 59 "@urql/core": "workspace:*", 60 - "graphql": "^16.0.0" 60 + "graphql": "^16.0.0", 61 + "vitest": "^0.30.1" 61 62 }, 62 63 "publishConfig": { 63 64 "access": "public",
+4
exchanges/auth/vitest.config.ts
··· 1 + import { mergeConfig } from 'vitest/config'; 2 + import baseConfig from '../../vitest.config'; 3 + 4 + export default mergeConfig(baseConfig, {});
+3 -2
exchanges/context/package.json
··· 39 39 "dist/" 40 40 ], 41 41 "scripts": { 42 - "test": "vitest --config ../../vitest.config.ts", 42 + "test": "vitest", 43 43 "clean": "rimraf dist extras", 44 44 "check": "tsc --noEmit", 45 45 "lint": "eslint --ext=js,jsx,ts,tsx .", ··· 56 56 }, 57 57 "devDependencies": { 58 58 "@urql/core": "workspace:*", 59 - "graphql": "^16.0.0" 59 + "graphql": "^16.0.0", 60 + "vitest": "^0.30.1" 60 61 }, 61 62 "publishConfig": { 62 63 "access": "public",
+4
exchanges/context/vitest.config.ts
··· 1 + import { mergeConfig } from 'vitest/config'; 2 + import baseConfig from '../../vitest.config'; 3 + 4 + export default mergeConfig(baseConfig, {});
+3 -2
exchanges/execute/package.json
··· 40 40 "dist/" 41 41 ], 42 42 "scripts": { 43 - "test": "vitest --config ../../vitest.config.ts", 43 + "test": "vitest", 44 44 "clean": "rimraf dist extras", 45 45 "check": "tsc --noEmit", 46 46 "lint": "eslint --ext=js,jsx,ts,tsx .", ··· 58 58 }, 59 59 "devDependencies": { 60 60 "@urql/core": "workspace:*", 61 - "graphql": "^16.0.0" 61 + "graphql": "^16.0.0", 62 + "vitest": "^0.30.1" 62 63 }, 63 64 "publishConfig": { 64 65 "access": "public",
+4
exchanges/execute/vitest.config.ts
··· 1 + import { mergeConfig } from 'vitest/config'; 2 + import baseConfig from '../../vitest.config'; 3 + 4 + export default mergeConfig(baseConfig, {});
+3 -2
exchanges/graphcache/package.json
··· 54 54 "default-storage/" 55 55 ], 56 56 "scripts": { 57 - "test": "vitest --config ../../vitest.config.ts", 57 + "test": "vitest", 58 58 "clean": "rimraf dist extras", 59 59 "check": "tsc --noEmit", 60 60 "lint": "eslint --ext=js,jsx,ts,tsx .", ··· 79 79 "graphql": "^16.6.0", 80 80 "react": "^17.0.1", 81 81 "react-dom": "^17.0.1", 82 - "urql": "workspace:*" 82 + "urql": "workspace:*", 83 + "vitest": "^0.30.1" 83 84 }, 84 85 "publishConfig": { 85 86 "access": "public",
+4
exchanges/graphcache/vitest.config.ts
··· 1 + import { mergeConfig } from 'vitest/config'; 2 + import baseConfig from '../../vitest.config'; 3 + 4 + export default mergeConfig(baseConfig, {});
+3 -2
exchanges/persisted/package.json
··· 38 38 "dist/" 39 39 ], 40 40 "scripts": { 41 - "test": "vitest --config ../../vitest.config.ts", 41 + "test": "vitest", 42 42 "clean": "rimraf dist extras", 43 43 "check": "tsc --noEmit", 44 44 "lint": "eslint --ext=js,jsx,ts,tsx .", ··· 55 55 }, 56 56 "devDependencies": { 57 57 "@urql/core": "workspace:*", 58 - "graphql": "^16.0.0" 58 + "graphql": "^16.0.0", 59 + "vitest": "^0.30.1" 59 60 }, 60 61 "publishConfig": { 61 62 "access": "public",
+4
exchanges/persisted/vitest.config.ts
··· 1 + import { mergeConfig } from 'vitest/config'; 2 + import baseConfig from '../../vitest.config'; 3 + 4 + export default mergeConfig(baseConfig, {});
+3 -2
exchanges/populate/package.json
··· 38 38 "extras/" 39 39 ], 40 40 "scripts": { 41 - "test": "vitest --config ../../vitest.config.ts", 41 + "test": "vitest", 42 42 "clean": "rimraf dist extras", 43 43 "check": "tsc --noEmit", 44 44 "lint": "eslint --ext=js,jsx,ts,tsx .", ··· 56 56 }, 57 57 "devDependencies": { 58 58 "@urql/core": "workspace:*", 59 - "graphql": "^16.0.0" 59 + "graphql": "^16.0.0", 60 + "vitest": "^0.30.1" 60 61 }, 61 62 "publishConfig": { 62 63 "access": "public",
+4
exchanges/populate/vitest.config.ts
··· 1 + import { mergeConfig } from 'vitest/config'; 2 + import baseConfig from '../../vitest.config'; 3 + 4 + export default mergeConfig(baseConfig, {});
+4 -3
exchanges/refocus/package.json
··· 40 40 "dist/" 41 41 ], 42 42 "scripts": { 43 - "test": "vitest --config ../../vitest.config.ts", 43 + "test": "vitest", 44 44 "clean": "rimraf dist", 45 45 "check": "tsc --noEmit", 46 46 "lint": "eslint --ext=js,jsx,ts,tsx .", ··· 49 49 "prepublishOnly": "run-s clean build" 50 50 }, 51 51 "devDependencies": { 52 + "@types/react": "^17.0.4", 52 53 "@urql/core": "workspace:*", 53 - "@types/react": "^17.0.4", 54 - "graphql": "^16.0.0" 54 + "graphql": "^16.0.0", 55 + "vitest": "^0.30.1" 55 56 }, 56 57 "peerDependencies": { 57 58 "@urql/core": "^5.0.0"
+4
exchanges/refocus/vitest.config.ts
··· 1 + import { mergeConfig } from 'vitest/config'; 2 + import baseConfig from '../../vitest.config'; 3 + 4 + export default mergeConfig(baseConfig, {});
+3 -2
exchanges/request-policy/package.json
··· 39 39 "dist/" 40 40 ], 41 41 "scripts": { 42 - "test": "vitest --config ../../vitest.config.ts", 42 + "test": "vitest", 43 43 "clean": "rimraf dist", 44 44 "check": "tsc --noEmit", 45 45 "lint": "eslint --ext=js,jsx,ts,tsx .", ··· 49 49 }, 50 50 "devDependencies": { 51 51 "@urql/core": "workspace:*", 52 - "graphql": "^16.0.0" 52 + "graphql": "^16.0.0", 53 + "vitest": "^0.30.1" 53 54 }, 54 55 "peerDependencies": { 55 56 "@urql/core": "^5.0.0"
+4
exchanges/request-policy/vitest.config.ts
··· 1 + import { mergeConfig } from 'vitest/config'; 2 + import baseConfig from '../../vitest.config'; 3 + 4 + export default mergeConfig(baseConfig, {});
+3 -2
exchanges/retry/package.json
··· 39 39 "dist/" 40 40 ], 41 41 "scripts": { 42 - "test": "vitest --config ../../vitest.config.ts", 42 + "test": "vitest", 43 43 "clean": "rimraf dist", 44 44 "check": "tsc --noEmit", 45 45 "lint": "eslint --ext=js,jsx,ts,tsx .", ··· 49 49 }, 50 50 "devDependencies": { 51 51 "@urql/core": "workspace:*", 52 - "graphql": "^16.0.0" 52 + "graphql": "^16.0.0", 53 + "vitest": "^0.30.1" 53 54 }, 54 55 "peerDependencies": { 55 56 "@urql/core": "^5.0.0"
+4
exchanges/retry/vitest.config.ts
··· 1 + import { mergeConfig } from 'vitest/config'; 2 + import baseConfig from '../../vitest.config'; 3 + 4 + export default mergeConfig(baseConfig, {});
+1 -1
package.json
··· 1 1 { 2 2 "private": true, 3 3 "scripts": { 4 - "test": "vitest", 4 + "test": "test -z $CI && vitest || pnpm -r --parallel run test run", 5 5 "check": "tsc", 6 6 "lint": "eslint --ext=js,jsx,ts,tsx .", 7 7 "build": "node ./scripts/actions/build-all.mjs",
+4 -1
packages/core/package.json
··· 45 45 "internal/" 46 46 ], 47 47 "scripts": { 48 - "test": "vitest --config ../../vitest.config.ts", 48 + "test": "vitest", 49 49 "clean": "rimraf dist", 50 50 "check": "tsc --noEmit", 51 51 "lint": "eslint --ext=js,jsx,ts,tsx .", ··· 61 61 "publishConfig": { 62 62 "access": "public", 63 63 "provenance": true 64 + }, 65 + "devDependencies": { 66 + "vitest": "^0.30.1" 64 67 } 65 68 }
+4
packages/core/vitest.config.ts
··· 1 + import { mergeConfig } from 'vitest/config'; 2 + import baseConfig from '../../vitest.config'; 3 + 4 + export default mergeConfig(baseConfig, {});
-2
packages/introspection/package.json
··· 37 37 "dist/" 38 38 ], 39 39 "scripts": { 40 - "test": "vitest --config ../../vitest.config.ts", 41 40 "clean": "rimraf dist", 42 41 "check": "tsc --noEmit", 43 42 "lint": "eslint --ext=js,jsx,ts,tsx .", ··· 51 50 "peerDependencies": { 52 51 "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" 53 52 }, 54 - "dependencies": {}, 55 53 "publishConfig": { 56 54 "access": "public", 57 55 "provenance": true
+4
packages/next-urql/vitest.config.ts
··· 1 + import { mergeConfig } from 'vitest/config'; 2 + import baseConfig from '../../vitest.config'; 3 + 4 + export default mergeConfig(baseConfig, {});
+4 -3
packages/preact-urql/package.json
··· 40 40 "dist/" 41 41 ], 42 42 "scripts": { 43 - "test": "vitest --config ../../vitest.config.ts", 43 + "test": "vitest", 44 44 "clean": "rimraf dist", 45 45 "check": "tsc --noEmit", 46 46 "lint": "eslint --ext=js,jsx,ts,tsx .", ··· 49 49 "prepublishOnly": "run-s clean build" 50 50 }, 51 51 "devDependencies": { 52 - "@urql/core": "workspace:*", 53 52 "@testing-library/preact": "^2.0.0", 53 + "@urql/core": "workspace:*", 54 54 "graphql": "^16.0.0", 55 - "preact": "^10.13.0" 55 + "preact": "^10.13.0", 56 + "vitest": "^0.30.1" 56 57 }, 57 58 "peerDependencies": { 58 59 "@urql/core": "^5.0.0",
+4
packages/preact-urql/vitest.config.ts
··· 1 + import { mergeConfig } from 'vitest/config'; 2 + import baseConfig from '../../vitest.config'; 3 + 4 + export default mergeConfig(baseConfig, {});
+3 -2
packages/react-urql/package.json
··· 32 32 "dist/" 33 33 ], 34 34 "scripts": { 35 - "test": "vitest --config ../../vitest.config.ts", 35 + "test": "vitest", 36 36 "clean": "rimraf dist", 37 37 "check": "tsc --noEmit", 38 38 "lint": "eslint --ext=js,jsx,ts,tsx .", ··· 55 55 "react-is": "^17.0.1", 56 56 "react-ssr-prepass": "^1.1.2", 57 57 "react-test-renderer": "^17.0.1", 58 - "vite": "^3.2.4" 58 + "vite": "^3.2.4", 59 + "vitest": "^0.30.1" 59 60 }, 60 61 "peerDependencies": { 61 62 "@urql/core": "^5.0.0",
+4
packages/react-urql/vitest.config.ts
··· 1 + import { mergeConfig } from 'vitest/config'; 2 + import baseConfig from '../../vitest.config'; 3 + 4 + export default mergeConfig(baseConfig, {});
+72
packages/solid-urql/package.json
··· 1 + { 2 + "name": "@urql/solid", 3 + "version": "0.0.0", 4 + "description": "A highly customizable and versatile GraphQL client for Solid", 5 + "sideEffects": false, 6 + "homepage": "https://formidable.com/open-source/urql/docs/", 7 + "bugs": "https://github.com/urql-graphql/urql/issues", 8 + "license": "MIT", 9 + "author": "urql GraphQL Contributors", 10 + "repository": { 11 + "type": "git", 12 + "url": "https://github.com/urql-graphql/urql.git", 13 + "directory": "packages/solid-urql" 14 + }, 15 + "keywords": [ 16 + "graphql client", 17 + "state management", 18 + "cache", 19 + "graphql", 20 + "exchanges", 21 + "solid" 22 + ], 23 + "main": "dist/urql-solid", 24 + "module": "dist/urql-solid.mjs", 25 + "types": "dist/urql-solid.d.ts", 26 + "source": "src/index.ts", 27 + "exports": { 28 + ".": { 29 + "types": "./dist/urql-solid.d.ts", 30 + "import": "./dist/urql-solid.mjs", 31 + "require": "./dist/urql-solid.js", 32 + "source": "./src/index.ts" 33 + }, 34 + "./package.json": "./package.json" 35 + }, 36 + "files": [ 37 + "LICENSE", 38 + "CHANGELOG.md", 39 + "README.md", 40 + "dist/" 41 + ], 42 + "scripts": { 43 + "test": "vitest", 44 + "clean": "rimraf dist", 45 + "check": "tsc --noEmit", 46 + "lint": "eslint --ext=js,jsx,ts,tsx .", 47 + "build": "rollup -c ../../scripts/rollup/config.mjs", 48 + "prepare": "node ../../scripts/prepare/index.js", 49 + "prepublishOnly": "run-s clean build" 50 + }, 51 + "devDependencies": { 52 + "@solidjs/testing-library": "^0.8.2", 53 + "@urql/core": "workspace:*", 54 + "graphql": "^16.0.0", 55 + "jsdom": "^22.1.0", 56 + "vite-plugin-solid": "^2.7.0", 57 + "vite-tsconfig-paths": "^4.2.0", 58 + "vitest": "^0.30.1" 59 + }, 60 + "peerDependencies": { 61 + "@urql/core": "^5.0.0", 62 + "solid-js": "^1.7.7" 63 + }, 64 + "dependencies": { 65 + "@urql/core": "^4.0.0", 66 + "wonka": "^6.3.2" 67 + }, 68 + "publishConfig": { 69 + "access": "public", 70 + "provenance": true 71 + } 72 + }
+20
packages/solid-urql/src/context.ts
··· 1 + import type { Client } from '@urql/core'; 2 + import { createContext, useContext } from 'solid-js'; 3 + 4 + export const Context = createContext<Client>(); 5 + export const Provider = Context.Provider; 6 + 7 + export type UseClient = () => Client; 8 + export const useClient: UseClient = () => { 9 + const client = useContext(Context); 10 + 11 + if (process.env.NODE_ENV !== 'production' && client === undefined) { 12 + const error = 13 + "No client has been specified using urql's Provider. please create a client and add a Provider."; 14 + 15 + console.error(error); 16 + throw new Error(error); 17 + } 18 + 19 + return client!; 20 + };
+113
packages/solid-urql/src/createMutation.test.ts
··· 1 + // @vitest-environment jsdom 2 + 3 + import { testEffect } from '@solidjs/testing-library'; 4 + import { expect, it, describe, vi } from 'vitest'; 5 + import { CreateMutationState, createMutation } from './createMutation'; 6 + import { 7 + OperationResult, 8 + OperationResultSource, 9 + createClient, 10 + gql, 11 + } from '@urql/core'; 12 + import { makeSubject } from 'wonka'; 13 + import { createEffect } from 'solid-js'; 14 + 15 + const QUERY = gql` 16 + mutation { 17 + test 18 + } 19 + `; 20 + 21 + const client = createClient({ 22 + url: '/graphql', 23 + exchanges: [], 24 + suspense: false, 25 + }); 26 + 27 + vi.mock('./context', () => { 28 + const useClient = () => { 29 + return client!; 30 + }; 31 + 32 + return { useClient }; 33 + }); 34 + 35 + // Given that it is not possible to directly listen to all store changes it is necessary 36 + // to access all relevant parts on which `createEffect` should listen on 37 + const markStateDependencies = (state: CreateMutationState<any, any>) => { 38 + state.data; 39 + state.error; 40 + state.extensions; 41 + state.fetching; 42 + state.operation; 43 + state.stale; 44 + }; 45 + 46 + describe('createMutation', () => { 47 + it('should have expected state before and after finish', () => { 48 + const subject = makeSubject<any>(); 49 + const clientMutation = vi 50 + .spyOn(client, 'executeMutation') 51 + .mockImplementation( 52 + () => subject.source as OperationResultSource<OperationResult> 53 + ); 54 + 55 + return testEffect(done => { 56 + const [state, execute] = createMutation< 57 + { test: boolean }, 58 + { variable: number } 59 + >(QUERY); 60 + 61 + createEffect((run: number = 0) => { 62 + markStateDependencies(state); 63 + 64 + switch (run) { 65 + case 0: { 66 + expect(state).toMatchObject({ 67 + data: undefined, 68 + stale: false, 69 + fetching: false, 70 + error: undefined, 71 + extensions: undefined, 72 + operation: undefined, 73 + }); 74 + 75 + execute({ variable: 1 }); 76 + break; 77 + } 78 + 79 + case 1: { 80 + expect(state).toMatchObject({ 81 + data: undefined, 82 + stale: false, 83 + fetching: true, 84 + error: undefined, 85 + extensions: undefined, 86 + operation: undefined, 87 + }); 88 + 89 + expect(clientMutation).toHaveBeenCalledTimes(1); 90 + subject.next({ data: { test: true }, stale: false }); 91 + 92 + break; 93 + } 94 + 95 + case 2: { 96 + expect(state).toMatchObject({ 97 + data: { test: true }, 98 + stale: false, 99 + fetching: false, 100 + error: undefined, 101 + extensions: undefined, 102 + }); 103 + 104 + done(); 105 + break; 106 + } 107 + } 108 + 109 + return run + 1; 110 + }); 111 + }); 112 + }); 113 + });
+177
packages/solid-urql/src/createMutation.ts
··· 1 + import { createStore } from 'solid-js/store'; 2 + import { 3 + type AnyVariables, 4 + type DocumentInput, 5 + type OperationContext, 6 + type Operation, 7 + type OperationResult, 8 + type CombinedError, 9 + createRequest, 10 + } from '@urql/core'; 11 + import { useClient } from './context'; 12 + import { pipe, onPush, filter, take, toPromise } from 'wonka'; 13 + 14 + export type CreateMutationState< 15 + Data = any, 16 + Variables extends AnyVariables = AnyVariables, 17 + > = { 18 + /** Indicates whether `createMutation` is currently executing a mutation. */ 19 + fetching: boolean; 20 + 21 + /** Indicates that the mutation result is not fresh. 22 + * 23 + * @remarks 24 + * The `stale` flag is set to `true` when a new result for the mutation 25 + * is expected. 26 + * This is mostly unused for mutations and will rarely affect you, and 27 + * is more relevant for queries. 28 + * 29 + * @see {@link OperationResult.stale} for the source of this value. 30 + */ 31 + stale: boolean; 32 + /** The {@link OperationResult.data} for the executed mutation. */ 33 + data?: Data; 34 + /** The {@link OperationResult.error} for the executed mutation. */ 35 + error?: CombinedError; 36 + /** The {@link OperationResult.extensions} for the executed mutation. */ 37 + extensions?: Record<string, any>; 38 + /** The {@link Operation} that the current state is for. 39 + * 40 + * @remarks 41 + * This is the mutation {@link Operation} that has last been executed. 42 + * When {@link CreateMutationState.fetching} is `true`, this is the 43 + * last `Operation` that the current state was for. 44 + */ 45 + operation?: Operation<Data, Variables>; 46 + }; 47 + 48 + /** Triggers {@link createMutation} to execute its GraphQL mutation operation. 49 + * 50 + * @param variables - variables using which the mutation will be executed. 51 + * @param context - optionally, context options that will be merged with the hook's 52 + * context options and the `Client`’s options. 53 + * @returns the {@link OperationResult} of the mutation. 54 + * 55 + * @remarks 56 + * When called, {@link createMutation} will start the GraphQL mutation 57 + * it currently holds and use the `variables` passed to it. 58 + * 59 + * Once the mutation response comes back from the API, its 60 + * returned promise will resolve to the mutation’s {@link OperationResult} 61 + * and the {@link CreateMutationState} will be updated with the result. 62 + * 63 + * @example 64 + * ```ts 65 + * const [result, executeMutation] = createMutation(UpdateTodo); 66 + * const start = async ({ id, title }) => { 67 + * const result = await executeMutation({ id, title }); 68 + * }; 69 + */ 70 + export type CreateMutationExecute< 71 + Data = any, 72 + Variables extends AnyVariables = AnyVariables, 73 + > = ( 74 + variables: Variables, 75 + context?: Partial<OperationContext> 76 + ) => Promise<OperationResult<Data, Variables>>; 77 + 78 + /** Result tuple returned by the {@link createMutation} hook. 79 + * 80 + * @remarks 81 + * Similarly to a `createSignal` hook’s return value, 82 + * the first element is the {@link createMutation}’s state, updated 83 + * as mutations are executed with the second value, which is 84 + * used to start mutations and is a {@link CreateMutationExecute} 85 + * function. 86 + */ 87 + export type CreateMutationResult< 88 + Data = any, 89 + Variables extends AnyVariables = AnyVariables, 90 + > = [ 91 + CreateMutationState<Data, Variables>, 92 + CreateMutationExecute<Data, Variables>, 93 + ]; 94 + 95 + /** Hook to create a GraphQL mutation, run by passing variables to the returned execute function. 96 + * 97 + * @param query - a GraphQL mutation document which `createMutation` will execute. 98 + * @returns a {@link CreateMutationResult} tuple of a {@link CreateMutationState} result, 99 + * and an execute function to start the mutation. 100 + * 101 + * @remarks 102 + * `createMutation` allows GraphQL mutations to be defined and keeps its state 103 + * after the mutation is started with the returned execute function. 104 + * 105 + * Given a GraphQL mutation document it returns state to keep track of the 106 + * mutation state and a {@link CreateMutationExecute} function, which accepts 107 + * variables for the mutation to be executed. 108 + * Once called, the mutation executes and the state will be updated with 109 + * the mutation’s result. 110 + * 111 + * @example 112 + * ```ts 113 + * import { gql, createMutation } from '@urql/solid'; 114 + * 115 + * const UpdateTodo = gql` 116 + * mutation ($id: ID!, $title: String!) { 117 + * updateTodo(id: $id, title: $title) { 118 + * id, title 119 + * } 120 + * } 121 + * `; 122 + * 123 + * const UpdateTodo = () => { 124 + * const [result, executeMutation] = createMutation(UpdateTodo); 125 + * const start = async ({ id, title }) => { 126 + * const result = await executeMutation({ id, title }); 127 + * }; 128 + * // ... 129 + * }; 130 + * ``` 131 + */ 132 + export const createMutation = < 133 + Data = any, 134 + Variables extends AnyVariables = AnyVariables, 135 + >( 136 + query: DocumentInput<Data, Variables> 137 + ): CreateMutationResult<Data, Variables> => { 138 + const client = useClient(); 139 + const initialResult: CreateMutationState<Data, Variables> = { 140 + operation: undefined, 141 + fetching: false, 142 + stale: false, 143 + data: undefined, 144 + error: undefined, 145 + extensions: undefined, 146 + }; 147 + 148 + const [state, setState] = 149 + createStore<CreateMutationState<Data, Variables>>(initialResult); 150 + 151 + const execute = ( 152 + variables: Variables, 153 + context?: Partial<OperationContext> 154 + ) => { 155 + setState({ ...initialResult, fetching: true }); 156 + 157 + const request = createRequest(query, variables); 158 + return pipe( 159 + client.executeMutation(request, context), 160 + onPush(result => { 161 + setState({ 162 + fetching: false, 163 + stale: result.stale, 164 + data: result.data, 165 + error: result.error, 166 + extensions: result.extensions, 167 + operation: result.operation, 168 + }); 169 + }), 170 + filter(result => !result.hasNext), 171 + take(1), 172 + toPromise 173 + ); 174 + }; 175 + 176 + return [state, execute]; 177 + };
+262
packages/solid-urql/src/createQuery.test.tsx
··· 1 + // @vitest-environment jsdom 2 + 3 + import { expect, it, describe, vi } from 'vitest'; 4 + import { CreateQueryState, createQuery } from './createQuery'; 5 + import { renderHook, testEffect } from '@solidjs/testing-library'; 6 + import { createClient } from '@urql/core'; 7 + import { createEffect, createSignal } from 'solid-js'; 8 + import { makeSubject } from 'wonka'; 9 + import { OperationResult, OperationResultSource } from '@urql/core'; 10 + 11 + const client = createClient({ 12 + url: '/graphql', 13 + exchanges: [], 14 + suspense: false, 15 + }); 16 + 17 + vi.mock('./context', () => { 18 + const useClient = () => { 19 + return client!; 20 + }; 21 + 22 + return { useClient }; 23 + }); 24 + 25 + // Given that it is not possible to directly listen to all store changes it is necessary 26 + // to access all relevant parts on which `createEffect` should listen on 27 + const markStateDependencies = (state: CreateQueryState<any, any>) => { 28 + state.data; 29 + state.error; 30 + state.extensions; 31 + state.fetching; 32 + state.operation; 33 + state.stale; 34 + }; 35 + 36 + describe('createQuery', () => { 37 + it('should fetch when query is resumed', () => { 38 + const subject = 39 + makeSubject<Pick<OperationResult<{ test: boolean }, any>, 'data'>>(); 40 + const executeQuery = vi 41 + .spyOn(client, 'executeQuery') 42 + .mockImplementation( 43 + () => subject.source as OperationResultSource<OperationResult> 44 + ); 45 + 46 + return testEffect(done => { 47 + const [pause, setPause] = createSignal<boolean>(true); 48 + const [state] = createQuery<{ test: boolean }, { variable: number }>({ 49 + query: '{ test }', 50 + pause: pause, 51 + }); 52 + 53 + createEffect((run: number = 0) => { 54 + markStateDependencies(state); 55 + 56 + switch (run) { 57 + case 0: { 58 + expect(state.fetching).toEqual(false); 59 + expect(executeQuery).not.toHaveBeenCalled(); 60 + setPause(false); 61 + break; 62 + } 63 + case 1: { 64 + expect(state.fetching).toEqual(true); 65 + expect(executeQuery).toHaveBeenCalledOnce(); 66 + subject.next({ data: { test: true } }); 67 + break; 68 + } 69 + case 2: { 70 + expect(state.fetching).toEqual(false); 71 + expect(state.data).toStrictEqual({ test: true }); 72 + done(); 73 + break; 74 + } 75 + } 76 + 77 + return run + 1; 78 + }); 79 + }); 80 + }); 81 + 82 + it('should override pause when execute via refetch', () => { 83 + const subject = 84 + makeSubject<Pick<OperationResult<{ test: boolean }, any>, 'data'>>(); 85 + const executeQuery = vi 86 + .spyOn(client, 'executeQuery') 87 + .mockImplementation( 88 + () => subject.source as OperationResultSource<OperationResult> 89 + ); 90 + 91 + return testEffect(done => { 92 + const [state, refetch] = createQuery< 93 + { test: boolean }, 94 + { variable: number } 95 + >({ 96 + query: '{ test }', 97 + pause: true, 98 + }); 99 + 100 + createEffect((run: number = 0) => { 101 + markStateDependencies(state); 102 + 103 + switch (run) { 104 + case 0: { 105 + expect(state.fetching).toEqual(false); 106 + expect(executeQuery).not.toBeCalled(); 107 + refetch(); 108 + break; 109 + } 110 + case 1: { 111 + expect(state.fetching).toEqual(true); 112 + expect(executeQuery).toHaveBeenCalledOnce(); 113 + subject.next({ data: { test: true } }); 114 + break; 115 + } 116 + case 2: { 117 + expect(state.fetching).toEqual(false); 118 + expect(state.data).toStrictEqual({ test: true }); 119 + done(); 120 + break; 121 + } 122 + } 123 + 124 + return run + 1; 125 + }); 126 + }); 127 + }); 128 + 129 + it('should trigger refetch on variables change', () => { 130 + const subject = 131 + makeSubject<Pick<OperationResult<{ test: boolean }, any>, 'data'>>(); 132 + const executeQuery = vi 133 + .spyOn(client, 'executeQuery') 134 + .mockImplementation( 135 + () => subject.source as OperationResultSource<OperationResult> 136 + ); 137 + 138 + return testEffect(done => { 139 + const [variables, setVariables] = createSignal<{ variable: number }>({ 140 + variable: 1, 141 + }); 142 + 143 + const [state] = createQuery<{ test: boolean }, { variable: number }>({ 144 + query: '{ test }', 145 + variables: variables, 146 + }); 147 + 148 + createEffect((run: number = 0) => { 149 + markStateDependencies(state); 150 + 151 + switch (run) { 152 + case 0: { 153 + expect(state.fetching).toEqual(true); 154 + 155 + subject.next({ data: { test: true } }); 156 + 157 + break; 158 + } 159 + case 1: { 160 + expect(state.fetching).toEqual(false); 161 + expect(state.data).toEqual({ test: true }); 162 + setVariables({ variable: 2 }); 163 + break; 164 + } 165 + case 2: { 166 + expect(state.fetching).toEqual(true); 167 + expect(executeQuery).toHaveBeenCalledTimes(2); 168 + 169 + subject.next({ data: { test: false } }); 170 + break; 171 + } 172 + case 3: { 173 + expect(state.fetching).toEqual(false); 174 + expect(state.data).toEqual({ test: false }); 175 + done(); 176 + break; 177 + } 178 + } 179 + 180 + return run + 1; 181 + }); 182 + }); 183 + }); 184 + 185 + it('should receive data', () => { 186 + const subject = 187 + makeSubject<Pick<OperationResult<{ test: boolean }, any>, 'data'>>(); 188 + const executeQuery = vi 189 + .spyOn(client, 'executeQuery') 190 + .mockImplementation( 191 + () => subject.source as OperationResultSource<OperationResult> 192 + ); 193 + 194 + return testEffect(done => { 195 + const [state] = createQuery<{ test: boolean }, { variable: number }>({ 196 + query: '{ test }', 197 + }); 198 + 199 + createEffect((run: number = 0) => { 200 + markStateDependencies(state); 201 + 202 + switch (run) { 203 + case 0: { 204 + expect(state.fetching).toEqual(true); 205 + expect(state.data).toBeUndefined(); 206 + 207 + subject.next({ data: { test: true } }); 208 + break; 209 + } 210 + 211 + case 1: { 212 + expect(state.fetching).toEqual(false); 213 + expect(state.data).toStrictEqual({ test: true }); 214 + expect(executeQuery).toHaveBeenCalledTimes(1); 215 + done(); 216 + break; 217 + } 218 + } 219 + 220 + return run + 1; 221 + }); 222 + }); 223 + }); 224 + 225 + it('should unsubscribe on teardown', () => { 226 + const subject = 227 + makeSubject<Pick<OperationResult<{ value: number }, any>, 'data'>>(); 228 + vi.spyOn(client, 'executeQuery').mockImplementation( 229 + () => subject.source as OperationResultSource<OperationResult> 230 + ); 231 + 232 + const { 233 + result: [state], 234 + cleanup, 235 + } = renderHook(() => 236 + createQuery<{ test: number }, { variable: number }>({ 237 + query: '{ test }', 238 + }) 239 + ); 240 + 241 + return testEffect(done => { 242 + markStateDependencies(state); 243 + 244 + createEffect((run: number = 0) => { 245 + switch (run) { 246 + case 0: { 247 + expect(state.fetching).toEqual(true); 248 + cleanup(); 249 + break; 250 + } 251 + case 1: { 252 + expect(state.fetching).toEqual(false); 253 + done(); 254 + break; 255 + } 256 + } 257 + 258 + return run + 1; 259 + }); 260 + }); 261 + }); 262 + });
+337
packages/solid-urql/src/createQuery.ts
··· 1 + import { 2 + type AnyVariables, 3 + type OperationContext, 4 + type DocumentInput, 5 + type OperationResult, 6 + type RequestPolicy, 7 + createRequest, 8 + } from '@urql/core'; 9 + import { 10 + createComputed, 11 + createMemo, 12 + createResource, 13 + createSignal, 14 + onCleanup, 15 + } from 'solid-js'; 16 + import { createStore, produce } from 'solid-js/store'; 17 + import { useClient } from './context'; 18 + import { type MaybeAccessor, asAccessor } from './utils'; 19 + import type { Source, Subscription } from 'wonka'; 20 + import { onEnd, pipe, subscribe } from 'wonka'; 21 + 22 + /** Triggers {@link createQuery} to execute a new GraphQL query operation. 23 + * 24 + * @remarks 25 + * When called, {@link createQuery} will re-execute the GraphQL query operation 26 + * it currently holds, even if {@link CreateQueryArgs.pause} is set to `true`. 27 + * 28 + * This is useful for executing a paused query or re-executing a query 29 + * and get a new network result, by passing a new request policy. 30 + * 31 + * ```ts 32 + * const [result, reExecuteQuery] = createQuery({ query }); 33 + * 34 + * const refresh = () => { 35 + * // Re-execute the query with a network-only policy, skipping the cache 36 + * reExecuteQuery({ requestPolicy: 'network-only' }); 37 + * }; 38 + * ``` 39 + * 40 + */ 41 + export type CreateQueryExecute = (opts?: Partial<OperationContext>) => void; 42 + 43 + /** State of the current query, your {@link createQuery} hook is executing. 44 + * 45 + * @remarks 46 + * `CreateQueryState` is returned (in a tuple) by {@link createQuery} and 47 + * gives you the updating {@link OperationResult} of GraphQL queries. 48 + * 49 + * Even when the query and variables passed to {@link createQuery} change, 50 + * this state preserves the prior state and sets the `fetching` flag to 51 + * `true`. 52 + * This allows you to display the previous state, while implementing 53 + * a separate loading indicator separately. 54 + */ 55 + export type CreateQueryState< 56 + Data = any, 57 + Variables extends AnyVariables = AnyVariables, 58 + > = OperationResult<Data, Variables> & { 59 + /** Indicates whether `createQuery` is waiting for a new result. 60 + * 61 + * @remarks 62 + * When `createQuery` is passed a new query and/or variables, it will 63 + * start executing the new query operation and `fetching` is set to 64 + * `true` until a result arrives. 65 + * 66 + * Hint: This is subtly different than whether the query is actually 67 + * fetching, and doesn’t indicate whether a query is being re-executed 68 + * in the background. For this, see {@link CreateQueryState.stale}. 69 + */ 70 + fetching: boolean; 71 + }; 72 + 73 + /** 74 + * Input arguments for the {@link createQuery} hook. 75 + */ 76 + export type CreateQueryArgs< 77 + Data = any, 78 + Variables extends AnyVariables = AnyVariables, 79 + > = { 80 + /** The GraphQL query that `createQuery` executes. */ 81 + query: DocumentInput<Data, Variables>; 82 + 83 + /** The variables for the GraphQL {@link CreateQueryArgs.query} that `createQuery` executes. */ 84 + variables?: MaybeAccessor<Variables>; 85 + 86 + /** Updates the {@link RequestPolicy} for the executed GraphQL query operation. 87 + * 88 + * @remarks 89 + * `requestPolicy` modifies the {@link RequestPolicy} of the GraphQL query operation 90 + * that `createQuery` executes, and indicates a caching strategy for cache exchanges. 91 + * 92 + * For example, when set to `'cache-and-network'`, {@link createQuery} will 93 + * receive a cached result with `stale: true` and an API request will be 94 + * sent in the background. 95 + * 96 + * @see {@link OperationContext.requestPolicy} for where this value is set. 97 + */ 98 + requestPolicy?: MaybeAccessor<RequestPolicy>; 99 + 100 + /** Updates the {@link OperationContext} for the executed GraphQL query operation. 101 + * 102 + * @remarks 103 + * `context` may be passed to {@link createQuery}, to update the {@link OperationContext} 104 + * of a query operation. This may be used to update the `context` that exchanges 105 + * will receive for a single hook. 106 + * 107 + * In order to re-execute query on context change pass {@link Accessor} instead 108 + * of raw value. 109 + */ 110 + context?: MaybeAccessor<Partial<OperationContext>>; 111 + 112 + /** Prevents {@link createQuery} from automatically executing GraphQL query operations. 113 + * 114 + * @remarks 115 + * `pause` may be set to `true` to stop {@link createQuery} from executing 116 + * automatically. The hook will stop receiving updates from the {@link Client} 117 + * and won’t execute the query operation, until either it’s set to `false` 118 + * or the {@link CreateQueryExecute} function is called. 119 + */ 120 + pause?: MaybeAccessor<boolean>; 121 + }; 122 + 123 + /** Result tuple returned by the {@link createQuery} hook. 124 + * 125 + * @remarks 126 + * the first element is the {@link createQuery}’s result and state, 127 + * a {@link CreateQueryState} object, 128 + * and the second is used to imperatively re-execute the query 129 + * via a {@link CreateQueryExecute} function. 130 + */ 131 + export type CreateQueryResult< 132 + Data = any, 133 + Variables extends AnyVariables = AnyVariables, 134 + > = [CreateQueryState<Data, Variables>, CreateQueryExecute]; 135 + 136 + /** Hook to run a GraphQL query and get updated GraphQL results. 137 + * 138 + * @param args - a {@link CreateQueryArgs} object, to pass a `query`, `variables`, and options. 139 + * @returns a {@link CreateQueryResult} tuple of a {@link CreateQueryState} result, and re-execute function. 140 + * 141 + * @remarks 142 + * `createQuery` allows GraphQL queries to be defined and executed. 143 + * Given {@link CreateQueryArgs.query}, it executes the GraphQL query with the 144 + * context’s {@link Client}. 145 + * 146 + * The returned result updates when the `Client` has new results 147 + * for the query, and changes when your input `args` change. 148 + * 149 + * Additionally, if the `suspense` option is enabled on the `Client`, 150 + * the `createQuery` hook will suspend instead of indicating that it’s 151 + * waiting for a result via {@link CreateQueryState.fetching}. 152 + * 153 + * @example 154 + * ```tsx 155 + * import { gql, createQuery } from '@urql/solid'; 156 + * 157 + * const TodosQuery = gql` 158 + * query { todos { id, title } } 159 + * `; 160 + * 161 + * const Todos = () => { 162 + * const [result, reExecuteQuery] = createQuery({ 163 + * query: TodosQuery, 164 + * }); 165 + * // ... 166 + * }; 167 + * ``` 168 + */ 169 + export const createQuery = < 170 + Data = any, 171 + Variables extends AnyVariables = AnyVariables, 172 + >( 173 + args: CreateQueryArgs<Data, Variables> 174 + ): CreateQueryResult<Data, Variables> => { 175 + const client = useClient(); 176 + const getContext = asAccessor(args.context); 177 + const getPause = asAccessor(args.pause); 178 + const getRequestPolicy = asAccessor(args.requestPolicy); 179 + const getVariables = asAccessor(args.variables); 180 + 181 + const [source, setSource] = createSignal< 182 + Source<OperationResult<Data, Variables>> | undefined 183 + >(undefined, { equals: false }); 184 + 185 + // Combine suspense param coming from context and client with context being priority 186 + const isSuspense = createMemo(() => { 187 + const ctx = getContext(); 188 + if (ctx !== undefined && ctx.suspense !== undefined) { 189 + return ctx.suspense; 190 + } 191 + 192 + return client.suspense; 193 + }); 194 + 195 + const request = createRequest(args.query, getVariables() as any); 196 + const context: Partial<OperationContext> = { 197 + requestPolicy: getRequestPolicy(), 198 + ...getContext(), 199 + }; 200 + const operation = client.createRequestOperation('query', request, context); 201 + const initialResult: CreateQueryState<Data, Variables> = { 202 + operation: operation, 203 + fetching: false, 204 + data: undefined, 205 + error: undefined, 206 + extensions: undefined, 207 + hasNext: false, 208 + stale: false, 209 + }; 210 + 211 + const [result, setResult] = 212 + createStore<CreateQueryState<Data, Variables>>(initialResult); 213 + 214 + createComputed(() => { 215 + if (getPause() === true) { 216 + setSource(undefined); 217 + return; 218 + } 219 + 220 + const request = createRequest(args.query, getVariables() as any); 221 + const context: Partial<OperationContext> = { 222 + requestPolicy: getRequestPolicy(), 223 + ...getContext(), 224 + }; 225 + 226 + setSource(() => client.executeQuery(request, context)); 227 + }); 228 + 229 + createComputed(() => { 230 + const s = source(); 231 + if (s === undefined) { 232 + setResult( 233 + produce(draft => { 234 + draft.fetching = false; 235 + draft.stale = false; 236 + }) 237 + ); 238 + 239 + return; 240 + } 241 + 242 + setResult( 243 + produce(draft => { 244 + draft.fetching = true; 245 + draft.stale = false; 246 + }) 247 + ); 248 + 249 + onCleanup( 250 + pipe( 251 + s, 252 + onEnd(() => { 253 + setResult( 254 + produce(draft => { 255 + draft.fetching = false; 256 + draft.stale = false; 257 + }) 258 + ); 259 + }), 260 + subscribe(res => { 261 + setResult( 262 + produce(draft => { 263 + draft.data = res.data; 264 + draft.stale = !!res.stale; 265 + draft.fetching = false; 266 + draft.error = res.error; 267 + draft.operation = res.operation; 268 + draft.extensions = res.extensions; 269 + }) 270 + ); 271 + }) 272 + ).unsubscribe 273 + ); 274 + }); 275 + 276 + const [dataResource, { refetch }] = createResource< 277 + CreateQueryState<Data, Variables>, 278 + Source<OperationResult<Data, Variables>> | undefined 279 + >(source, source => { 280 + let sub: Subscription | void; 281 + if (source === undefined) { 282 + return Promise.resolve(result); 283 + } 284 + 285 + return new Promise<CreateQueryState<Data, Variables>>(resolve => { 286 + let hasResult = false; 287 + sub = pipe( 288 + source, 289 + subscribe(() => { 290 + if (!result.fetching && !result.stale) { 291 + if (sub) sub.unsubscribe(); 292 + hasResult = true; 293 + resolve(result); 294 + } 295 + }) 296 + ); 297 + if (hasResult) { 298 + sub.unsubscribe(); 299 + } 300 + }); 301 + }); 302 + 303 + const executeQuery: CreateQueryExecute = opts => { 304 + const request = createRequest(args.query, getVariables() as any); 305 + const context: Partial<OperationContext> = { 306 + requestPolicy: getRequestPolicy(), 307 + ...getContext(), 308 + ...opts, 309 + }; 310 + 311 + setSource(() => client.executeQuery(request, context)); 312 + if (isSuspense()) { 313 + refetch(); 314 + } 315 + }; 316 + 317 + const handler = { 318 + get( 319 + target: CreateQueryState<Data, Variables>, 320 + prop: keyof CreateQueryState<Data, Variables> 321 + ): any { 322 + if (isSuspense() && prop === 'data') { 323 + const resource = dataResource(); 324 + if (resource !== undefined) { 325 + return resource.data; 326 + } 327 + 328 + return undefined; 329 + } 330 + 331 + return Reflect.get(target, prop); 332 + }, 333 + }; 334 + 335 + const proxy = new Proxy(result, handler); 336 + return [proxy, executeQuery]; 337 + };
+341
packages/solid-urql/src/createSubscription.test.ts
··· 1 + // @vitest-environment jsdom 2 + 3 + import { renderHook, testEffect } from '@solidjs/testing-library'; 4 + import { 5 + OperationResult, 6 + OperationResultSource, 7 + createClient, 8 + createRequest, 9 + gql, 10 + } from '@urql/core'; 11 + import { expect, it, describe, vi } from 'vitest'; 12 + import { makeSubject } from 'wonka'; 13 + import { 14 + CreateSubscriptionState, 15 + createSubscription, 16 + } from './createSubscription'; 17 + import { createEffect, createSignal } from 'solid-js'; 18 + 19 + const QUERY = gql` 20 + subscription { 21 + value 22 + } 23 + `; 24 + 25 + const client = createClient({ 26 + url: '/graphql', 27 + exchanges: [], 28 + suspense: false, 29 + }); 30 + 31 + vi.mock('./context', () => { 32 + const useClient = () => { 33 + return client!; 34 + }; 35 + 36 + return { useClient }; 37 + }); 38 + 39 + // Given that it is not possible to directly listen to all store changes it is necessary 40 + // to access all relevant parts on which `createEffect` should listen on 41 + const markStateDependencies = (state: CreateSubscriptionState<any, any>) => { 42 + state.data; 43 + state.error; 44 + state.extensions; 45 + state.fetching; 46 + state.operation; 47 + state.stale; 48 + }; 49 + 50 + describe('createSubscription', () => { 51 + it('should receive data', () => { 52 + return testEffect(done => { 53 + const subject = 54 + makeSubject<Pick<OperationResult<{ value: number }, any>, 'data'>>(); 55 + const executeQuery = vi 56 + .spyOn(client, 'executeSubscription') 57 + .mockImplementation( 58 + () => subject.source as OperationResultSource<OperationResult> 59 + ); 60 + 61 + const request = createRequest(QUERY, undefined); 62 + const operation = client.createRequestOperation('subscription', request); 63 + 64 + const [state] = createSubscription< 65 + { value: number }, 66 + { value: number }, 67 + { variable: number } 68 + >({ 69 + query: QUERY, 70 + }); 71 + 72 + createEffect((run: number = 0) => { 73 + markStateDependencies(state); 74 + 75 + switch (run) { 76 + case 0: { 77 + expect(state).toMatchObject({ 78 + data: undefined, 79 + stale: false, 80 + operation: operation, 81 + error: undefined, 82 + extensions: undefined, 83 + fetching: true, 84 + }); 85 + expect(executeQuery).toEqual(expect.any(Function)); 86 + expect(executeQuery).toHaveBeenCalledOnce(); 87 + expect(client.executeSubscription).toBeCalledWith( 88 + { 89 + key: expect.any(Number), 90 + query: expect.any(Object), 91 + variables: {}, 92 + }, 93 + undefined 94 + ); 95 + subject.next({ data: { value: 0 } }); 96 + break; 97 + } 98 + case 1: { 99 + expect(state.data).toEqual({ value: 0 }); 100 + subject.next({ data: { value: 1 } }); 101 + break; 102 + } 103 + case 2: { 104 + expect(state.data).toEqual({ value: 1 }); 105 + // expect(state.fetching).toEqual(true); 106 + subject.complete(); 107 + break; 108 + } 109 + case 3: { 110 + expect(state.fetching).toEqual(false); 111 + expect(state.data).toEqual({ value: 1 }); 112 + done(); 113 + } 114 + } 115 + 116 + return run + 1; 117 + }); 118 + }); 119 + }); 120 + 121 + it('should call handler', () => { 122 + const handler = vi.fn(); 123 + const subject = 124 + makeSubject<Pick<OperationResult<{ value: number }, any>, 'data'>>(); 125 + vi.spyOn(client, 'executeSubscription').mockImplementation( 126 + () => subject.source as OperationResultSource<OperationResult> 127 + ); 128 + 129 + return testEffect(done => { 130 + const [state] = createSubscription< 131 + { value: number }, 132 + { value: number }, 133 + { variable: number } 134 + >( 135 + { 136 + query: QUERY, 137 + }, 138 + handler 139 + ); 140 + 141 + createEffect((run: number = 0) => { 142 + markStateDependencies(state); 143 + switch (run) { 144 + case 0: { 145 + expect(state.fetching).toEqual(true); 146 + subject.next({ data: { value: 0 } }); 147 + 148 + break; 149 + } 150 + case 1: { 151 + expect(handler).toHaveBeenCalledOnce(); 152 + expect(handler).toBeCalledWith(undefined, { value: 0 }); 153 + done(); 154 + break; 155 + } 156 + } 157 + 158 + return run + 1; 159 + }); 160 + }); 161 + }); 162 + 163 + it('should unsubscribe on teardown', () => { 164 + const subject = 165 + makeSubject<Pick<OperationResult<{ value: number }, any>, 'data'>>(); 166 + vi.spyOn(client, 'executeSubscription').mockImplementation( 167 + () => subject.source as OperationResultSource<OperationResult> 168 + ); 169 + 170 + const { 171 + result: [state], 172 + cleanup, 173 + } = renderHook(() => 174 + createSubscription<{ value: number }, { variable: number }>({ 175 + query: QUERY, 176 + }) 177 + ); 178 + 179 + return testEffect(done => 180 + createEffect((run: number = 0) => { 181 + if (run === 0) { 182 + expect(state.fetching).toEqual(true); 183 + cleanup(); 184 + } 185 + 186 + if (run === 1) { 187 + expect(state.fetching).toEqual(false); 188 + done(); 189 + } 190 + 191 + return run + 1; 192 + }) 193 + ); 194 + }); 195 + 196 + it('should skip executing query when paused', () => { 197 + const subject = 198 + makeSubject<Pick<OperationResult<{ value: number }, any>, 'data'>>(); 199 + vi.spyOn(client, 'executeSubscription').mockImplementation( 200 + () => subject.source as OperationResultSource<OperationResult> 201 + ); 202 + 203 + return testEffect(done => { 204 + const [pause, setPause] = createSignal<boolean>(true); 205 + 206 + const [state] = createSubscription< 207 + { value: number }, 208 + { value: number }, 209 + { variable: number } 210 + >({ query: QUERY, pause: pause }); 211 + 212 + createEffect((run: number = 0) => { 213 + switch (run) { 214 + case 0: { 215 + expect(state.fetching).toBe(false); 216 + setPause(false); 217 + break; 218 + } 219 + case 1: { 220 + expect(state.fetching).toBe(true); 221 + expect(state.data).toBeUndefined(); 222 + subject.next({ data: { value: 1 } }); 223 + 224 + break; 225 + } 226 + case 2: { 227 + expect(state.data).toStrictEqual({ value: 1 }); 228 + done(); 229 + break; 230 + } 231 + } 232 + 233 + return run + 1; 234 + }); 235 + }); 236 + }); 237 + 238 + it('should override pause when execute executeSubscription', () => { 239 + const subject = 240 + makeSubject<Pick<OperationResult<{ value: number }, any>, 'data'>>(); 241 + const executeQuery = vi 242 + .spyOn(client, 'executeSubscription') 243 + .mockImplementation( 244 + () => subject.source as OperationResultSource<OperationResult> 245 + ); 246 + 247 + return testEffect(done => { 248 + const [state, executeSubscription] = createSubscription< 249 + { value: number }, 250 + { value: number }, 251 + { variable: number } 252 + >({ 253 + query: QUERY, 254 + pause: true, 255 + }); 256 + 257 + createEffect((run: number = 0) => { 258 + markStateDependencies(state); 259 + 260 + switch (run) { 261 + case 0: { 262 + expect(state.fetching).toEqual(false); 263 + expect(executeQuery).not.toBeCalled(); 264 + 265 + executeSubscription(); 266 + 267 + break; 268 + } 269 + case 1: { 270 + expect(state.fetching).toEqual(true); 271 + expect(executeQuery).toHaveBeenCalledOnce(); 272 + subject.next({ data: { value: 1 } }); 273 + break; 274 + } 275 + case 2: { 276 + expect(state.data).toStrictEqual({ value: 1 }); 277 + done(); 278 + break; 279 + } 280 + } 281 + 282 + return run + 1; 283 + }); 284 + }); 285 + }); 286 + 287 + it('should aggregate results', () => { 288 + const subject = 289 + makeSubject<Pick<OperationResult<{ value: number }, any>, 'data'>>(); 290 + vi.spyOn(client, 'executeSubscription').mockImplementation( 291 + () => subject.source as OperationResultSource<OperationResult> 292 + ); 293 + 294 + return testEffect(done => { 295 + const [state] = createSubscription< 296 + { value: number }, 297 + { merged: number }, 298 + { variable: number } 299 + >( 300 + { 301 + query: QUERY, 302 + }, 303 + (prev, next) => { 304 + if (prev === undefined) { 305 + return { 306 + merged: 0 + next.value, 307 + }; 308 + } 309 + 310 + return { merged: prev.merged + next.value }; 311 + } 312 + ); 313 + 314 + createEffect((run: number = 0) => { 315 + markStateDependencies(state); 316 + switch (run) { 317 + case 0: { 318 + expect(state.fetching).toEqual(true); 319 + subject.next({ data: { value: 1 } }); 320 + 321 + break; 322 + } 323 + case 1: { 324 + expect(state.data).toEqual({ merged: 1 }); 325 + subject.next({ data: { value: 2 } }); 326 + 327 + break; 328 + } 329 + case 2: { 330 + expect(state.data).toEqual({ merged: 3 }); 331 + 332 + done(); 333 + break; 334 + } 335 + } 336 + 337 + return run + 1; 338 + }); 339 + }); 340 + }); 341 + });
+300
packages/solid-urql/src/createSubscription.ts
··· 1 + import { type MaybeAccessor, asAccessor } from './utils'; 2 + import { 3 + type AnyVariables, 4 + type DocumentInput, 5 + type Operation, 6 + type OperationContext, 7 + type OperationResult, 8 + type CombinedError, 9 + createRequest, 10 + } from '@urql/core'; 11 + import { useClient } from './context'; 12 + import { createStore, produce } from 'solid-js/store'; 13 + import { createComputed, createSignal, onCleanup } from 'solid-js'; 14 + import { type Source, onEnd, pipe, subscribe } from 'wonka'; 15 + 16 + /** Triggers {@link createSubscription} to re-execute a GraphQL subscription operation. 17 + * 18 + * @param opts - optionally, context options that will be merged with the hook's 19 + * {@link CreateSubscriptionArgs.context} options and the `Client`’s options. 20 + * 21 + * @remarks 22 + * When called, {@link createSubscription} will restart the GraphQL subscription 23 + * operation it currently holds. If {@link CreateSubscriptionArgs.pause} is set 24 + * to `true`, it will start executing the subscription. 25 + * 26 + * ```ts 27 + * const [result, executeSubscription] = createSubscription({ 28 + * query, 29 + * pause: true, 30 + * }); 31 + * 32 + * const start = () => { 33 + * executeSubscription(); 34 + * }; 35 + * ``` 36 + */ 37 + export type CreateSubscriptionExecute = ( 38 + opts?: Partial<OperationContext> 39 + ) => void; 40 + 41 + /** Input arguments for the {@link createSubscription} hook. */ 42 + export type CreateSubscriptionArgs< 43 + Data, 44 + Variables extends AnyVariables = AnyVariables, 45 + > = { 46 + /** The GraphQL subscription document that `createSubscription` executes. */ 47 + query: DocumentInput<Data, Variables>; 48 + 49 + /** The variables for the GraphQL subscription that `createSubscription` executes. */ 50 + variables?: MaybeAccessor<Variables>; 51 + 52 + /** Updates the {@link OperationContext} for the executed GraphQL subscription operation. 53 + * 54 + * @remarks 55 + * `context` may be passed to {@link createSubscription}, to update the {@link OperationContext} 56 + * of a subscription operation. This may be used to update the `context` that exchanges 57 + * will receive for a single hook. 58 + */ 59 + context?: MaybeAccessor<Partial<OperationContext>>; 60 + 61 + /** Prevents {@link createSubscription} from automatically starting GraphQL subscriptions. 62 + * 63 + * @remarks 64 + * `pause` may be set to `true` to stop {@link createSubscription} from starting its subscription 65 + * automatically. The hook will stop receiving updates from the {@link Client} 66 + * and won’t start the subscription operation, until either it’s set to `false` 67 + * or the {@link CreateSubscriptionExecute} function is called. 68 + */ 69 + pause?: MaybeAccessor<boolean>; 70 + }; 71 + 72 + export type CreateSubscriptionState< 73 + Data = any, 74 + Variables extends AnyVariables = AnyVariables, 75 + > = { 76 + /** Indicates whether `createSubscription`’s subscription is active. 77 + * 78 + * @remarks 79 + * When `createSubscription` starts a subscription, the `fetching` flag 80 + * is set to `true` and will remain `true` until the subscription 81 + * completes on the API, or the {@link CreateSubscriptionArgs.pause} 82 + * flag is set to `true`. 83 + */ 84 + fetching: boolean; 85 + 86 + /** Indicates that the subscription result is not fresh. 87 + * 88 + * @remarks 89 + * This is mostly unused for subscriptions and will rarely affect you, and 90 + * is more relevant for queries. 91 + * 92 + * @see {@link OperationResult.stale} for the source of this value. 93 + */ 94 + stale: boolean; 95 + 96 + /** The {@link OperationResult.data} for the executed subscription, or data returned by a handler. 97 + * 98 + * @remarks 99 + * `data` will be set to the last {@link OperationResult.data} value 100 + * received for the subscription. 101 + * 102 + * It will instead be set to the values that {@link SubscriptionHandler} 103 + * returned, if a handler has been passed to {@link CreateSubscription}. 104 + */ 105 + data?: Data; 106 + 107 + /** The {@link OperationResult.error} for the executed subscription. */ 108 + error?: CombinedError; 109 + 110 + /** The {@link OperationResult.extensions} for the executed mutation. */ 111 + extensions?: Record<string, any>; 112 + 113 + /** The {@link Operation} that the current state is for. 114 + * 115 + * @remarks 116 + * This is the subscription {@link Operation} that is currently active. 117 + * When {@link CreateSubscriptionState.fetching} is `true`, this is the 118 + * last `Operation` that the current state was for. 119 + */ 120 + operation?: Operation<Data, Variables>; 121 + }; 122 + 123 + /** Combines previous data with an incoming subscription result’s data. 124 + * 125 + * @remarks 126 + * A `SubscriptionHandler` may be passed to {@link createSubscription} to 127 + * aggregate subscription results into a combined {@link CreateSubscriptionState.data} 128 + * value. 129 + * 130 + * This is useful when a subscription event delivers a single item, while 131 + * you’d like to display a list of events. 132 + * 133 + * @example 134 + * ```ts 135 + * const NotificationsSubscription = gql` 136 + * subscription { newNotification { id, text } } 137 + * `; 138 + * 139 + * const combineNotifications = (notifications = [], data) => { 140 + * return [...notifications, data.newNotification]; 141 + * }; 142 + * 143 + * const [result, executeSubscription] = createSubscription( 144 + * { query: NotificationsSubscription }, 145 + * combineNotifications, 146 + * ); 147 + * ``` 148 + */ 149 + export type SubscriptionHandler<T, R> = (prev: R | undefined, data: T) => R; 150 + 151 + /** Result tuple returned by the {@link createSubscription} hook. 152 + * 153 + * @remarks 154 + * Similarly to a `createSignal` hook’s return value, 155 + * the first element is the {@link createSubscription}’s state, 156 + * a {@link CreateSubscriptionState} object, 157 + * and the second is used to imperatively re-execute or start the subscription 158 + * via a {@link CreateMutationExecute} function. 159 + */ 160 + export type CreateSubscriptionResult< 161 + Data, 162 + Variables extends AnyVariables = AnyVariables, 163 + > = [CreateSubscriptionState<Data, Variables>, CreateSubscriptionExecute]; 164 + 165 + /** Hook to run a GraphQL subscription and get updated GraphQL results. 166 + * 167 + * @param args - a {@link CreateSubscriptionArgs} object, to pass a `query`, `variables`, and options. 168 + * @param handler - optionally, a {@link SubscriptionHandler} function to combine multiple subscription results. 169 + * @returns a {@link CreateSubscriptionResponse} tuple of a {@link CreateSubscriptionState} result, 170 + * and an execute function. 171 + * 172 + * @remarks 173 + * `createSubscription` allows GraphQL subscriptions to be defined and executed. 174 + * Given {@link CreateSubscriptionArgs.query}, it executes the GraphQL subscription with the 175 + * context’s {@link Client}. 176 + * 177 + * The returned result updates when the `Client` has new results 178 + * for the subscription, and `data` is updated with the result’s data 179 + * or with the `data` that a `handler` returns. 180 + * 181 + * @example 182 + * ```ts 183 + * import { gql, createSubscription } from '@urql/solid'; 184 + * 185 + * const NotificationsSubscription = gql` 186 + * subscription { newNotification { id, text } } 187 + * `; 188 + * 189 + * const combineNotifications = (notifications = [], data) => { 190 + * return [...notifications, data.newNotification]; 191 + * }; 192 + * 193 + * const Notifications = () => { 194 + * const [result, executeSubscription] = createSubscription( 195 + * { query: NotificationsSubscription }, 196 + * combineNotifications, 197 + * ); 198 + * // ... 199 + * }; 200 + * ``` 201 + */ 202 + export const createSubscription = < 203 + Data, 204 + Result = Data, 205 + Variables extends AnyVariables = AnyVariables, 206 + >( 207 + args: CreateSubscriptionArgs<Data, Variables>, 208 + handler?: SubscriptionHandler<Data, Result> 209 + ): CreateSubscriptionResult<Result, Variables> => { 210 + const getContext = asAccessor(args.context); 211 + const getPause = asAccessor(args.pause); 212 + const getVariables = asAccessor(args.variables); 213 + 214 + const client = useClient(); 215 + 216 + const request = createRequest(args.query, getVariables() as Variables); 217 + const operation = client.createRequestOperation( 218 + 'subscription', 219 + request, 220 + getContext() 221 + ); 222 + const initialState: CreateSubscriptionState<Result, Variables> = { 223 + operation, 224 + fetching: false, 225 + data: undefined, 226 + error: undefined, 227 + extensions: undefined, 228 + stale: false, 229 + }; 230 + 231 + const [source, setSource] = createSignal< 232 + Source<OperationResult<Data, Variables>> | undefined 233 + >(undefined, { equals: false }); 234 + 235 + const [state, setState] = 236 + createStore<CreateSubscriptionState<Result, Variables>>(initialState); 237 + 238 + createComputed(() => { 239 + if (getPause() === true) { 240 + setSource(undefined); 241 + return; 242 + } 243 + 244 + const context = getContext(); 245 + const request = createRequest(args.query, getVariables() as Variables); 246 + setSource(() => client.executeSubscription(request, context)); 247 + }); 248 + 249 + createComputed(() => { 250 + const s = source(); 251 + if (s === undefined) { 252 + setState('fetching', false); 253 + 254 + return; 255 + } 256 + 257 + setState('fetching', true); 258 + onCleanup( 259 + pipe( 260 + s, 261 + onEnd(() => { 262 + setState( 263 + produce(draft => { 264 + draft.fetching = false; 265 + }) 266 + ); 267 + }), 268 + subscribe(res => { 269 + setState( 270 + produce(draft => { 271 + draft.data = 272 + res.data !== undefined 273 + ? typeof handler === 'function' 274 + ? handler(draft.data, res.data) 275 + : res.data 276 + : (draft.data as any); 277 + draft.stale = !!res.stale; 278 + draft.fetching = true; 279 + draft.error = res.error; 280 + draft.operation = res.operation; 281 + draft.extensions = res.extensions; 282 + }) 283 + ); 284 + }) 285 + ).unsubscribe 286 + ); 287 + }); 288 + 289 + const executeSubscription = (opts?: Partial<OperationContext>) => { 290 + const context: Partial<OperationContext> = { 291 + ...getContext(), 292 + ...opts, 293 + }; 294 + const request = createRequest(args.query, getVariables() as Variables); 295 + 296 + setSource(() => client.executeSubscription(request, context)); 297 + }; 298 + 299 + return [state, executeSubscription]; 300 + };
+29
packages/solid-urql/src/index.ts
··· 1 + export * from '@urql/core'; 2 + 3 + export { type UseClient } from './context'; 4 + export { useClient } from './context'; 5 + 6 + export { 7 + type CreateMutationState, 8 + type CreateMutationExecute, 9 + type CreateMutationResult, 10 + } from './createMutation'; 11 + export { createMutation } from './createMutation'; 12 + 13 + export { 14 + type CreateQueryArgs, 15 + type CreateQueryState, 16 + type CreateQueryExecute, 17 + type CreateQueryResult, 18 + } from './createQuery'; 19 + export { createQuery } from './createQuery'; 20 + 21 + export { 22 + type CreateSubscriptionArgs, 23 + type CreateSubscriptionState, 24 + type CreateSubscriptionExecute, 25 + type CreateSubscriptionResult, 26 + type SubscriptionHandler, 27 + } from './createSubscription'; 28 + 29 + export { createSubscription } from './createSubscription';
+135
packages/solid-urql/src/suspense.test.tsx
··· 1 + /** @jsxImportSource solid-js */ 2 + // @vitest-environment jsdom 3 + 4 + import { describe, it, vi } from 'vitest'; 5 + import { 6 + OperationResult, 7 + OperationResultSource, 8 + createClient, 9 + } from '@urql/core'; 10 + import { createQuery } from './createQuery'; 11 + import { fireEvent, render, screen, waitFor } from '@solidjs/testing-library'; 12 + import { Provider } from './context'; 13 + import { Suspense } from 'solid-js'; 14 + import { makeSubject } from 'wonka'; 15 + 16 + describe('createQuery suspense', () => { 17 + it('should not suspend', async () => { 18 + const client = createClient({ 19 + url: '/graphql', 20 + exchanges: [], 21 + suspense: false, 22 + }); 23 + 24 + const subject = 25 + makeSubject<Pick<OperationResult<{ test: boolean }, any>, 'data'>>(); 26 + vi.spyOn(client, 'executeQuery').mockImplementation( 27 + () => subject.source as OperationResultSource<OperationResult> 28 + ); 29 + 30 + const Page = () => { 31 + const [state, refetch] = createQuery< 32 + { test: boolean }, 33 + { variable: number } 34 + >({ 35 + query: '{ test }', 36 + }); 37 + 38 + return ( 39 + <div> 40 + <button data-testid="refetch" onClick={refetch} /> 41 + data: {String(state.data?.test)} 42 + </div> 43 + ); 44 + }; 45 + 46 + render(() => ( 47 + <Provider value={client}> 48 + <Suspense fallback="loading"> 49 + <Page /> 50 + </Suspense> 51 + </Provider> 52 + )); 53 + 54 + subject.next({ data: { test: true } }); 55 + await waitFor(() => screen.getByText('data: true')); 56 + 57 + fireEvent.click(screen.getByTestId('refetch')); 58 + 59 + subject.next({ data: { test: false } }); 60 + await waitFor(() => screen.getByText('data: false')); 61 + }); 62 + 63 + it('should suspend', async () => { 64 + const client = createClient({ 65 + url: '/graphql', 66 + exchanges: [], 67 + suspense: true, 68 + }); 69 + 70 + const subject = 71 + makeSubject<Pick<OperationResult<{ test: boolean }, any>, 'data'>>(); 72 + vi.spyOn(client, 'executeQuery').mockImplementation( 73 + () => subject.source as OperationResultSource<OperationResult> 74 + ); 75 + 76 + const Page = () => { 77 + const [state] = createQuery<{ test: boolean }, { variable: number }>({ 78 + query: '{ test }', 79 + }); 80 + 81 + return <div>data: {String(state.data?.test)}</div>; 82 + }; 83 + 84 + render(() => ( 85 + <Provider value={client}> 86 + <Suspense fallback="loading"> 87 + <Page /> 88 + </Suspense> 89 + </Provider> 90 + )); 91 + 92 + await waitFor(() => screen.getByText('loading')); 93 + 94 + subject.next({ data: { test: true } }); 95 + await waitFor(() => screen.getByText('data: true')); 96 + }); 97 + 98 + it('context suspend should override client suspend', async () => { 99 + const client = createClient({ 100 + url: '/graphql', 101 + exchanges: [], 102 + suspense: false, 103 + }); 104 + 105 + const subject = 106 + makeSubject<Pick<OperationResult<{ test: boolean }, any>, 'data'>>(); 107 + vi.spyOn(client, 'executeQuery').mockImplementation( 108 + () => subject.source as OperationResultSource<OperationResult> 109 + ); 110 + 111 + const Page = () => { 112 + const [state] = createQuery<{ test: boolean }, { variable: number }>({ 113 + query: '{ test }', 114 + context: { 115 + suspense: true, 116 + }, 117 + }); 118 + 119 + return <div>data: {String(state.data?.test)}</div>; 120 + }; 121 + 122 + render(() => ( 123 + <Provider value={client}> 124 + <Suspense fallback="loading"> 125 + <Page /> 126 + </Suspense> 127 + </Provider> 128 + )); 129 + 130 + await waitFor(() => screen.getByText('loading')); 131 + 132 + subject.next({ data: { test: true } }); 133 + await waitFor(() => screen.getByText('data: true')); 134 + }); 135 + });
+11
packages/solid-urql/src/utils.ts
··· 1 + import type { Accessor } from 'solid-js'; 2 + 3 + export type MaybeAccessor<T> = T | Accessor<T>; 4 + 5 + export type MaybeAccessorValue<T extends MaybeAccessor<any>> = 6 + T extends () => any ? ReturnType<T> : T; 7 + 8 + export const asAccessor = <A extends MaybeAccessor<unknown>>( 9 + v: A 10 + ): Accessor<MaybeAccessorValue<A>> => 11 + typeof v === 'function' ? (v as any) : () => v;
+8
packages/solid-urql/tsconfig.json
··· 1 + { 2 + "extends": "../../tsconfig.json", 3 + "include": ["src"], 4 + "compilerOptions": { 5 + "jsx": "preserve", 6 + "jsxImportSource": "solid-js" 7 + } 8 + }
+7
packages/solid-urql/vitest.config.ts
··· 1 + import { mergeConfig } from 'vitest/config'; 2 + import solidPlugin from 'vite-plugin-solid'; 3 + import baseConfig from '../../vitest.config'; 4 + 5 + export default mergeConfig(baseConfig, { 6 + plugins: [solidPlugin({ hot: false })], 7 + });
+5 -4
packages/storage-rn/package.json
··· 49 49 "prepublishOnly": "run-s clean build" 50 50 }, 51 51 "peerDependencies": { 52 - "@urql/exchange-graphcache": ">=5.0.0", 53 52 "@react-native-async-storage/async-storage": "^1.15.5", 54 - "@react-native-community/netinfo": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^11.0.0" 53 + "@react-native-community/netinfo": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^11.0.0", 54 + "@urql/exchange-graphcache": ">=5.0.0" 55 55 }, 56 56 "devDependencies": { 57 + "@react-native-async-storage/async-storage": "^1.21.0", 58 + "@react-native-community/netinfo": "^11.2.1", 57 59 "@urql/core": "workspace:*", 58 60 "@urql/exchange-graphcache": "workspace:*", 59 - "@react-native-async-storage/async-storage": "^1.21.0", 60 - "@react-native-community/netinfo": "^11.2.1" 61 + "vitest": "^0.30.1" 61 62 }, 62 63 "publishConfig": { 63 64 "access": "public",
+4
packages/storage-rn/vitest.config.ts
··· 1 + import { mergeConfig } from 'vitest/config'; 2 + import baseConfig from '../../vitest.config'; 3 + 4 + export default mergeConfig(baseConfig, {});
+3 -2
packages/svelte-urql/package.json
··· 40 40 "dist/" 41 41 ], 42 42 "scripts": { 43 - "test": "vitest --config ../../vitest.config.ts", 43 + "test": "vitest", 44 44 "clean": "rimraf dist", 45 45 "check": "tsc --noEmit", 46 46 "lint": "eslint --ext=js,jsx,ts,tsx .", ··· 59 59 "devDependencies": { 60 60 "@urql/core": "workspace:*", 61 61 "graphql": "^16.0.0", 62 - "svelte": "^3.20.0" 62 + "svelte": "^3.20.0", 63 + "vitest": "^0.30.1" 63 64 }, 64 65 "publishConfig": { 65 66 "access": "public",
+4
packages/svelte-urql/vitest.config.ts
··· 1 + import { mergeConfig } from 'vitest/config'; 2 + import baseConfig from '../../vitest.config'; 3 + 4 + export default mergeConfig(baseConfig, {});
+2 -1
packages/vue-urql/package.json
··· 40 40 "dist/" 41 41 ], 42 42 "scripts": { 43 - "test": "vitest --config ../../vitest.config.ts", 43 + "test": "vitest", 44 44 "clean": "rimraf dist", 45 45 "check": "tsc --noEmit", 46 46 "lint": "eslint --ext=js,jsx,ts,tsx .", ··· 52 52 "@urql/core": "workspace:*", 53 53 "@vue/test-utils": "^2.3.0", 54 54 "graphql": "^16.0.0", 55 + "vitest": "^0.30.1", 55 56 "vue": "^3.2.47" 56 57 }, 57 58 "peerDependencies": {
+4
packages/vue-urql/vitest.config.ts
··· 1 + import { mergeConfig } from 'vitest/config'; 2 + import baseConfig from '../../vitest.config'; 3 + 4 + export default mergeConfig(baseConfig, {});
+763 -77
pnpm-lock.yaml
··· 194 194 graphql: 195 195 specifier: ^16.6.0 196 196 version: 16.6.0 197 + vitest: 198 + specifier: ^0.30.1 199 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) 197 200 198 201 exchanges/context: 199 202 dependencies: ··· 207 210 graphql: 208 211 specifier: ^16.6.0 209 212 version: 16.6.0 213 + vitest: 214 + specifier: ^0.30.1 215 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) 210 216 211 217 exchanges/execute: 212 218 dependencies: ··· 220 226 graphql: 221 227 specifier: ^16.6.0 222 228 version: 16.6.0 229 + vitest: 230 + specifier: ^0.30.1 231 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) 223 232 224 233 exchanges/graphcache: 225 234 dependencies: ··· 257 266 urql: 258 267 specifier: workspace:* 259 268 version: link:../../packages/react-urql 269 + vitest: 270 + specifier: ^0.30.1 271 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) 260 272 261 273 exchanges/persisted: 262 274 dependencies: ··· 270 282 graphql: 271 283 specifier: ^16.6.0 272 284 version: 16.6.0 285 + vitest: 286 + specifier: ^0.30.1 287 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) 273 288 274 289 exchanges/populate: 275 290 dependencies: ··· 283 298 graphql: 284 299 specifier: ^16.6.0 285 300 version: 16.6.0 301 + vitest: 302 + specifier: ^0.30.1 303 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) 286 304 287 305 exchanges/refocus: 288 306 dependencies: ··· 299 317 graphql: 300 318 specifier: ^16.6.0 301 319 version: 16.6.0 320 + vitest: 321 + specifier: ^0.30.1 322 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) 302 323 303 324 exchanges/request-policy: 304 325 dependencies: ··· 312 333 graphql: 313 334 specifier: ^16.6.0 314 335 version: 16.6.0 336 + vitest: 337 + specifier: ^0.30.1 338 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) 315 339 316 340 exchanges/retry: 317 341 dependencies: ··· 325 349 graphql: 326 350 specifier: ^16.6.0 327 351 version: 16.6.0 352 + vitest: 353 + specifier: ^0.30.1 354 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) 328 355 329 356 packages/core: 330 357 dependencies: ··· 334 361 wonka: 335 362 specifier: ^6.3.2 336 363 version: 6.3.2 364 + devDependencies: 365 + vitest: 366 + specifier: ^0.30.1 367 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) 337 368 338 369 packages/introspection: 339 370 devDependencies: ··· 386 417 preact: 387 418 specifier: ^10.13.0 388 419 version: 10.13.1 420 + vitest: 421 + specifier: ^0.30.1 422 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) 389 423 390 424 packages/react-urql: 391 425 dependencies: ··· 438 472 vite: 439 473 specifier: ^3.2.4 440 474 version: 3.2.5(@types/node@18.16.3)(terser@5.17.1) 475 + vitest: 476 + specifier: ^0.30.1 477 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) 441 478 442 479 packages/site: 443 480 dependencies: ··· 542 579 specifier: '>=4.4.6' 543 580 version: 4.46.0 544 581 582 + packages/solid-urql: 583 + dependencies: 584 + '@urql/core': 585 + specifier: ^4.0.0 586 + version: 4.3.0(graphql@16.6.0) 587 + solid-js: 588 + specifier: ^1.7.7 589 + version: 1.8.17 590 + wonka: 591 + specifier: ^6.3.2 592 + version: 6.3.2 593 + devDependencies: 594 + '@solidjs/testing-library': 595 + specifier: ^0.8.2 596 + version: 0.8.8(solid-js@1.8.17) 597 + graphql: 598 + specifier: ^16.6.0 599 + version: 16.6.0 600 + jsdom: 601 + specifier: ^22.1.0 602 + version: 22.1.0 603 + vite-plugin-solid: 604 + specifier: ^2.7.0 605 + version: 2.10.2(solid-js@1.8.17)(vite@3.2.5) 606 + vite-tsconfig-paths: 607 + specifier: ^4.2.0 608 + version: 4.2.0(typescript@5.1.6)(vite@3.2.5) 609 + vitest: 610 + specifier: ^0.30.1 611 + version: 0.30.1(jsdom@22.1.0)(terser@5.17.1) 612 + 545 613 packages/storage-rn: 546 614 devDependencies: 547 615 '@react-native-async-storage/async-storage': ··· 556 624 '@urql/exchange-graphcache': 557 625 specifier: workspace:* 558 626 version: link:../../exchanges/graphcache 627 + vitest: 628 + specifier: ^0.30.1 629 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) 559 630 560 631 packages/svelte-urql: 561 632 dependencies: ··· 572 643 svelte: 573 644 specifier: ^3.20.0 574 645 version: 3.37.0 646 + vitest: 647 + specifier: ^0.30.1 648 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) 575 649 576 650 packages/vue-urql: 577 651 dependencies: ··· 588 662 graphql: 589 663 specifier: ^16.6.0 590 664 version: 16.6.0 665 + vitest: 666 + specifier: ^0.30.1 667 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) 591 668 vue: 592 669 specifier: ^3.2.47 593 670 version: 3.2.47 ··· 597 674 /@0no-co/graphql.web@1.0.5(graphql@16.6.0): 598 675 resolution: {integrity: sha512-/ODdeNNFksS9hUvpjWFldMEpq0OqCFEIV3NVM0eU8HLUYU0Szf+2iKvr63kkbGchQwk2/1IxPF1PfoCabVkgLw==} 599 676 peerDependencies: 600 - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 677 + graphql: ^16.6.0 601 678 peerDependenciesMeta: 602 679 graphql: 603 680 optional: true ··· 681 758 '@babel/highlight': 7.24.2 682 759 picocolors: 1.0.0 683 760 761 + /@babel/code-frame@7.24.7: 762 + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} 763 + engines: {node: '>=6.9.0'} 764 + dependencies: 765 + '@babel/highlight': 7.24.7 766 + picocolors: 1.0.0 767 + 684 768 /@babel/compat-data@7.21.5: 685 769 resolution: {integrity: sha512-M+XAiQ7GzQ3FDPf0KOLkugzptnIypt0X0ma0wmlTKPR3IchgNFdx2JXxZdvd18JY5s7QkaFD/qyX0dsMpog/Ug==} 686 770 engines: {node: '>=6.9.0'} 771 + 772 + /@babel/compat-data@7.24.7: 773 + resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} 774 + engines: {node: '>=6.9.0'} 775 + dev: true 687 776 688 777 /@babel/core@7.12.9: 689 778 resolution: {integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==} ··· 730 819 transitivePeerDependencies: 731 820 - supports-color 732 821 822 + /@babel/core@7.24.7: 823 + resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} 824 + engines: {node: '>=6.9.0'} 825 + dependencies: 826 + '@ampproject/remapping': 2.2.0 827 + '@babel/code-frame': 7.24.7 828 + '@babel/generator': 7.24.7 829 + '@babel/helper-compilation-targets': 7.24.7 830 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) 831 + '@babel/helpers': 7.24.7 832 + '@babel/parser': 7.24.7 833 + '@babel/template': 7.24.7 834 + '@babel/traverse': 7.24.7 835 + '@babel/types': 7.24.7 836 + convert-source-map: 2.0.0 837 + debug: 4.3.4(supports-color@5.5.0) 838 + gensync: 1.0.0-beta.2 839 + json5: 2.2.3 840 + semver: 6.3.1 841 + transitivePeerDependencies: 842 + - supports-color 843 + dev: true 844 + 733 845 /@babel/generator@7.21.5: 734 846 resolution: {integrity: sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==} 735 847 engines: {node: '>=6.9.0'} ··· 739 851 '@jridgewell/trace-mapping': 0.3.17 740 852 jsesc: 2.5.2 741 853 854 + /@babel/generator@7.24.7: 855 + resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} 856 + engines: {node: '>=6.9.0'} 857 + dependencies: 858 + '@babel/types': 7.24.7 859 + '@jridgewell/gen-mapping': 0.3.5 860 + '@jridgewell/trace-mapping': 0.3.25 861 + jsesc: 2.5.2 862 + dev: true 863 + 742 864 /@babel/helper-annotate-as-pure@7.18.6: 743 865 resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} 744 866 engines: {node: '>=6.9.0'} ··· 764 886 lru-cache: 5.1.1 765 887 semver: 6.3.1 766 888 889 + /@babel/helper-compilation-targets@7.24.7: 890 + resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} 891 + engines: {node: '>=6.9.0'} 892 + dependencies: 893 + '@babel/compat-data': 7.24.7 894 + '@babel/helper-validator-option': 7.24.7 895 + browserslist: 4.23.0 896 + lru-cache: 5.1.1 897 + semver: 6.3.1 898 + dev: true 899 + 767 900 /@babel/helper-create-class-features-plugin@7.21.5(@babel/core@7.21.5): 768 901 resolution: {integrity: sha512-yNSEck9SuDvPTEUYm4BSXl6ZVC7yO5ZLEMAhG3v3zi7RDxyL/nQDemWWZmw4L0stPWwhpnznRRyJHPRcbXR2jw==} 769 902 engines: {node: '>=6.9.0'} ··· 813 946 resolution: {integrity: sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==} 814 947 engines: {node: '>=6.9.0'} 815 948 949 + /@babel/helper-environment-visitor@7.24.7: 950 + resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} 951 + engines: {node: '>=6.9.0'} 952 + dependencies: 953 + '@babel/types': 7.24.7 954 + dev: true 955 + 816 956 /@babel/helper-explode-assignable-expression@7.13.0: 817 957 resolution: {integrity: sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==} 818 958 dependencies: ··· 825 965 '@babel/template': 7.20.7 826 966 '@babel/types': 7.22.4 827 967 968 + /@babel/helper-function-name@7.24.7: 969 + resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} 970 + engines: {node: '>=6.9.0'} 971 + dependencies: 972 + '@babel/template': 7.24.7 973 + '@babel/types': 7.24.7 974 + dev: true 975 + 828 976 /@babel/helper-hoist-variables@7.18.6: 829 977 resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} 830 978 engines: {node: '>=6.9.0'} 831 979 dependencies: 832 980 '@babel/types': 7.22.4 833 981 982 + /@babel/helper-hoist-variables@7.24.7: 983 + resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} 984 + engines: {node: '>=6.9.0'} 985 + dependencies: 986 + '@babel/types': 7.24.7 987 + dev: true 988 + 834 989 /@babel/helper-member-expression-to-functions@7.21.5: 835 990 resolution: {integrity: sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg==} 836 991 engines: {node: '>=6.9.0'} 837 992 dependencies: 838 993 '@babel/types': 7.22.4 839 994 995 + /@babel/helper-module-imports@7.18.6: 996 + resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} 997 + engines: {node: '>=6.9.0'} 998 + dependencies: 999 + '@babel/types': 7.24.0 1000 + dev: true 1001 + 840 1002 /@babel/helper-module-imports@7.21.4: 841 1003 resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} 842 1004 engines: {node: '>=6.9.0'} 843 1005 dependencies: 844 1006 '@babel/types': 7.22.4 845 1007 1008 + /@babel/helper-module-imports@7.24.7: 1009 + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} 1010 + engines: {node: '>=6.9.0'} 1011 + dependencies: 1012 + '@babel/traverse': 7.24.7 1013 + '@babel/types': 7.24.7 1014 + transitivePeerDependencies: 1015 + - supports-color 1016 + dev: true 1017 + 846 1018 /@babel/helper-module-transforms@7.21.5: 847 1019 resolution: {integrity: sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==} 848 1020 engines: {node: '>=6.9.0'} ··· 858 1030 transitivePeerDependencies: 859 1031 - supports-color 860 1032 1033 + /@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7): 1034 + resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} 1035 + engines: {node: '>=6.9.0'} 1036 + peerDependencies: 1037 + '@babel/core': ^7.0.0 1038 + dependencies: 1039 + '@babel/core': 7.24.7 1040 + '@babel/helper-environment-visitor': 7.24.7 1041 + '@babel/helper-module-imports': 7.24.7 1042 + '@babel/helper-simple-access': 7.24.7 1043 + '@babel/helper-split-export-declaration': 7.24.7 1044 + '@babel/helper-validator-identifier': 7.24.7 1045 + transitivePeerDependencies: 1046 + - supports-color 1047 + dev: true 1048 + 861 1049 /@babel/helper-optimise-call-expression@7.18.6: 862 1050 resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} 863 1051 engines: {node: '>=6.9.0'} ··· 899 1087 dependencies: 900 1088 '@babel/types': 7.22.4 901 1089 1090 + /@babel/helper-simple-access@7.24.7: 1091 + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} 1092 + engines: {node: '>=6.9.0'} 1093 + dependencies: 1094 + '@babel/traverse': 7.24.7 1095 + '@babel/types': 7.24.7 1096 + transitivePeerDependencies: 1097 + - supports-color 1098 + dev: true 1099 + 902 1100 /@babel/helper-skip-transparent-expression-wrappers@7.20.0: 903 1101 resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} 904 1102 engines: {node: '>=6.9.0'} ··· 911 1109 dependencies: 912 1110 '@babel/types': 7.22.4 913 1111 1112 + /@babel/helper-split-export-declaration@7.24.7: 1113 + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} 1114 + engines: {node: '>=6.9.0'} 1115 + dependencies: 1116 + '@babel/types': 7.24.7 1117 + dev: true 1118 + 914 1119 /@babel/helper-string-parser@7.21.5: 915 1120 resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==} 916 1121 engines: {node: '>=6.9.0'} ··· 920 1125 engines: {node: '>=6.9.0'} 921 1126 requiresBuild: true 922 1127 dev: true 923 - optional: true 1128 + 1129 + /@babel/helper-string-parser@7.24.7: 1130 + resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} 1131 + engines: {node: '>=6.9.0'} 1132 + dev: true 924 1133 925 1134 /@babel/helper-validator-identifier@7.22.20: 926 1135 resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} ··· 930 1139 resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} 931 1140 engines: {node: '>=6.9.0'} 932 1141 1142 + /@babel/helper-validator-identifier@7.24.7: 1143 + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} 1144 + engines: {node: '>=6.9.0'} 1145 + 933 1146 /@babel/helper-validator-option@7.21.0: 934 1147 resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} 935 1148 engines: {node: '>=6.9.0'} 936 1149 1150 + /@babel/helper-validator-option@7.24.7: 1151 + resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} 1152 + engines: {node: '>=6.9.0'} 1153 + dev: true 1154 + 937 1155 /@babel/helper-wrap-function@7.13.0: 938 1156 resolution: {integrity: sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==} 939 1157 dependencies: ··· 954 1172 transitivePeerDependencies: 955 1173 - supports-color 956 1174 1175 + /@babel/helpers@7.24.7: 1176 + resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} 1177 + engines: {node: '>=6.9.0'} 1178 + dependencies: 1179 + '@babel/template': 7.24.7 1180 + '@babel/types': 7.24.7 1181 + dev: true 1182 + 957 1183 /@babel/highlight@7.22.5: 958 1184 resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} 959 1185 engines: {node: '>=6.9.0'} ··· 970 1196 chalk: 2.4.2 971 1197 js-tokens: 4.0.0 972 1198 picocolors: 1.0.0 1199 + 1200 + /@babel/highlight@7.24.7: 1201 + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} 1202 + engines: {node: '>=6.9.0'} 1203 + dependencies: 1204 + '@babel/helper-validator-identifier': 7.24.7 1205 + chalk: 2.4.2 1206 + js-tokens: 4.0.0 1207 + picocolors: 1.0.1 973 1208 974 1209 /@babel/parser@7.22.4: 975 1210 resolution: {integrity: sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==} ··· 986 1221 dependencies: 987 1222 '@babel/types': 7.24.0 988 1223 dev: true 989 - optional: true 1224 + 1225 + /@babel/parser@7.24.7: 1226 + resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} 1227 + engines: {node: '>=6.0.0'} 1228 + hasBin: true 1229 + dependencies: 1230 + '@babel/types': 7.24.7 1231 + dev: true 990 1232 991 1233 /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.13.12(@babel/core@7.21.5): 992 1234 resolution: {integrity: sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==} ··· 1210 1452 dependencies: 1211 1453 '@babel/core': 7.21.5 1212 1454 '@babel/helper-plugin-utils': 7.21.5 1455 + 1456 + /@babel/plugin-syntax-jsx@7.21.4(@babel/core@7.24.7): 1457 + resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} 1458 + engines: {node: '>=6.9.0'} 1459 + peerDependencies: 1460 + '@babel/core': ^7.0.0-0 1461 + dependencies: 1462 + '@babel/core': 7.24.7 1463 + '@babel/helper-plugin-utils': 7.21.5 1464 + dev: true 1213 1465 1214 1466 /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.5): 1215 1467 resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} ··· 1802 2054 '@babel/parser': 7.22.4 1803 2055 '@babel/types': 7.22.4 1804 2056 2057 + /@babel/template@7.24.7: 2058 + resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} 2059 + engines: {node: '>=6.9.0'} 2060 + dependencies: 2061 + '@babel/code-frame': 7.24.7 2062 + '@babel/parser': 7.24.7 2063 + '@babel/types': 7.24.7 2064 + dev: true 2065 + 1805 2066 /@babel/traverse@7.21.5(supports-color@5.5.0): 1806 2067 resolution: {integrity: sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==} 1807 2068 engines: {node: '>=6.9.0'} ··· 1819 2080 transitivePeerDependencies: 1820 2081 - supports-color 1821 2082 2083 + /@babel/traverse@7.24.7: 2084 + resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} 2085 + engines: {node: '>=6.9.0'} 2086 + dependencies: 2087 + '@babel/code-frame': 7.24.7 2088 + '@babel/generator': 7.24.7 2089 + '@babel/helper-environment-visitor': 7.24.7 2090 + '@babel/helper-function-name': 7.24.7 2091 + '@babel/helper-hoist-variables': 7.24.7 2092 + '@babel/helper-split-export-declaration': 7.24.7 2093 + '@babel/parser': 7.24.7 2094 + '@babel/types': 7.24.7 2095 + debug: 4.3.4(supports-color@5.5.0) 2096 + globals: 11.12.0 2097 + transitivePeerDependencies: 2098 + - supports-color 2099 + dev: true 2100 + 1822 2101 /@babel/types@7.22.4: 1823 2102 resolution: {integrity: sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==} 1824 2103 engines: {node: '>=6.9.0'} ··· 1836 2115 '@babel/helper-validator-identifier': 7.22.20 1837 2116 to-fast-properties: 2.0.0 1838 2117 dev: true 1839 - optional: true 2118 + 2119 + /@babel/types@7.24.7: 2120 + resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} 2121 + engines: {node: '>=6.9.0'} 2122 + dependencies: 2123 + '@babel/helper-string-parser': 7.24.7 2124 + '@babel/helper-validator-identifier': 7.24.7 2125 + to-fast-properties: 2.0.0 2126 + dev: true 1840 2127 1841 2128 /@changesets/apply-release-plan@6.1.4: 1842 2129 resolution: {integrity: sha512-FMpKF1fRlJyCZVYHr3CbinpZZ+6MwvOtWUuO8uo+svcATEoc1zRDcj23pAurJ2TZ/uVz1wFHH6K3NlACy0PLew==} ··· 2041 2328 /@cypress/react@7.0.2(@types/react@17.0.52)(cypress@12.8.1)(react-dom@17.0.2)(react@17.0.2): 2042 2329 resolution: {integrity: sha512-TTV7XNMDOO9mZUFWiGbd44Od/jqMVX/QbHYKQmK1XT3nIVFs0EvKJuHJmwN7wxLOR/+6twtyX6vTD8z8XBTliQ==} 2043 2330 peerDependencies: 2044 - '@types/react': ^16.9.16 || ^17.0.0 2331 + '@types/react': ^17.0.39 2045 2332 cypress: '*' 2046 - react: ^=16.x || ^=17.x || 17 2047 - react-dom: ^=16.x || ^=17.x || 17 2333 + react: ^17.0.2 || 17 2334 + react-dom: ^17.0.2 || 17 2048 2335 peerDependenciesMeta: 2049 2336 '@types/react': 2050 2337 optional: true ··· 2221 2508 '@jridgewell/sourcemap-codec': 1.4.15 2222 2509 '@jridgewell/trace-mapping': 0.3.17 2223 2510 2511 + /@jridgewell/gen-mapping@0.3.5: 2512 + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 2513 + engines: {node: '>=6.0.0'} 2514 + dependencies: 2515 + '@jridgewell/set-array': 1.2.1 2516 + '@jridgewell/sourcemap-codec': 1.4.15 2517 + '@jridgewell/trace-mapping': 0.3.25 2518 + dev: true 2519 + 2224 2520 /@jridgewell/resolve-uri@3.1.0: 2225 2521 resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 2226 2522 engines: {node: '>=6.0.0'} ··· 2228 2524 /@jridgewell/set-array@1.1.2: 2229 2525 resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 2230 2526 engines: {node: '>=6.0.0'} 2527 + 2528 + /@jridgewell/set-array@1.2.1: 2529 + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 2530 + engines: {node: '>=6.0.0'} 2531 + dev: true 2231 2532 2232 2533 /@jridgewell/source-map@0.3.2: 2233 2534 resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} ··· 2248 2549 '@jridgewell/resolve-uri': 3.1.0 2249 2550 '@jridgewell/sourcemap-codec': 1.4.14 2250 2551 2552 + /@jridgewell/trace-mapping@0.3.25: 2553 + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 2554 + dependencies: 2555 + '@jridgewell/resolve-uri': 3.1.0 2556 + '@jridgewell/sourcemap-codec': 1.4.15 2557 + dev: true 2558 + 2251 2559 /@manypkg/find-root@1.1.0: 2252 2560 resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} 2253 2561 dependencies: ··· 2296 2604 /@mdx-js/react@1.6.22(react@17.0.2): 2297 2605 resolution: {integrity: sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==} 2298 2606 peerDependencies: 2299 - react: ^16.13.1 || ^17.0.0 || 17 2607 + react: ^17.0.2 || 17 2300 2608 dependencies: 2301 2609 react: 17.0.2 2302 2610 dev: false ··· 2733 3041 /@reach/router@1.3.4(react-dom@17.0.2)(react@17.0.2): 2734 3042 resolution: {integrity: sha512-+mtn9wjlB9NN2CNnnC/BRYtwdKBfSyyasPYraNAyvaV1occr/5NnB4CVzjEZipNHwYebQwcndGUmpFzxAUoqSA==} 2735 3043 peerDependencies: 2736 - react: 15.x || 16.x || 16.4.0-alpha.0911da3 || 17 2737 - react-dom: 15.x || 16.x || 16.4.0-alpha.0911da3 || 17 3044 + react: ^17.0.2 || 17 3045 + react-dom: ^17.0.2 || 17 2738 3046 dependencies: 2739 3047 create-react-context: 0.3.0(prop-types@15.8.1)(react@17.0.2) 2740 3048 invariant: 2.2.4 ··· 2871 3179 resolution: {integrity: sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==} 2872 3180 engines: {node: '>=4'} 2873 3181 3182 + /@solidjs/testing-library@0.8.8(solid-js@1.8.17): 3183 + resolution: {integrity: sha512-47J9Aw+iG45Fs5Kxu/IJmkaaucpF7qhDazW+iXeNssAYI0FH+4MeM/SfYRhPbIMH/hBpMh/XjbK1Wpyu9PcSwg==} 3184 + engines: {node: '>= 14'} 3185 + peerDependencies: 3186 + '@solidjs/router': '>=0.9.0' 3187 + solid-js: '>=1.0.0' 3188 + peerDependenciesMeta: 3189 + '@solidjs/router': 3190 + optional: true 3191 + dependencies: 3192 + '@testing-library/dom': 10.1.0 3193 + solid-js: 1.8.17 3194 + dev: true 3195 + 2874 3196 /@swc/helpers@0.4.11: 2875 3197 resolution: {integrity: sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==} 2876 3198 dependencies: 2877 3199 tslib: 2.6.1 2878 3200 dev: true 2879 3201 3202 + /@testing-library/dom@10.1.0: 3203 + resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==} 3204 + engines: {node: '>=18'} 3205 + dependencies: 3206 + '@babel/code-frame': 7.24.7 3207 + '@babel/runtime': 7.22.5 3208 + '@types/aria-query': 5.0.4 3209 + aria-query: 5.3.0 3210 + chalk: 4.1.2 3211 + dom-accessibility-api: 0.5.16 3212 + lz-string: 1.5.0 3213 + pretty-format: 27.5.1 3214 + dev: true 3215 + 2880 3216 /@testing-library/dom@7.30.4: 2881 3217 resolution: {integrity: sha512-GObDVMaI4ARrZEXaRy4moolNAxWPKvEYNV/fa6Uc2eAzR/t4otS6A7EhrntPBIQLeehL9DbVhscvvv7gd6hWqA==} 2882 3218 engines: {node: '>=10'} ··· 2904 3240 /@testing-library/react-hooks@5.1.2(react-dom@17.0.2)(react-test-renderer@17.0.2)(react@17.0.2): 2905 3241 resolution: {integrity: sha512-jwhtDYZ5gQUIX8cmVCVdtwNvuF5EiCOWjokRlTV+o/V0GdtRZDykUllL1OXq5PS4+J33wGLNQeeWzEHcWrH7tg==} 2906 3242 peerDependencies: 2907 - react: '>=16.9.0 || 17' 2908 - react-dom: '>=16.9.0 || 17' 3243 + react: ^17.0.2 || 17 3244 + react-dom: ^17.0.2 || 17 2909 3245 react-test-renderer: '>=16.9.0' 2910 3246 peerDependenciesMeta: 2911 3247 react-dom: ··· 2928 3264 resolution: {integrity: sha512-TXMCg0jT8xmuU8BkKMtp8l7Z50Ykew5WNX8UoIKTaLFwKkP2+1YDhOLA2Ga3wY4x29jyntk7EWfum0kjlYiSjQ==} 2929 3265 engines: {node: '>=10'} 2930 3266 peerDependencies: 2931 - react: '*' 2932 - react-dom: '*' 3267 + react: ^17.0.2 || 17 3268 + react-dom: ^17.0.2 || 17 2933 3269 dependencies: 2934 3270 '@babel/runtime': 7.22.5 2935 3271 '@testing-library/dom': 7.30.4 ··· 2953 3289 resolution: {integrity: sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg==} 2954 3290 dev: true 2955 3291 3292 + /@types/aria-query@5.0.4: 3293 + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} 3294 + dev: true 3295 + 3296 + /@types/babel__core@7.20.5: 3297 + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 3298 + dependencies: 3299 + '@babel/parser': 7.24.1 3300 + '@babel/types': 7.24.0 3301 + '@types/babel__generator': 7.6.8 3302 + '@types/babel__template': 7.4.4 3303 + '@types/babel__traverse': 7.20.6 3304 + dev: true 3305 + 3306 + /@types/babel__generator@7.6.8: 3307 + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 3308 + dependencies: 3309 + '@babel/types': 7.24.0 3310 + dev: true 3311 + 3312 + /@types/babel__template@7.4.4: 3313 + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 3314 + dependencies: 3315 + '@babel/parser': 7.24.1 3316 + '@babel/types': 7.24.0 3317 + dev: true 3318 + 3319 + /@types/babel__traverse@7.20.6: 3320 + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} 3321 + dependencies: 3322 + '@babel/types': 7.24.0 3323 + dev: true 3324 + 2956 3325 /@types/chai-subset@1.3.3: 2957 3326 resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} 2958 3327 dependencies: 2959 - '@types/chai': 4.3.4 3328 + '@types/chai': 4.3.16 3329 + dev: true 3330 + 3331 + /@types/chai@4.3.16: 3332 + resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} 2960 3333 dev: true 2961 3334 2962 3335 /@types/chai@4.3.4: ··· 3246 3619 eslint-visitor-keys: 3.4.2 3247 3620 dev: true 3248 3621 3622 + /@urql/core@4.3.0(graphql@16.6.0): 3623 + resolution: {integrity: sha512-wT+FeL8DG4x5o6RfHEnONNFVDM3616ouzATMYUClB6CB+iIu2mwfBKd7xSUxYOZmwtxna5/hDRQdMl3nbQZlnw==} 3624 + dependencies: 3625 + '@0no-co/graphql.web': 1.0.5(graphql@16.6.0) 3626 + wonka: 6.3.2 3627 + transitivePeerDependencies: 3628 + - graphql 3629 + dev: false 3630 + 3249 3631 /@vitest/expect@0.30.1: 3250 3632 resolution: {integrity: sha512-c3kbEtN8XXJSeN81iDGq29bUzSjQhjES2WR3aColsS4lPGbivwLtas4DNUe0jD9gg/FYGIteqOenfU95EFituw==} 3251 3633 dependencies: ··· 3274 3656 /@vitest/spy@0.30.1: 3275 3657 resolution: {integrity: sha512-YfJeIf37GvTZe04ZKxzJfnNNuNSmTEGnla2OdL60C8od16f3zOfv9q9K0nNii0NfjDJRt/CVN/POuY5/zTS+BA==} 3276 3658 dependencies: 3277 - tinyspy: 2.1.0 3659 + tinyspy: 2.2.1 3278 3660 dev: true 3279 3661 3280 3662 /@vitest/utils@0.30.1: ··· 3546 3928 3547 3929 /abab@2.0.6: 3548 3930 resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} 3931 + deprecated: Use your platform's native atob() and btoa() methods instead 3549 3932 dev: true 3550 3933 3551 3934 /abbrev@1.1.1: ··· 3610 3993 engines: {node: '>=0.4.0'} 3611 3994 hasBin: true 3612 3995 3996 + /acorn@8.11.3: 3997 + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} 3998 + engines: {node: '>=0.4.0'} 3999 + hasBin: true 4000 + dev: true 4001 + 3613 4002 /after@0.8.2: 3614 4003 resolution: {integrity: sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA==} 3615 4004 ··· 3813 4202 dependencies: 3814 4203 '@babel/runtime': 7.22.5 3815 4204 '@babel/runtime-corejs3': 7.13.17 4205 + dev: true 4206 + 4207 + /aria-query@5.3.0: 4208 + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} 4209 + dependencies: 4210 + dequal: 2.0.3 3816 4211 dev: true 3817 4212 3818 4213 /arr-diff@4.0.0: ··· 4058 4453 dependencies: 4059 4454 '@babel/helper-plugin-utils': 7.10.4 4060 4455 4456 + /babel-plugin-jsx-dom-expressions@0.37.21(@babel/core@7.24.7): 4457 + resolution: {integrity: sha512-WbQo1NQ241oki8bYasVzkMXOTSIri5GO/K47rYJb2ZBh8GaPUEWiWbMV3KwXz+96eU2i54N6ThzjQG/f5n8Azw==} 4458 + peerDependencies: 4459 + '@babel/core': ^7.20.12 4460 + dependencies: 4461 + '@babel/core': 7.24.7 4462 + '@babel/helper-module-imports': 7.18.6 4463 + '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.24.7) 4464 + '@babel/types': 7.24.0 4465 + html-entities: 2.3.3 4466 + validate-html-nesting: 1.2.2 4467 + dev: true 4468 + 4061 4469 /babel-plugin-macros@2.8.0: 4062 4470 resolution: {integrity: sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==} 4063 4471 dependencies: ··· 4101 4509 /babel-plugin-styled-components@1.12.0(styled-components@5.2.3): 4102 4510 resolution: {integrity: sha512-FEiD7l5ZABdJPpLssKXjBUJMYqzbcNzBowfXDCdJhOpbhWiewapUaY+LZGT8R4Jg2TwOjGjG4RKeyrO5p9sBkA==} 4103 4511 peerDependencies: 4104 - styled-components: '>= 2 || 5' 4512 + styled-components: ^5.2.3 || 5 4105 4513 dependencies: 4106 4514 '@babel/helper-annotate-as-pure': 7.18.6 4107 4515 '@babel/helper-module-imports': 7.21.4 ··· 4132 4540 '@babel/helper-module-imports': 7.21.4 4133 4541 webpack: 4.46.0 4134 4542 4543 + /babel-preset-solid@1.8.17(@babel/core@7.24.7): 4544 + resolution: {integrity: sha512-s/FfTZOeds0hYxYqce90Jb+0ycN2lrzC7VP1k1JIn3wBqcaexDKdYi6xjB+hMNkL+Q6HobKbwsriqPloasR9LA==} 4545 + peerDependencies: 4546 + '@babel/core': ^7.0.0 4547 + dependencies: 4548 + '@babel/core': 7.24.7 4549 + babel-plugin-jsx-dom-expressions: 0.37.21(@babel/core@7.24.7) 4550 + dev: true 4551 + 4135 4552 /babel-runtime@6.26.0: 4136 4553 resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==} 4137 4554 dependencies: ··· 4433 4850 node-releases: 2.0.10 4434 4851 update-browserslist-db: 1.0.10(browserslist@4.21.5) 4435 4852 4853 + /browserslist@4.23.0: 4854 + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} 4855 + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 4856 + hasBin: true 4857 + dependencies: 4858 + caniuse-lite: 1.0.30001629 4859 + electron-to-chromium: 1.4.795 4860 + node-releases: 2.0.14 4861 + update-browserslist-db: 1.0.16(browserslist@4.23.0) 4862 + dev: true 4863 + 4436 4864 /buffer-alloc-unsafe@1.1.0: 4437 4865 resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} 4438 4866 ··· 4673 5101 4674 5102 /caniuse-lite@1.0.30001466: 4675 5103 resolution: {integrity: sha512-ewtFBSfWjEmxUgNBSZItFSmVtvk9zkwkl1OfRZlKA8slltRN+/C/tuGVrF9styXkN36Yu3+SeJ1qkXxDEyNZ5w==} 5104 + 5105 + /caniuse-lite@1.0.30001629: 5106 + resolution: {integrity: sha512-c3dl911slnQhmxUIT4HhYzT7wnBK/XYpGnYLOj4nJBaRiw52Ibe7YxlDaAeRECvA786zCuExhxIUJ2K7nHMrBw==} 5107 + dev: true 4676 5108 4677 5109 /case-sensitive-paths-webpack-plugin@2.4.0: 4678 5110 resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} ··· 5172 5604 well-known-symbols: 2.0.0 5173 5605 dev: true 5174 5606 5607 + /confbox@0.1.7: 5608 + resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} 5609 + dev: true 5610 + 5175 5611 /config-chain@1.1.13: 5176 5612 resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} 5177 5613 dependencies: ··· 5209 5645 /convert-source-map@1.9.0: 5210 5646 resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} 5211 5647 5648 + /convert-source-map@2.0.0: 5649 + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 5650 + dev: true 5651 + 5212 5652 /cookie-signature@1.0.6: 5213 5653 resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} 5214 5654 ··· 5320 5760 resolution: {integrity: sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==} 5321 5761 peerDependencies: 5322 5762 prop-types: ^15.0.0 5323 - react: ^0.14.0 || ^15.0.0 || ^16.0.0 || 17 5763 + react: ^17.0.2 || 17 5324 5764 dependencies: 5325 5765 gud: 1.0.0 5326 5766 prop-types: 15.8.1 ··· 5543 5983 /csstype@3.0.8: 5544 5984 resolution: {integrity: sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==} 5545 5985 dev: true 5986 + 5987 + /csstype@3.1.3: 5988 + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 5546 5989 5547 5990 /csv-generate@3.4.3: 5548 5991 resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} ··· 5952 6395 resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} 5953 6396 dev: false 5954 6397 6398 + /dequal@2.0.3: 6399 + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 6400 + engines: {node: '>=6'} 6401 + dev: true 6402 + 5955 6403 /des.js@1.0.1: 5956 6404 resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==} 5957 6405 dependencies: ··· 6016 6464 esutils: 2.0.3 6017 6465 dev: true 6018 6466 6467 + /dom-accessibility-api@0.5.16: 6468 + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} 6469 + dev: true 6470 + 6019 6471 /dom-accessibility-api@0.5.4: 6020 6472 resolution: {integrity: sha512-TvrjBckDy2c6v6RLxPv5QXOnU+SmF9nBII5621Ve5fu6Z/BDrENurBEvlC1f44lKEUVqOpK4w9E5Idc5/EgkLQ==} 6021 6473 dev: true ··· 6165 6617 6166 6618 /electron-to-chromium@1.4.332: 6167 6619 resolution: {integrity: sha512-c1Vbv5tuUlBFp0mb3mCIjw+REEsgthRgNE8BlbEDKmvzb8rxjcVki6OkQP83vLN34s0XCxpSkq7AZNep1a6xhw==} 6620 + 6621 + /electron-to-chromium@1.4.795: 6622 + resolution: {integrity: sha512-hHo4lK/8wb4NUa+NJYSFyJ0xedNHiR6ylilDtb8NUW9d4dmBFmGiecYEKCEbti1wTNzbKXLfl4hPWEkAFbHYlw==} 6623 + dev: true 6168 6624 6169 6625 /elliptic@6.5.4: 6170 6626 resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} ··· 6592 7048 /escalade@3.1.1: 6593 7049 resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 6594 7050 engines: {node: '>=6'} 7051 + 7052 + /escalade@3.1.2: 7053 + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} 7054 + engines: {node: '>=6'} 7055 + dev: true 6595 7056 6596 7057 /escape-html@1.0.3: 6597 7058 resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} ··· 7373 7834 resolution: {integrity: sha512-jvHSQMXujUtncyT3ObkoQgwOzkxdnnAs7XYgJDGSqhGqPF+LZ0y4rS5b6XzaN2BR3hG2e7isVtCNOmb7gxNuYw==} 7374 7835 engines: {node: '>= 0.12.0', npm: '>= 2.0.0'} 7375 7836 peerDependencies: 7376 - styled-components: '>= 4.0.0 || 5' 7837 + styled-components: ^5.2.3 || 5 7377 7838 dependencies: 7378 7839 styled-components: 5.2.3(react-dom@17.0.2)(react-is@17.0.2)(react@17.0.2) 7379 7840 dev: false ··· 8042 8503 /html-entities@1.4.0: 8043 8504 resolution: {integrity: sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==} 8044 8505 8506 + /html-entities@2.3.3: 8507 + resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} 8508 + dev: true 8509 + 8045 8510 /html-minifier@3.5.21: 8046 8511 resolution: {integrity: sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==} 8047 8512 engines: {node: '>=4'} ··· 8829 9294 dependencies: 8830 9295 call-bind: 1.0.2 8831 9296 9297 + /is-what@4.1.16: 9298 + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} 9299 + engines: {node: '>=12.13'} 9300 + dev: true 9301 + 8832 9302 /is-whitespace-character@1.0.4: 8833 9303 resolution: {integrity: sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==} 8834 9304 ··· 8965 9435 - utf-8-validate 8966 9436 dev: true 8967 9437 9438 + /jsdom@22.1.0: 9439 + resolution: {integrity: sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==} 9440 + engines: {node: '>=16'} 9441 + peerDependencies: 9442 + canvas: ^2.5.0 9443 + peerDependenciesMeta: 9444 + canvas: 9445 + optional: true 9446 + dependencies: 9447 + abab: 2.0.6 9448 + cssstyle: 3.0.0 9449 + data-urls: 4.0.0 9450 + decimal.js: 10.4.3 9451 + domexception: 4.0.0 9452 + form-data: 4.0.0 9453 + html-encoding-sniffer: 3.0.0 9454 + http-proxy-agent: 5.0.0 9455 + https-proxy-agent: 5.0.1 9456 + is-potential-custom-element-name: 1.0.1 9457 + nwsapi: 2.2.10 9458 + parse5: 7.1.2 9459 + rrweb-cssom: 0.6.0 9460 + saxes: 6.0.0 9461 + symbol-tree: 3.2.4 9462 + tough-cookie: 4.1.2 9463 + w3c-xmlserializer: 4.0.0 9464 + webidl-conversions: 7.0.0 9465 + whatwg-encoding: 2.0.0 9466 + whatwg-mimetype: 3.0.0 9467 + whatwg-url: 12.0.1 9468 + ws: 8.13.0 9469 + xml-name-validator: 4.0.0 9470 + transitivePeerDependencies: 9471 + - bufferutil 9472 + - supports-color 9473 + - utf-8-validate 9474 + dev: true 9475 + 8968 9476 /jsesc@0.5.0: 8969 9477 resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} 8970 9478 hasBin: true ··· 9028 9536 resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 9029 9537 engines: {node: '>=6'} 9030 9538 hasBin: true 9031 - 9032 - /jsonc-parser@3.2.0: 9033 - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} 9034 - dev: true 9035 9539 9036 9540 /jsonfile@4.0.0: 9037 9541 resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} ··· 9417 9921 hasBin: true 9418 9922 dev: true 9419 9923 9924 + /lz-string@1.5.0: 9925 + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} 9926 + hasBin: true 9927 + dev: true 9928 + 9420 9929 /magic-string@0.25.9: 9421 9930 resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} 9422 9931 dependencies: ··· 9639 10148 yargs-parser: 18.1.3 9640 10149 dev: true 9641 10150 10151 + /merge-anything@5.1.7: 10152 + resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} 10153 + engines: {node: '>=12.13'} 10154 + dependencies: 10155 + is-what: 4.1.16 10156 + dev: true 10157 + 9642 10158 /merge-descriptors@1.0.1: 9643 10159 resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} 9644 10160 ··· 9760 10276 deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. 9761 10277 peerDependencies: 9762 10278 prop-types: ^15.0.0 9763 - react: ^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || 17 10279 + react: ^17.0.2 || 17 9764 10280 dependencies: 9765 10281 '@babel/runtime': 7.22.5 9766 10282 prop-types: 15.8.1 ··· 9940 10456 hasBin: true 9941 10457 dev: true 9942 10458 9943 - /mlly@1.2.0: 9944 - resolution: {integrity: sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==} 10459 + /mlly@1.7.1: 10460 + resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} 9945 10461 dependencies: 9946 - acorn: 8.10.0 9947 - pathe: 1.1.0 9948 - pkg-types: 1.0.2 9949 - ufo: 1.1.1 10462 + acorn: 8.11.3 10463 + pathe: 1.1.2 10464 + pkg-types: 1.1.1 10465 + ufo: 1.5.3 9950 10466 dev: true 9951 10467 9952 10468 /moniker@0.1.2: ··· 10055 10571 peerDependencies: 10056 10572 fibers: '>= 3.1.0' 10057 10573 node-sass: ^6.0.0 || ^7.0.0 10058 - react: ^18.0.0-0 || 17 10059 - react-dom: ^18.0.0-0 || 17 10574 + react: ^17.0.2 || 17 10575 + react-dom: ^17.0.2 || 17 10060 10576 sass: ^1.3.0 10061 10577 peerDependenciesMeta: 10062 10578 fibers: ··· 10186 10702 10187 10703 /node-releases@2.0.10: 10188 10704 resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} 10705 + 10706 + /node-releases@2.0.14: 10707 + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} 10708 + dev: true 10189 10709 10190 10710 /node-stream-zip@1.15.0: 10191 10711 resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==} ··· 10405 10925 /num2fraction@1.2.2: 10406 10926 resolution: {integrity: sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==} 10407 10927 10928 + /nwsapi@2.2.10: 10929 + resolution: {integrity: sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==} 10930 + dev: true 10931 + 10408 10932 /nwsapi@2.2.2: 10409 10933 resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} 10410 10934 dev: true ··· 10826 11350 resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 10827 11351 engines: {node: '>=8'} 10828 11352 dependencies: 10829 - '@babel/code-frame': 7.24.2 11353 + '@babel/code-frame': 7.24.7 10830 11354 error-ex: 1.3.2 10831 11355 json-parse-even-better-errors: 2.3.1 10832 11356 lines-and-columns: 1.2.4 ··· 10940 11464 resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==} 10941 11465 dev: true 10942 11466 11467 + /pathe@1.1.2: 11468 + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} 11469 + dev: true 11470 + 10943 11471 /pathval@1.1.1: 10944 11472 resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 10945 11473 dev: true ··· 10969 11497 10970 11498 /picocolors@1.0.0: 10971 11499 resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 11500 + 11501 + /picocolors@1.0.1: 11502 + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} 10972 11503 10973 11504 /picomatch@2.3.1: 10974 11505 resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} ··· 11031 11562 find-up: 5.0.0 11032 11563 dev: true 11033 11564 11034 - /pkg-types@1.0.2: 11035 - resolution: {integrity: sha512-hM58GKXOcj8WTqUXnsQyJYXdeAPbythQgEF3nTcEo+nkD49chjQ9IKm/QJy9xf6JakXptz86h7ecP2024rrLaQ==} 11565 + /pkg-types@1.1.1: 11566 + resolution: {integrity: sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==} 11036 11567 dependencies: 11037 - jsonc-parser: 3.2.0 11038 - mlly: 1.2.0 11039 - pathe: 1.1.0 11568 + confbox: 0.1.7 11569 + mlly: 1.7.1 11570 + pathe: 1.1.2 11040 11571 dev: true 11041 11572 11042 11573 /please-upgrade-node@3.2.0: ··· 11359 11890 engines: {node: ^10 || ^12 || >=14} 11360 11891 dependencies: 11361 11892 nanoid: 3.3.4 11362 - picocolors: 1.0.0 11893 + picocolors: 1.0.1 11363 11894 source-map-js: 1.0.2 11364 11895 dev: true 11365 11896 ··· 11368 11899 engines: {node: ^10 || ^12 || >=14} 11369 11900 dependencies: 11370 11901 nanoid: 3.3.4 11371 - picocolors: 1.0.0 11902 + picocolors: 1.0.1 11372 11903 source-map-js: 1.0.2 11373 11904 dev: true 11374 11905 ··· 11455 11986 /prism-react-renderer@1.2.0(react@17.0.2): 11456 11987 resolution: {integrity: sha512-GHqzxLYImx1iKN1jJURcuRoA/0ygCcNhfGw1IT8nPIMzarmKQ3Nc+JcG0gi8JXQzuh0C5ShE4npMIoqNin40hg==} 11457 11988 peerDependencies: 11458 - react: '>=0.14.9 || 17' 11989 + react: ^17.0.2 || 17 11459 11990 dependencies: 11460 11991 react: 17.0.2 11461 11992 dev: false ··· 11705 12236 /react-dom@17.0.2(react@17.0.2): 11706 12237 resolution: {integrity: sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==} 11707 12238 peerDependencies: 11708 - react: 17.0.2 || 17 12239 + react: ^17.0.2 || 17 11709 12240 dependencies: 11710 12241 loose-envify: 1.4.0 11711 12242 object-assign: 4.1.1 ··· 11716 12247 resolution: {integrity: sha512-W3xCd9zXnanqrTUeViceufD3mIW8Ut29BUD+S2f0eO2XCOU8b6UrJfY46RDGe5lxCJzfe4j0yvIfh0RbTZhKJw==} 11717 12248 engines: {node: '>=10', npm: '>=6'} 11718 12249 peerDependencies: 11719 - react: '>=16.13.1 || 17' 12250 + react: ^17.0.2 || 17 11720 12251 dependencies: 11721 12252 '@babel/runtime': 7.22.5 11722 12253 react: 17.0.2 ··· 11728 12259 /react-from-dom@0.3.1(react@17.0.2): 11729 12260 resolution: {integrity: sha512-PeNBa8iuzoD7qHA9O7YpGnXFvC+XFFwStmFh2/r2zJAvEIaRg6EwOj+EPcDIFwyYBhqPIItxIx/dGdeWiFivjQ==} 11730 12261 peerDependencies: 11731 - react: ^15.0.0 || ^16.0.0 || 17 12262 + react: ^17.0.2 || 17 11732 12263 dependencies: 11733 12264 react: 17.0.2 11734 12265 dev: false ··· 11737 12268 resolution: {integrity: sha512-o8RScHj6Lb8cwy3GMrVH6NJvL+y0zpJvKtc0+wmH7Bt23rszJmnqEQxRbyrqUzk9DTJIHoP42bfO5rswC9SWBQ==} 11738 12269 peerDependencies: 11739 12270 prop-types: ^15.6.0 11740 - react: ^15.6.2 || ^16.0 || ^17 || 17 12271 + react: ^17.0.2 || 17 11741 12272 dependencies: 11742 12273 prop-types: 15.7.2 11743 12274 react: 17.0.2 ··· 11750 12281 /react-helmet@5.2.1(react@17.0.2): 11751 12282 resolution: {integrity: sha512-CnwD822LU8NDBnjCpZ4ySh8L6HYyngViTZLfBBb3NjtrpN8m49clH8hidHouq20I51Y6TpCTISCBbqiY5GamwA==} 11752 12283 peerDependencies: 11753 - react: '>=15.0.0 || 17' 12284 + react: ^17.0.2 || 17 11754 12285 dependencies: 11755 12286 object-assign: 4.1.1 11756 12287 prop-types: 15.8.1 ··· 11762 12293 resolution: {integrity: sha512-JrLlvUPqh6wIkrK2hZDfOyq/Uh/WeVEr8nc7hkn2/3Ul0sx1Kr5y4kOGNacNRoj7RhwLNcQ3Udf1KJXrqc0ZtA==} 11763 12294 engines: {node: '>= 6'} 11764 12295 peerDependencies: 11765 - '@types/react': '^15.0.0 || ^16.0.0 || ^17.0.0 ' 11766 - react: ^15.0.0 || ^16.0.0 || ^17.0.0 || 17 11767 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || 17 12296 + '@types/react': ^17.0.39 12297 + react: ^17.0.2 || 17 12298 + react-dom: ^17.0.2 || 17 11768 12299 peerDependenciesMeta: 11769 12300 '@types/react': 11770 12301 optional: true ··· 11783 12314 /react-inlinesvg@1.2.0(react@17.0.2): 11784 12315 resolution: {integrity: sha512-IsznU+UzpUwDGzBWbf0bfSRA5Jbqz87xeoqLM/nSIDPkoHksInF1wCGybTSn4sIui+30TqboRQP1wAelNTkdog==} 11785 12316 peerDependencies: 11786 - react: ^16.3.0 || 17 12317 + react: ^17.0.2 || 17 11787 12318 dependencies: 11788 12319 exenv: 1.2.2 11789 12320 react: 17.0.2 ··· 11799 12330 /react-router-dom@5.2.0(react@17.0.2): 11800 12331 resolution: {integrity: sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==} 11801 12332 peerDependencies: 11802 - react: '>=15 || 17' 12333 + react: ^17.0.2 || 17 11803 12334 dependencies: 11804 12335 '@babel/runtime': 7.22.5 11805 12336 history: 4.10.1 ··· 11814 12345 /react-router-ga@1.2.3(react-router-dom@5.2.0)(react@17.0.2): 11815 12346 resolution: {integrity: sha512-0rNBGGI6Q1hkznbLB+bAmDTS+8w3duaJYYIbCrCwof/p7RbZuv+Lsv9enumRZXxb4oTZrY95vOvFxnsRQ4cFCg==} 11816 12347 peerDependencies: 11817 - react: ^16.8.6 || 17 12348 + react: ^17.0.2 || 17 11818 12349 react-router-dom: ^5.0.0 11819 12350 dependencies: 11820 12351 react: 17.0.2 ··· 11824 12355 /react-router@5.2.0(react@17.0.2): 11825 12356 resolution: {integrity: sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==} 11826 12357 peerDependencies: 11827 - react: '>=15 || 17' 12358 + react: ^17.0.2 || 17 11828 12359 dependencies: 11829 12360 '@babel/runtime': 7.22.5 11830 12361 history: 4.10.1 ··· 11842 12373 /react-scroll@1.8.2(react-dom@17.0.2)(react@17.0.2): 11843 12374 resolution: {integrity: sha512-f2ZEG5fsPbPTySI9ekcFpETCcNlqbmwbQj9hhzYK8tkgv+PA8APatSt66o/q0KSkDZxyT98ONTtXp9x0lyowEw==} 11844 12375 peerDependencies: 11845 - react: ^15.5.4 || ^16.0.0 || ^17.0.0 || 17 11846 - react-dom: ^15.5.4 || ^16.0.0 || ^17.0.0 || 17 12376 + react: ^17.0.2 || 17 12377 + react-dom: ^17.0.2 || 17 11847 12378 dependencies: 11848 12379 lodash.throttle: 4.1.1 11849 12380 prop-types: 15.8.1 ··· 11854 12385 /react-shallow-renderer@16.14.1(react@17.0.2): 11855 12386 resolution: {integrity: sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg==} 11856 12387 peerDependencies: 11857 - react: ^16.0.0 || ^17.0.0 || 17 12388 + react: ^17.0.2 || 17 11858 12389 dependencies: 11859 12390 object-assign: 4.1.1 11860 12391 react: 17.0.2 ··· 11864 12395 /react-side-effect@1.2.0(react@17.0.2): 11865 12396 resolution: {integrity: sha512-v1ht1aHg5k/thv56DRcjw+WtojuuDHFUgGfc+bFHOWsF4ZK6C2V57DO0Or0GPsg6+LSTE0M6Ry/gfzhzSwbc5w==} 11866 12397 peerDependencies: 11867 - react: ^0.13.0 || ^0.14.0 || ^15.0.0 || ^16.0.0 || 17 12398 + react: ^17.0.2 || 17 11868 12399 dependencies: 11869 12400 react: 17.0.2 11870 12401 shallowequal: 1.1.0 ··· 11872 12403 /react-ssr-prepass@1.4.0(react@17.0.2): 11873 12404 resolution: {integrity: sha512-0SzdmiQUtHvhxCabHg9BI/pkJfijGkQ0jQL6fC4YFy7idaDOuaiQLsajIkkNxffFXtJFHIWFITlve2WB88e0Jw==} 11874 12405 peerDependencies: 11875 - react: ^16.8.0 || ^17.0.0 || 17 12406 + react: ^17.0.2 || 17 11876 12407 dependencies: 11877 12408 react: 17.0.2 11878 12409 dev: true ··· 11915 12446 /react-static-plugin-styled-components@7.2.2(react@17.0.2)(styled-components@5.2.3): 11916 12447 resolution: {integrity: sha512-yjZ2V5b4HLRs6ldbLmreXpXBiNU5y4IByPID/rYWe3J8NFenPMI7kbhiFlBDkUDEhJvGIpSFw3I8OCvAcm4yQg==} 11917 12448 peerDependencies: 11918 - react: ^16.9.0 || 17 11919 - styled-components: ^4.3.2 || 5 12449 + react: ^17.0.2 || 17 12450 + styled-components: ^5.2.3 || 5 11920 12451 dependencies: 11921 12452 react: 17.0.2 11922 12453 styled-components: 5.2.3(react-dom@17.0.2)(react-is@17.0.2)(react@17.0.2) ··· 12013 12544 /react-test-renderer@17.0.2(react@17.0.2): 12014 12545 resolution: {integrity: sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==} 12015 12546 peerDependencies: 12016 - react: 17.0.2 || 17 12547 + react: ^17.0.2 || 17 12017 12548 dependencies: 12018 12549 object-assign: 4.1.1 12019 12550 react: 17.0.2 ··· 12025 12556 /react-universal-component@4.5.0(react@17.0.2): 12026 12557 resolution: {integrity: sha512-dBUC6afvSAQhDcE4oh1eTmfU29W0O2eZhcGXnfGUTulXkU8ejuWqlJWXXrSMx5iV1H6LNgj2NJMj3BtBMfBNhA==} 12027 12558 peerDependencies: 12028 - react: ^16.3.0 || ^17.0.0 || 17 12559 + react: ^17.0.2 || 17 12029 12560 dependencies: 12030 12561 hoist-non-react-statics: 3.3.2 12031 12562 prop-types: 15.8.1 ··· 12535 13066 rollup: 3.21.1 12536 13067 typescript: 5.1.6 12537 13068 optionalDependencies: 12538 - '@babel/code-frame': 7.24.2 13069 + '@babel/code-frame': 7.24.7 12539 13070 dev: true 12540 13071 12541 13072 /rollup-plugin-visualizer@5.9.0(rollup@3.21.1): ··· 12750 13281 randombytes: 2.1.0 12751 13282 dev: true 12752 13283 13284 + /seroval-plugins@1.0.7(seroval@1.0.7): 13285 + resolution: {integrity: sha512-GO7TkWvodGp6buMEX9p7tNyIkbwlyuAWbI6G9Ec5bhcm7mQdu3JOK1IXbEUwb3FVzSc363GraG/wLW23NSavIw==} 13286 + engines: {node: '>=10'} 13287 + peerDependencies: 13288 + seroval: ^1.0 13289 + dependencies: 13290 + seroval: 1.0.7 13291 + 13292 + /seroval@1.0.7: 13293 + resolution: {integrity: sha512-n6ZMQX5q0Vn19Zq7CIKNIo7E75gPkGCFUEqDpa8jgwpYr/vScjqnQ6H09t1uIiZ0ZSK0ypEGvrYK2bhBGWsGdw==} 13294 + engines: {node: '>=10'} 13295 + 12753 13296 /serve-handler@6.1.3: 12754 13297 resolution: {integrity: sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==} 12755 13298 dependencies: ··· 13088 13631 smart-buffer: 4.2.0 13089 13632 dev: true 13090 13633 13634 + /solid-js@1.8.17: 13635 + resolution: {integrity: sha512-E0FkUgv9sG/gEBWkHr/2XkBluHb1fkrHywUgA6o6XolPDCJ4g1HaLmQufcBBhiF36ee40q+HpG/vCZu7fLpI3Q==} 13636 + dependencies: 13637 + csstype: 3.1.3 13638 + seroval: 1.0.7 13639 + seroval-plugins: 1.0.7(seroval@1.0.7) 13640 + 13641 + /solid-refresh@0.6.3(solid-js@1.8.17): 13642 + resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} 13643 + peerDependencies: 13644 + solid-js: ^1.3 13645 + dependencies: 13646 + '@babel/generator': 7.24.7 13647 + '@babel/helper-module-imports': 7.24.7 13648 + '@babel/types': 7.24.0 13649 + solid-js: 1.8.17 13650 + transitivePeerDependencies: 13651 + - supports-color 13652 + dev: true 13653 + 13091 13654 /sort-keys-length@1.0.1: 13092 13655 resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} 13093 13656 engines: {node: '>=0.10.0'} ··· 13288 13851 13289 13852 /std-env@3.3.2: 13290 13853 resolution: {integrity: sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==} 13854 + dev: true 13855 + 13856 + /std-env@3.7.0: 13857 + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} 13291 13858 dev: true 13292 13859 13293 13860 /stream-browserify@2.0.2: ··· 13526 14093 resolution: {integrity: sha512-BlR+KrLW3NL1yhvEB+9Nu9Dt51CuOnHoxd+Hj+rYPdtyR8X11uIW9rvhpy3Dk4dXXBsiW1u5U78f00Lf/afGoA==} 13527 14094 engines: {node: '>=10'} 13528 14095 peerDependencies: 13529 - react: '>= 16.8.0 || 17' 13530 - react-dom: '>= 16.8.0 || 17' 13531 - react-is: '>= 16.8.0 || 17' 14096 + react: ^17.0.2 || 17 14097 + react-dom: ^17.0.2 || 17 14098 + react-is: ^17.0.2 || 17 13532 14099 dependencies: 13533 14100 '@babel/helper-module-imports': 7.21.4 13534 14101 '@babel/traverse': 7.21.5(supports-color@5.5.0) ··· 13550 14117 peerDependencies: 13551 14118 '@babel/core': '*' 13552 14119 babel-plugin-macros: '*' 13553 - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || 17' 14120 + react: ^17.0.2 || 17 13554 14121 peerDependenciesMeta: 13555 14122 '@babel/core': 13556 14123 optional: true ··· 13827 14394 resolution: {integrity: sha512-iyziEiyFxX4kyxSp+MtY1oCH/lvjH3PxFN8PGCDeqcZWAJ/i+9y+nL85w99PxVzrIvew/GSkSbDYtiGVa85Afg==} 13828 14395 dev: true 13829 14396 14397 + /tinybench@2.8.0: 14398 + resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} 14399 + dev: true 14400 + 13830 14401 /tinypool@0.4.0: 13831 14402 resolution: {integrity: sha512-2ksntHOKf893wSAH4z/+JbPpi92esw8Gn9N2deXX+B0EO92hexAVI9GIZZPx7P5aYo5KULfeOSt3kMOmSOy6uA==} 13832 14403 engines: {node: '>=14.0.0'} 13833 14404 dev: true 13834 14405 13835 - /tinyspy@2.1.0: 13836 - resolution: {integrity: sha512-7eORpyqImoOvkQJCSkL0d0mB4NHHIFAy4b1u8PHdDa7SjGS2njzl6/lyGoZLm+eyYEtlUmFGE0rFj66SWxZgQQ==} 14406 + /tinyspy@2.2.1: 14407 + resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} 13837 14408 engines: {node: '>=14.0.0'} 13838 14409 dev: true 13839 14410 ··· 14135 14706 hasBin: true 14136 14707 dev: true 14137 14708 14138 - /ufo@1.1.1: 14139 - resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==} 14709 + /ufo@1.5.3: 14710 + resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} 14140 14711 dev: true 14141 14712 14142 14713 /uglify-js@3.4.10: ··· 14390 14961 escalade: 3.1.1 14391 14962 picocolors: 1.0.0 14392 14963 14964 + /update-browserslist-db@1.0.16(browserslist@4.23.0): 14965 + resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} 14966 + hasBin: true 14967 + peerDependencies: 14968 + browserslist: '>= 4.21.0' 14969 + dependencies: 14970 + browserslist: 4.23.0 14971 + escalade: 3.1.2 14972 + picocolors: 1.0.1 14973 + dev: true 14974 + 14393 14975 /update-check@1.5.2: 14394 14976 resolution: {integrity: sha512-1TrmYLuLj/5ZovwUS7fFd1jMH3NnFDN1y1A8dboedIDt7zs/zJMo6TwwlhYKkSeEwzleeiSBV5/3c9ufAQWDaQ==} 14395 14977 dependencies: ··· 14453 15035 /use-sync-external-store@1.2.0(react@17.0.2): 14454 15036 resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} 14455 15037 peerDependencies: 14456 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || 17 15038 + react: ^17.0.2 || 17 14457 15039 dependencies: 14458 15040 react: 17.0.2 14459 15041 dev: true ··· 14510 15092 /uuid@8.3.2: 14511 15093 resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} 14512 15094 hasBin: true 15095 + dev: true 15096 + 15097 + /validate-html-nesting@1.2.2: 15098 + resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} 14513 15099 dev: true 14514 15100 14515 15101 /validate-npm-package-license@3.0.4: ··· 14574 15160 dependencies: 14575 15161 cac: 6.7.14 14576 15162 debug: 4.3.4(supports-color@5.5.0) 14577 - mlly: 1.2.0 14578 - pathe: 1.1.0 14579 - picocolors: 1.0.0 15163 + mlly: 1.7.1 15164 + pathe: 1.1.2 15165 + picocolors: 1.0.1 14580 15166 vite: 3.2.5(@types/node@18.16.3)(terser@5.17.1) 14581 15167 transitivePeerDependencies: 14582 15168 - '@types/node' ··· 14588 15174 - terser 14589 15175 dev: true 14590 15176 15177 + /vite-plugin-solid@2.10.2(solid-js@1.8.17)(vite@3.2.5): 15178 + resolution: {integrity: sha512-AOEtwMe2baBSXMXdo+BUwECC8IFHcKS6WQV/1NEd+Q7vHPap5fmIhLcAzr+DUJ04/KHx/1UBU0l1/GWP+rMAPQ==} 15179 + peerDependencies: 15180 + '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* 15181 + solid-js: ^1.7.2 15182 + vite: ^3.2.4 15183 + peerDependenciesMeta: 15184 + '@testing-library/jest-dom': 15185 + optional: true 15186 + dependencies: 15187 + '@babel/core': 7.24.7 15188 + '@types/babel__core': 7.20.5 15189 + babel-preset-solid: 1.8.17(@babel/core@7.24.7) 15190 + merge-anything: 5.1.7 15191 + solid-js: 1.8.17 15192 + solid-refresh: 0.6.3(solid-js@1.8.17) 15193 + vite: 3.2.5(@types/node@18.16.3)(terser@5.17.1) 15194 + vitefu: 0.2.5(vite@3.2.5) 15195 + transitivePeerDependencies: 15196 + - supports-color 15197 + dev: true 15198 + 14591 15199 /vite-tsconfig-paths@4.2.0(typescript@5.1.6)(vite@3.2.5): 14592 15200 resolution: {integrity: sha512-jGpus0eUy5qbbMVGiTxCL1iB9ZGN6Bd37VGLJU39kTDD6ZfULTTb1bcc5IeTWqWJKiWV5YihCaibeASPiGi8kw==} 14593 15201 peerDependencies: 14594 - vite: '*' 15202 + vite: ^3.2.4 14595 15203 peerDependenciesMeta: 14596 15204 vite: 14597 15205 optional: true ··· 14640 15248 fsevents: 2.3.3 14641 15249 dev: true 14642 15250 15251 + /vitefu@0.2.5(vite@3.2.5): 15252 + resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} 15253 + peerDependencies: 15254 + vite: ^3.2.4 15255 + peerDependenciesMeta: 15256 + vite: 15257 + optional: true 15258 + dependencies: 15259 + vite: 3.2.5(@types/node@18.16.3)(terser@5.17.1) 15260 + dev: true 15261 + 14643 15262 /vitest@0.30.1(jsdom@21.1.1)(terser@5.17.1): 14644 15263 resolution: {integrity: sha512-y35WTrSTlTxfMLttgQk4rHcaDkbHQwDP++SNwPb+7H8yb13Q3cu2EixrtHzF27iZ8v0XCciSsLg00RkPAzB/aA==} 14645 15264 engines: {node: '>=v14.18.0'} ··· 14707 15326 - terser 14708 15327 dev: true 14709 15328 15329 + /vitest@0.30.1(jsdom@22.1.0)(terser@5.17.1): 15330 + resolution: {integrity: sha512-y35WTrSTlTxfMLttgQk4rHcaDkbHQwDP++SNwPb+7H8yb13Q3cu2EixrtHzF27iZ8v0XCciSsLg00RkPAzB/aA==} 15331 + engines: {node: '>=v14.18.0'} 15332 + hasBin: true 15333 + peerDependencies: 15334 + '@edge-runtime/vm': '*' 15335 + '@vitest/browser': '*' 15336 + '@vitest/ui': '*' 15337 + happy-dom: '*' 15338 + jsdom: '*' 15339 + playwright: '*' 15340 + safaridriver: '*' 15341 + webdriverio: '*' 15342 + peerDependenciesMeta: 15343 + '@edge-runtime/vm': 15344 + optional: true 15345 + '@vitest/browser': 15346 + optional: true 15347 + '@vitest/ui': 15348 + optional: true 15349 + happy-dom: 15350 + optional: true 15351 + jsdom: 15352 + optional: true 15353 + playwright: 15354 + optional: true 15355 + safaridriver: 15356 + optional: true 15357 + webdriverio: 15358 + optional: true 15359 + dependencies: 15360 + '@types/chai': 4.3.16 15361 + '@types/chai-subset': 1.3.3 15362 + '@types/node': 18.16.3 15363 + '@vitest/expect': 0.30.1 15364 + '@vitest/runner': 0.30.1 15365 + '@vitest/snapshot': 0.30.1 15366 + '@vitest/spy': 0.30.1 15367 + '@vitest/utils': 0.30.1 15368 + acorn: 8.11.3 15369 + acorn-walk: 8.2.0 15370 + cac: 6.7.14 15371 + chai: 4.3.7 15372 + concordance: 5.0.4 15373 + debug: 4.3.4(supports-color@5.5.0) 15374 + jsdom: 22.1.0 15375 + local-pkg: 0.4.3 15376 + magic-string: 0.30.0 15377 + pathe: 1.1.2 15378 + picocolors: 1.0.1 15379 + source-map: 0.6.1 15380 + std-env: 3.7.0 15381 + strip-literal: 1.0.1 15382 + tinybench: 2.8.0 15383 + tinypool: 0.4.0 15384 + vite: 3.2.5(@types/node@18.16.3)(terser@5.17.1) 15385 + vite-node: 0.30.1(@types/node@18.16.3)(terser@5.17.1) 15386 + why-is-node-running: 2.2.2 15387 + transitivePeerDependencies: 15388 + - less 15389 + - sass 15390 + - stylus 15391 + - sugarss 15392 + - supports-color 15393 + - terser 15394 + dev: true 15395 + 14710 15396 /vm-browserify@1.1.2: 14711 15397 resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} 14712 15398 ··· 14871 15557 /webpack-flush-chunks@2.0.3(react@17.0.2): 14872 15558 resolution: {integrity: sha512-CXGOyXG5YjjxyI+Qyt3VlI//JX92UmGRNP65zN3o9CIntEzfzc1J30YTKRRvF1JsE/iEzbnp5u99yCkL9obotQ==} 14873 15559 peerDependencies: 14874 - react: '*' 15560 + react: ^17.0.2 || 17 14875 15561 dependencies: 14876 15562 react: 17.0.2 14877 15563
+1
vitest.config.ts
··· 18 18 setupFiles: [resolve(__dirname, 'scripts/vitest/setup.js')], 19 19 clearMocks: true, 20 20 exclude: [ 21 + 'packages/solid-urql/**', 21 22 '**/node_modules/**', 22 23 '**/dist/**', 23 24 '**/cypress/**',