From ca4cb7517de337478a2f1c8d514e985fdddd68a2 Mon Sep 17 00:00:00 2001 From: nvos Date: Wed, 19 Jul 2023 22:08:23 +0200 Subject: [PATCH 01/20] feat(solid): Add createQuery --- packages/solid-urql/package.json | 74 ++ packages/solid-urql/src/context.ts | 20 + packages/solid-urql/src/createQuery.test.tsx | 196 ++++ packages/solid-urql/src/createQuery.ts | 230 ++++ packages/solid-urql/src/index.ts | 1 + packages/solid-urql/tsconfig.json | 8 + packages/solid-urql/vitest.config.ts | 32 + pnpm-lock.yaml | 1022 +++++++++++++++++- 8 files changed, 1534 insertions(+), 49 deletions(-) create mode 100644 packages/solid-urql/package.json create mode 100644 packages/solid-urql/src/context.ts create mode 100644 packages/solid-urql/src/createQuery.test.tsx create mode 100644 packages/solid-urql/src/createQuery.ts create mode 100644 packages/solid-urql/src/index.ts create mode 100644 packages/solid-urql/tsconfig.json create mode 100644 packages/solid-urql/vitest.config.ts diff --git a/packages/solid-urql/package.json b/packages/solid-urql/package.json new file mode 100644 index 0000000000..6161a63d7d --- /dev/null +++ b/packages/solid-urql/package.json @@ -0,0 +1,74 @@ +{ + "name": "@urql/solid", + "version": "4.0.4", + "description": "A highly customizable and versatile GraphQL client for Solid", + "sideEffects": false, + "homepage": "https://formidable.com/open-source/urql/docs/", + "bugs": "https://github.com/urql-graphql/urql/issues", + "license": "MIT", + "author": "urql GraphQL Contributors", + "repository": { + "type": "git", + "url": "https://github.com/urql-graphql/urql.git", + "directory": "packages/solid-urql" + }, + "keywords": [ + "graphql client", + "state management", + "cache", + "graphql", + "exchanges", + "solid" + ], + "main": "dist/urql-solid", + "module": "dist/urql-solid.mjs", + "types": "dist/urql-solid.d.ts", + "source": "src/index.ts", + "exports": { + ".": { + "types": "./dist/urql-solid.d.ts", + "import": "./dist/urql-solid.mjs", + "require": "./dist/urql-solid.js", + "source": "./src/index.ts" + }, + "./package.json": "./package.json" + }, + "files": [ + "LICENSE", + "CHANGELOG.md", + "README.md", + "dist/" + ], + "scripts": { + "test": "vitest", + "clean": "rimraf dist", + "check": "tsc --noEmit", + "lint": "eslint --ext=js,jsx,ts,tsx .", + "build": "rollup -c ../../scripts/rollup/config.mjs", + "prepare": "node ../../scripts/prepare/index.js", + "prepublishOnly": "run-s clean build" + }, + "devDependencies": { + "@solidjs/testing-library": "^0.8.2", + "@testing-library/jest-dom": "^5.16.5", + "@urql/core": "workspace:*", + "graphql": "^16.0.0", + "jsdom": "^22.1.0", + "vite-plugin-solid": "^2.7.0", + "vite-tsconfig-paths": "^4.2.0", + "vitest": "^0.32.2" + }, + "peerDependencies": { + "@urql/core": "^5.0.0", + "solid-js": "^1.7.7" + }, + "dependencies": { + "@solid-primitives/utils": "^6.2.0", + "@urql/core": "^4.0.0", + "wonka": "^6.3.2" + }, + "publishConfig": { + "access": "public", + "provenance": true + } +} diff --git a/packages/solid-urql/src/context.ts b/packages/solid-urql/src/context.ts new file mode 100644 index 0000000000..fbcfe0d917 --- /dev/null +++ b/packages/solid-urql/src/context.ts @@ -0,0 +1,20 @@ +import { Client } from '@urql/core'; +import { createContext, useContext } from 'solid-js'; + +export const Context = createContext(); +export const Provider = Context.Provider; + +type UseClient = () => Client; +export const useClient: UseClient = () => { + const client = useContext(Context); + + if (process.env.NODE_ENV !== 'production' && client === undefined) { + const error = + "No client has been specified using urql's Provider. please create a client and add a Provider."; + + console.error(error); + throw new Error(error); + } + + return client!; +}; diff --git a/packages/solid-urql/src/createQuery.test.tsx b/packages/solid-urql/src/createQuery.test.tsx new file mode 100644 index 0000000000..4fca4ba32c --- /dev/null +++ b/packages/solid-urql/src/createQuery.test.tsx @@ -0,0 +1,196 @@ +import { expect, it, describe, vi } from 'vitest'; +import { createQuery } from './createQuery'; +import { render, renderHook, waitFor } from '@solidjs/testing-library'; +import { createClient } from '@urql/core'; +import { Show, Suspense, createSignal } from 'solid-js'; +import { makeSubject } from 'wonka'; +import { OperationResult, OperationResultSource } from '@urql/core'; +import '@testing-library/jest-dom'; + +const client = createClient({ + url: '/graphql', + exchanges: [], + suspense: false, +}); +vi.mock('./context', () => { + const useClient = () => { + return client!; + }; + + return { useClient }; +}); + +type AppProps = { + suspense?: boolean; +}; +const App = (props: AppProps) => { + const [resource, refetch] = createQuery< + { test: boolean }, + { variable: number } + >({ + query: '{ test }', + context: { + suspense: props.suspense, + }, + }); + + return ( + loading}> + + {resource.data?.test} + + + + ); +}; + +describe('createQuery', () => { + it('should not suspend', async () => { + const subject = + makeSubject, 'data'>>(); + vi.spyOn(client, 'executeQuery').mockImplementation( + () => subject.source as OperationResultSource + ); + + const { findByTestId } = render(() => ); + + subject.next({ data: { test: true } }); + waitFor(async () => + expect((await findByTestId('value')).innerText).toStrictEqual('true') + ); + + const refetch = await findByTestId('refetch'); + refetch.click(); + + subject.next({ data: { test: true } }); + waitFor(async () => + expect((await findByTestId('value')).innerText).toStrictEqual('true') + ); + }); + + it('should suspend', async () => { + const subject = + makeSubject, 'data'>>(); + vi.spyOn(client, 'executeQuery').mockImplementation( + () => subject.source as OperationResultSource + ); + + const { findByTestId } = render(() => ); + + expect(await findByTestId('loading')).not.toBeFalsy(); + subject.next({ data: { test: true } }); + expect(await findByTestId('value')).not.toBeFalsy(); + + const refetch = await findByTestId('refetch'); + refetch.click(); + + expect(await findByTestId('loading')).not.toBeFalsy(); + subject.next({ data: { test: true } }); + expect(await findByTestId('value')).not.toBeFalsy(); + }); + + it('should not refetch when paused on variable change', async () => { + const subject = + makeSubject, 'data'>>(); + const executeQuery = vi + .spyOn(client, 'executeQuery') + .mockImplementation( + () => subject.source as OperationResultSource + ); + + const [variable, setVariable] = createSignal(1); + const [pause, setPause] = createSignal(false); + + const { result } = renderHook(() => + createQuery<{ variable: number }>({ + query: '{ test }', + pause: pause, + variables: () => ({ + variable: variable(), + }), + }) + ); + + expect(result[0].fetching).toStrictEqual(true); + subject.next({ data: { test: true } }); + await waitFor(() => result[0].fetching === false); + + setVariable(2); + + expect(result[0].fetching).toStrictEqual(true); + subject.next({ data: { test: true } }); + await waitFor(() => result[0].fetching === false); + + expect(executeQuery).toHaveBeenCalledTimes(2); + + setPause(true); + setVariable(3); + + expect(result[0].fetching).toStrictEqual(false); + expect(executeQuery).toHaveBeenCalledTimes(2); + }); + + it('should trigger refetch on variables change', async () => { + const subject = + makeSubject, 'data'>>(); + const executeQuery = vi + .spyOn(client, 'executeQuery') + .mockImplementation( + () => subject.source as OperationResultSource + ); + + const [variables, setVariables] = createSignal<{ variable: number }>({ + variable: 1, + }); + + const { result } = renderHook(() => + createQuery<{ test: boolean }, { variable: number }>({ + query: '{ test }', + variables: variables, + }) + ); + + await waitFor(() => expect(result[0].fetching).toStrictEqual(true)); + subject.next({ data: { test: true } }); + await waitFor(() => expect(result[0].fetching).toStrictEqual(false)); + await waitFor(() => expect(result[0].data?.test).toStrictEqual(true)); + setVariables({ variable: 2 }); + + await waitFor(() => expect(result[0].fetching).toStrictEqual(true)); + expect(executeQuery).toHaveBeenCalledTimes(2); + + subject.next({ data: { test: false } }); + await waitFor(() => expect(result[0].fetching).toStrictEqual(false)); + await waitFor(() => expect(result[0].data?.test).toStrictEqual(false)); + }); + + it('should receive data', async () => { + const subject = + makeSubject, 'data'>>(); + const executeQuery = vi + .spyOn(client, 'executeQuery') + .mockImplementation( + () => subject.source as OperationResultSource + ); + + const { result } = renderHook(() => + createQuery<{ variable: number }, { test: boolean }>({ + query: '{ test }', + }) + ); + + await waitFor(() => expect(result[0].fetching).toStrictEqual(true)); + expect(result[0].data).toBeUndefined(); + + subject.next({ data: { test: true } }); + + await waitFor(() => expect(result[0].fetching).toStrictEqual(false)); + expect(result[0].data).toStrictEqual({ test: true }); + expect(executeQuery).toHaveBeenCalledTimes(1); + }); +}); diff --git a/packages/solid-urql/src/createQuery.ts b/packages/solid-urql/src/createQuery.ts new file mode 100644 index 0000000000..4289c07251 --- /dev/null +++ b/packages/solid-urql/src/createQuery.ts @@ -0,0 +1,230 @@ +import { + type AnyVariables, + type OperationContext, + createRequest, + type DocumentInput, + type OperationResult, + type RequestPolicy, +} from '@urql/core'; +import { + batch, + createComputed, + createMemo, + createResource, + onCleanup, +} from 'solid-js'; +import { createStore, unwrap } from 'solid-js/store'; +import { useClient } from './context'; +import { asAccessor } from '@solid-primitives/utils'; +import { + concat, + fromValue, + makeSubject, + map, + never, + pipe, + scan, + subscribe, + switchMap, +} from 'wonka'; +import { type MaybeAccessor } from '@solid-primitives/utils'; + +export type QueryExecuteArgs< + Data = any, + Variables extends AnyVariables = AnyVariables +> = { + query: DocumentInput; + requestPolicy?: RequestPolicy; + context?: Partial; + pause?: boolean; + variables?: Variables; +}; + +/** State of the current query, your {@link createQuery} hook is executing. + * + * @remarks + * `UseQueryState` is returned (in a tuple) by {@link createQuery} and + * gives you the updating {@link OperationResult} of GraphQL queries. + * + * Even when the query and variables passed to {@link createQuery} change, + * this state preserves the prior state and sets the `fetching` flag to + * `true`. + * This allows you to display the previous state, while implementing + * a separate loading indicator separately. + */ +export type CreateQueryState< + Data = any, + Variables extends AnyVariables = AnyVariables +> = OperationResult & { + /** Indicates whether `createQuery` is waiting for a new result. + * + * @remarks + * When `createQuery` is passed a new query and/or variables, it will + * start executing the new query operation and `fetching` is set to + * `true` until a result arrives. + * + * Hint: This is subtly different than whether the query is actually + * fetching, and doesn’t indicate whether a query is being re-executed + * in the background. For this, see {@link CreateQueryState.stale}. + */ + fetching: boolean; +}; + +export type CreateQueryArgs< + Data = any, + Variables extends AnyVariables = AnyVariables +> = { + query: DocumentInput; + requestPolicy?: MaybeAccessor; + context?: MaybeAccessor>; + pause?: MaybeAccessor; + variables?: MaybeAccessor; +}; + +export const createQuery = < + Data = any, + Variables extends AnyVariables = AnyVariables +>( + args: CreateQueryArgs +) => { + const client = useClient(); + const optionsSubject = makeSubject>(); + const getContext = asAccessor(args.context), + getPause = asAccessor(args.pause), + getRequestPolicy = asAccessor(args.requestPolicy), + getVariables = asAccessor(args.variables); + + const isSuspense = createMemo(() => { + const ctx = getContext(); + if (ctx !== undefined && ctx.suspense !== undefined) { + return ctx.suspense; + } + + return client.suspense; + }); + + const request = createRequest(args.query, getVariables() as any); + const context: Partial = { + requestPolicy: getRequestPolicy(), + ...getContext(), + }; + const operation = client.createRequestOperation('query', request, context); + const initialResult: CreateQueryState = { + operation: operation, + fetching: false, + data: undefined, + error: undefined, + extensions: undefined, + hasNext: false, + stale: false, + }; + + const [result, setResult] = + createStore>(initialResult); + + const [dataResource, { refetch, mutate }] = createResource< + CreateQueryState + >(() => { + return new Promise(resolve => { + const got = unwrap(result); + if (got.fetching) { + return; + } + + resolve(got); + }); + }); + + const sub = pipe( + optionsSubject.source, + switchMap(options$ => { + if (options$.pause) return never; + + const request = createRequest( + options$.query, + options$.variables + ); + + return concat>>([ + fromValue({ fetching: true, stale: false }), + pipe( + client.executeQuery(request, { + requestPolicy: options$.requestPolicy, + ...options$.context, + }), + map(({ stale, data, error, extensions, operation }) => ({ + fetching: false, + stale: !!stale, + data, + error, + operation, + extensions, + })) + ), + fromValue({ fetching: false }), + ]); + }), + scan( + (result: CreateQueryState, partial) => ({ + ...result, + ...partial, + }), + initialResult + ), + subscribe(result => { + batch(() => { + setResult(result); + mutate(result); + refetch(); + }); + }) + ); + + createComputed(() => { + const pause = getPause(); + if (pause === true) { + return; + } + + optionsSubject.next({ + query: args.query, + context: getContext(), + pause: pause, + requestPolicy: getRequestPolicy(), + variables: getVariables(), + }); + }); + + onCleanup(() => sub.unsubscribe()); + + batch(() => { + mutate(() => unwrap(result)); + refetch(); + }); + + const refetchFn = (refetchArgs: Partial) => { + optionsSubject.next({ + query: args.query, + requestPolicy: refetchArgs.requestPolicy ?? getRequestPolicy(), + context: refetchArgs ?? getContext(), + pause: false, + variables: getVariables(), + }); + }; + + const handler = { + get( + target: CreateQueryState, + prop: keyof CreateQueryState + ): any { + if (isSuspense() && prop === 'data') { + return dataResource()?.data; + } + + return Reflect.get(target, prop); + }, + }; + + const proxy = new Proxy(result, handler); + return [proxy, refetchFn] as const; +}; diff --git a/packages/solid-urql/src/index.ts b/packages/solid-urql/src/index.ts new file mode 100644 index 0000000000..c38e8e8215 --- /dev/null +++ b/packages/solid-urql/src/index.ts @@ -0,0 +1 @@ +export * from './context'; diff --git a/packages/solid-urql/tsconfig.json b/packages/solid-urql/tsconfig.json new file mode 100644 index 0000000000..8c25acf9b4 --- /dev/null +++ b/packages/solid-urql/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src"], + "compilerOptions": { + "jsx": "preserve", + "jsxImportSource": "solid-js" + } +} diff --git a/packages/solid-urql/vitest.config.ts b/packages/solid-urql/vitest.config.ts new file mode 100644 index 0000000000..43ca8c3dce --- /dev/null +++ b/packages/solid-urql/vitest.config.ts @@ -0,0 +1,32 @@ +/// +/// +// 👆 do not forget to add the references above +import { resolve } from 'path'; +import { defineConfig } from 'vite'; +import solidPlugin from 'vite-plugin-solid'; +import tsconfigPaths from 'vite-tsconfig-paths'; + +export default defineConfig({ + plugins: [solidPlugin(), tsconfigPaths()], + server: { + port: 3000, + }, + build: { + target: 'esnext', + }, + test: { + environment: 'jsdom', + transformMode: { web: [/\.[jt]sx?$/] }, + globals: true, + setupFiles: [resolve(__dirname, '../../scripts/vitest/setup.js')], + clearMocks: true, + exclude: [ + '**/node_modules/**', + '**/dist/**', + '**/cypress/**', + '**/e2e-tests/**', + '**/.{idea,git,cache,output,temp}/**', + '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress}.config.*', + ], + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ebb1cbe7ae..0fa6fc9338 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -542,6 +542,43 @@ importers: specifier: '>=4.4.6' version: 4.46.0 + packages/solid-urql: + dependencies: + '@solid-primitives/utils': + specifier: ^6.2.0 + version: 6.2.3(solid-js@1.8.17) + '@urql/core': + specifier: ^4.0.0 + version: 4.3.0(graphql@16.6.0) + solid-js: + specifier: ^1.7.7 + version: 1.8.17 + wonka: + specifier: ^6.3.2 + version: 6.3.2 + devDependencies: + '@solidjs/testing-library': + specifier: ^0.8.2 + version: 0.8.8(solid-js@1.8.17) + '@testing-library/jest-dom': + specifier: ^5.16.5 + version: 5.17.0 + graphql: + specifier: ^16.6.0 + version: 16.6.0 + jsdom: + specifier: ^22.1.0 + version: 22.1.0 + vite-plugin-solid: + specifier: ^2.7.0 + version: 2.10.2(@testing-library/jest-dom@5.17.0)(solid-js@1.8.17)(vite@3.2.5) + vite-tsconfig-paths: + specifier: ^4.2.0 + version: 4.2.0(typescript@5.1.6)(vite@3.2.5) + vitest: + specifier: ^0.32.2 + version: 0.32.4(jsdom@22.1.0)(terser@5.17.1) + packages/storage-rn: devDependencies: '@react-native-async-storage/async-storage': @@ -597,7 +634,7 @@ packages: /@0no-co/graphql.web@1.0.5(graphql@16.6.0): resolution: {integrity: sha512-/ODdeNNFksS9hUvpjWFldMEpq0OqCFEIV3NVM0eU8HLUYU0Szf+2iKvr63kkbGchQwk2/1IxPF1PfoCabVkgLw==} peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + graphql: ^16.6.0 peerDependenciesMeta: graphql: optional: true @@ -641,6 +678,10 @@ packages: dependencies: tunnel: 0.0.6 + /@adobe/css-tools@4.4.0: + resolution: {integrity: sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==} + dev: true + /@ampproject/remapping@2.2.0: resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} engines: {node: '>=6.0.0'} @@ -681,10 +722,23 @@ packages: '@babel/highlight': 7.24.2 picocolors: 1.0.0 + /@babel/code-frame@7.24.7: + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.0.0 + dev: true + /@babel/compat-data@7.21.5: resolution: {integrity: sha512-M+XAiQ7GzQ3FDPf0KOLkugzptnIypt0X0ma0wmlTKPR3IchgNFdx2JXxZdvd18JY5s7QkaFD/qyX0dsMpog/Ug==} engines: {node: '>=6.9.0'} + /@babel/compat-data@7.24.7: + resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/core@7.12.9: resolution: {integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==} engines: {node: '>=6.9.0'} @@ -730,6 +784,29 @@ packages: transitivePeerDependencies: - supports-color + /@babel/core@7.24.7: + resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.7 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helpers': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/template': 7.24.7 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + convert-source-map: 2.0.0 + debug: 4.3.4(supports-color@5.5.0) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/generator@7.21.5: resolution: {integrity: sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==} engines: {node: '>=6.9.0'} @@ -739,6 +816,16 @@ packages: '@jridgewell/trace-mapping': 0.3.17 jsesc: 2.5.2 + /@babel/generator@7.24.7: + resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.7 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + dev: true + /@babel/helper-annotate-as-pure@7.18.6: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} @@ -764,6 +851,17 @@ packages: lru-cache: 5.1.1 semver: 6.3.1 + /@babel/helper-compilation-targets@7.24.7: + resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + browserslist: 4.23.0 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + /@babel/helper-create-class-features-plugin@7.21.5(@babel/core@7.21.5): resolution: {integrity: sha512-yNSEck9SuDvPTEUYm4BSXl6ZVC7yO5ZLEMAhG3v3zi7RDxyL/nQDemWWZmw4L0stPWwhpnznRRyJHPRcbXR2jw==} engines: {node: '>=6.9.0'} @@ -813,6 +911,13 @@ packages: resolution: {integrity: sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==} engines: {node: '>=6.9.0'} + /@babel/helper-environment-visitor@7.24.7: + resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.7 + dev: true + /@babel/helper-explode-assignable-expression@7.13.0: resolution: {integrity: sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==} dependencies: @@ -825,24 +930,56 @@ packages: '@babel/template': 7.20.7 '@babel/types': 7.22.4 + /@babel/helper-function-name@7.24.7: + resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 + dev: true + /@babel/helper-hoist-variables@7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.4 + /@babel/helper-hoist-variables@7.24.7: + resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.7 + dev: true + /@babel/helper-member-expression-to-functions@7.21.5: resolution: {integrity: sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.4 + /@babel/helper-module-imports@7.18.6: + resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + /@babel/helper-module-imports@7.21.4: resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.4 + /@babel/helper-module-imports@7.24.7: + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-module-transforms@7.21.5: resolution: {integrity: sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==} engines: {node: '>=6.9.0'} @@ -858,6 +995,22 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7): + resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-optimise-call-expression@7.18.6: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} @@ -899,6 +1052,16 @@ packages: dependencies: '@babel/types': 7.22.4 + /@babel/helper-simple-access@7.24.7: + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-skip-transparent-expression-wrappers@7.20.0: resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} engines: {node: '>=6.9.0'} @@ -911,6 +1074,13 @@ packages: dependencies: '@babel/types': 7.22.4 + /@babel/helper-split-export-declaration@7.24.7: + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.7 + dev: true + /@babel/helper-string-parser@7.21.5: resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==} engines: {node: '>=6.9.0'} @@ -920,7 +1090,11 @@ packages: engines: {node: '>=6.9.0'} requiresBuild: true dev: true - optional: true + + /@babel/helper-string-parser@7.24.7: + resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} + engines: {node: '>=6.9.0'} + dev: true /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} @@ -930,10 +1104,20 @@ packages: resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier@7.24.7: + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-option@7.21.0: resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-option@7.24.7: + resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-wrap-function@7.13.0: resolution: {integrity: sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==} dependencies: @@ -954,6 +1138,14 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helpers@7.24.7: + resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 + dev: true + /@babel/highlight@7.22.5: resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} engines: {node: '>=6.9.0'} @@ -971,6 +1163,16 @@ packages: js-tokens: 4.0.0 picocolors: 1.0.0 + /@babel/highlight@7.24.7: + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.0 + dev: true + /@babel/parser@7.22.4: resolution: {integrity: sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==} engines: {node: '>=6.0.0'} @@ -986,7 +1188,14 @@ packages: dependencies: '@babel/types': 7.24.0 dev: true - optional: true + + /@babel/parser@7.24.7: + resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.24.7 + dev: true /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.13.12(@babel/core@7.21.5): resolution: {integrity: sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==} @@ -1211,6 +1420,16 @@ packages: '@babel/core': 7.21.5 '@babel/helper-plugin-utils': 7.21.5 + /@babel/plugin-syntax-jsx@7.21.4(@babel/core@7.24.7): + resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.5): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: @@ -1802,6 +2021,15 @@ packages: '@babel/parser': 7.22.4 '@babel/types': 7.22.4 + /@babel/template@7.24.7: + resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + dev: true + /@babel/traverse@7.21.5(supports-color@5.5.0): resolution: {integrity: sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==} engines: {node: '>=6.9.0'} @@ -1819,6 +2047,24 @@ packages: transitivePeerDependencies: - supports-color + /@babel/traverse@7.24.7: + resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + debug: 4.3.4(supports-color@5.5.0) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/types@7.22.4: resolution: {integrity: sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==} engines: {node: '>=6.9.0'} @@ -1836,7 +2082,15 @@ packages: '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 dev: true - optional: true + + /@babel/types@7.24.7: + resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + dev: true /@changesets/apply-release-plan@6.1.4: resolution: {integrity: sha512-FMpKF1fRlJyCZVYHr3CbinpZZ+6MwvOtWUuO8uo+svcATEoc1zRDcj23pAurJ2TZ/uVz1wFHH6K3NlACy0PLew==} @@ -2041,10 +2295,10 @@ packages: /@cypress/react@7.0.2(@types/react@17.0.52)(cypress@12.8.1)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-TTV7XNMDOO9mZUFWiGbd44Od/jqMVX/QbHYKQmK1XT3nIVFs0EvKJuHJmwN7wxLOR/+6twtyX6vTD8z8XBTliQ==} peerDependencies: - '@types/react': ^16.9.16 || ^17.0.0 + '@types/react': ^17.0.39 cypress: '*' - react: ^=16.x || ^=17.x || 17 - react-dom: ^=16.x || ^=17.x || 17 + react: ^17.0.2 || 17 + react-dom: ^17.0.2 || 17 peerDependenciesMeta: '@types/react': optional: true @@ -2195,6 +2449,20 @@ packages: resolution: {integrity: sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==} dev: true + /@jest/expect-utils@29.7.0: + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.6.3 + dev: true + + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + /@jest/types@26.6.2: resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} engines: {node: '>= 10.14.2'} @@ -2206,6 +2474,18 @@ packages: chalk: 4.1.2 dev: true + /@jest/types@29.6.3: + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.3 + '@types/istanbul-reports': 3.0.0 + '@types/node': 18.16.3 + '@types/yargs': 17.0.32 + chalk: 4.1.2 + dev: true + /@jridgewell/gen-mapping@0.1.1: resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} engines: {node: '>=6.0.0'} @@ -2221,6 +2501,15 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.17 + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + dev: true + /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} @@ -2229,6 +2518,11 @@ packages: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + dev: true + /@jridgewell/source-map@0.3.2: resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} dependencies: @@ -2248,6 +2542,13 @@ packages: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /@manypkg/find-root@1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} dependencies: @@ -2296,7 +2597,7 @@ packages: /@mdx-js/react@1.6.22(react@17.0.2): resolution: {integrity: sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==} peerDependencies: - react: ^16.13.1 || ^17.0.0 || 17 + react: ^17.0.2 || 17 dependencies: react: 17.0.2 dev: false @@ -2733,8 +3034,8 @@ packages: /@reach/router@1.3.4(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-+mtn9wjlB9NN2CNnnC/BRYtwdKBfSyyasPYraNAyvaV1occr/5NnB4CVzjEZipNHwYebQwcndGUmpFzxAUoqSA==} peerDependencies: - react: 15.x || 16.x || 16.4.0-alpha.0911da3 || 17 - react-dom: 15.x || 16.x || 16.4.0-alpha.0911da3 || 17 + react: ^17.0.2 || 17 + react-dom: ^17.0.2 || 17 dependencies: create-react-context: 0.3.0(prop-types@15.8.1)(react@17.0.2) invariant: 2.2.4 @@ -2867,16 +3168,56 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + /@sindresorhus/is@0.7.0: resolution: {integrity: sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==} engines: {node: '>=4'} + /@solid-primitives/utils@6.2.3(solid-js@1.8.17): + resolution: {integrity: sha512-CqAwKb2T5Vi72+rhebSsqNZ9o67buYRdEJrIFzRXz3U59QqezuuxPsyzTSVCacwS5Pf109VRsgCJQoxKRoECZQ==} + peerDependencies: + solid-js: ^1.6.12 + dependencies: + solid-js: 1.8.17 + dev: false + + /@solidjs/testing-library@0.8.8(solid-js@1.8.17): + resolution: {integrity: sha512-47J9Aw+iG45Fs5Kxu/IJmkaaucpF7qhDazW+iXeNssAYI0FH+4MeM/SfYRhPbIMH/hBpMh/XjbK1Wpyu9PcSwg==} + engines: {node: '>= 14'} + peerDependencies: + '@solidjs/router': '>=0.9.0' + solid-js: '>=1.0.0' + peerDependenciesMeta: + '@solidjs/router': + optional: true + dependencies: + '@testing-library/dom': 10.1.0 + solid-js: 1.8.17 + dev: true + /@swc/helpers@0.4.11: resolution: {integrity: sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==} dependencies: tslib: 2.6.1 dev: true + /@testing-library/dom@10.1.0: + resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==} + engines: {node: '>=18'} + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/runtime': 7.22.5 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + dev: true + /@testing-library/dom@7.30.4: resolution: {integrity: sha512-GObDVMaI4ARrZEXaRy4moolNAxWPKvEYNV/fa6Uc2eAzR/t4otS6A7EhrntPBIQLeehL9DbVhscvvv7gd6hWqA==} engines: {node: '>=10'} @@ -2891,6 +3232,21 @@ packages: pretty-format: 26.6.2 dev: true + /@testing-library/jest-dom@5.17.0: + resolution: {integrity: sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==} + engines: {node: '>=8', npm: '>=6', yarn: '>=1'} + dependencies: + '@adobe/css-tools': 4.4.0 + '@babel/runtime': 7.22.5 + '@types/testing-library__jest-dom': 5.14.9 + aria-query: 5.3.0 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.5.16 + lodash: 4.17.21 + redent: 3.0.0 + dev: true + /@testing-library/preact@2.0.1(preact@10.13.1): resolution: {integrity: sha512-79kwVOY+3caoLgaPbiPzikjgY0Aya7Fc7TvGtR1upCnz2wrtmPDnN2t9vO7I7vDP2zoA+feSwOH5Q0BFErhaaQ==} engines: {node: '>= 10'} @@ -2904,8 +3260,8 @@ packages: /@testing-library/react-hooks@5.1.2(react-dom@17.0.2)(react-test-renderer@17.0.2)(react@17.0.2): resolution: {integrity: sha512-jwhtDYZ5gQUIX8cmVCVdtwNvuF5EiCOWjokRlTV+o/V0GdtRZDykUllL1OXq5PS4+J33wGLNQeeWzEHcWrH7tg==} peerDependencies: - react: '>=16.9.0 || 17' - react-dom: '>=16.9.0 || 17' + react: ^17.0.2 || 17 + react-dom: ^17.0.2 || 17 react-test-renderer: '>=16.9.0' peerDependenciesMeta: react-dom: @@ -2928,8 +3284,8 @@ packages: resolution: {integrity: sha512-TXMCg0jT8xmuU8BkKMtp8l7Z50Ykew5WNX8UoIKTaLFwKkP2+1YDhOLA2Ga3wY4x29jyntk7EWfum0kjlYiSjQ==} engines: {node: '>=10'} peerDependencies: - react: '*' - react-dom: '*' + react: ^17.0.2 || 17 + react-dom: ^17.0.2 || 17 dependencies: '@babel/runtime': 7.22.5 '@testing-library/dom': 7.30.4 @@ -2953,12 +3309,49 @@ packages: resolution: {integrity: sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg==} dev: true + /@types/aria-query@5.0.4: + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + dev: true + + /@types/babel__core@7.20.5: + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + dependencies: + '@babel/parser': 7.24.1 + '@babel/types': 7.24.0 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + dev: true + + /@types/babel__generator@7.6.8: + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@types/babel__template@7.4.4: + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + dependencies: + '@babel/parser': 7.24.1 + '@babel/types': 7.24.0 + dev: true + + /@types/babel__traverse@7.20.6: + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + dependencies: + '@babel/types': 7.24.0 + dev: true + /@types/chai-subset@1.3.3: resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} dependencies: '@types/chai': 4.3.4 dev: true + /@types/chai@4.3.16: + resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} + dev: true + /@types/chai@4.3.4: resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==} dev: true @@ -3000,6 +3393,13 @@ packages: '@types/istanbul-lib-report': 3.0.0 dev: true + /@types/jest@29.5.12: + resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + dev: true + /@types/json-schema@7.0.12: resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} @@ -3093,6 +3493,16 @@ packages: resolution: {integrity: sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==} dev: true + /@types/stack-utils@2.0.3: + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + dev: true + + /@types/testing-library__jest-dom@5.14.9: + resolution: {integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==} + dependencies: + '@types/jest': 29.5.12 + dev: true + /@types/unist@2.0.3: resolution: {integrity: sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==} @@ -3106,6 +3516,12 @@ packages: '@types/yargs-parser': 20.2.0 dev: true + /@types/yargs@17.0.32: + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + dependencies: + '@types/yargs-parser': 20.2.0 + dev: true + /@types/yauzl@2.10.3: resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} requiresBuild: true @@ -3246,6 +3662,15 @@ packages: eslint-visitor-keys: 3.4.2 dev: true + /@urql/core@4.3.0(graphql@16.6.0): + resolution: {integrity: sha512-wT+FeL8DG4x5o6RfHEnONNFVDM3616ouzATMYUClB6CB+iIu2mwfBKd7xSUxYOZmwtxna5/hDRQdMl3nbQZlnw==} + dependencies: + '@0no-co/graphql.web': 1.0.5(graphql@16.6.0) + wonka: 6.3.2 + transitivePeerDependencies: + - graphql + dev: false + /@vitest/expect@0.30.1: resolution: {integrity: sha512-c3kbEtN8XXJSeN81iDGq29bUzSjQhjES2WR3aColsS4lPGbivwLtas4DNUe0jD9gg/FYGIteqOenfU95EFituw==} dependencies: @@ -3254,6 +3679,14 @@ packages: chai: 4.3.7 dev: true + /@vitest/expect@0.32.4: + resolution: {integrity: sha512-m7EPUqmGIwIeoU763N+ivkFjTzbaBn0n9evsTOcde03ugy2avPs3kZbYmw3DkcH1j5mxhMhdamJkLQ6dM1bk/A==} + dependencies: + '@vitest/spy': 0.32.4 + '@vitest/utils': 0.32.4 + chai: 4.3.7 + dev: true + /@vitest/runner@0.30.1: resolution: {integrity: sha512-W62kT/8i0TF1UBCNMRtRMOBWJKRnNyv9RrjIgdUryEe0wNpGZvvwPDLuzYdxvgSckzjp54DSpv1xUbv4BQ0qVA==} dependencies: @@ -3263,6 +3696,14 @@ packages: pathe: 1.1.0 dev: true + /@vitest/runner@0.32.4: + resolution: {integrity: sha512-cHOVCkiRazobgdKLnczmz2oaKK9GJOw6ZyRcaPdssO1ej+wzHVIkWiCiNacb3TTYPdzMddYkCgMjZ4r8C0JFCw==} + dependencies: + '@vitest/utils': 0.32.4 + p-limit: 4.0.0 + pathe: 1.1.2 + dev: true + /@vitest/snapshot@0.30.1: resolution: {integrity: sha512-fJZqKrE99zo27uoZA/azgWyWbFvM1rw2APS05yB0JaLwUIg9aUtvvnBf4q7JWhEcAHmSwbrxKFgyBUga6tq9Tw==} dependencies: @@ -3271,12 +3712,26 @@ packages: pretty-format: 27.5.1 dev: true + /@vitest/snapshot@0.32.4: + resolution: {integrity: sha512-IRpyqn9t14uqsFlVI2d7DFMImGMs1Q9218of40bdQQgMePwVdmix33yMNnebXcTzDU5eiV3eUsoxxH5v0x/IQA==} + dependencies: + magic-string: 0.30.0 + pathe: 1.1.2 + pretty-format: 29.7.0 + dev: true + /@vitest/spy@0.30.1: resolution: {integrity: sha512-YfJeIf37GvTZe04ZKxzJfnNNuNSmTEGnla2OdL60C8od16f3zOfv9q9K0nNii0NfjDJRt/CVN/POuY5/zTS+BA==} dependencies: tinyspy: 2.1.0 dev: true + /@vitest/spy@0.32.4: + resolution: {integrity: sha512-oA7rCOqVOOpE6rEoXuCOADX7Lla1LIa4hljI2MSccbpec54q+oifhziZIJXxlE/CvI2E+ElhBHzVu0VEvJGQKQ==} + dependencies: + tinyspy: 2.2.1 + dev: true + /@vitest/utils@0.30.1: resolution: {integrity: sha512-/c8Xv2zUVc+rnNt84QF0Y0zkfxnaGhp87K2dYJMLtLOIckPzuxLVzAtFCicGFdB4NeBHNzTRr1tNn7rCtQcWFA==} dependencies: @@ -3285,6 +3740,14 @@ packages: pretty-format: 27.5.1 dev: true + /@vitest/utils@0.32.4: + resolution: {integrity: sha512-Gwnl8dhd1uJ+HXrYyV0eRqfmk9ek1ASE/LWfTCuWMw+d07ogHqp4hEAV28NiecimK6UY9DpSEPh+pXBA5gtTBg==} + dependencies: + diff-sequences: 29.6.3 + loupe: 2.3.6 + pretty-format: 29.7.0 + dev: true + /@vue/compiler-core@3.2.47: resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==} dependencies: @@ -3546,6 +4009,7 @@ packages: /abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead dev: true /abbrev@1.1.1: @@ -3610,6 +4074,12 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /after@0.8.2: resolution: {integrity: sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA==} @@ -3815,6 +4285,12 @@ packages: '@babel/runtime-corejs3': 7.13.17 dev: true + /aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + dependencies: + dequal: 2.0.3 + dev: true + /arr-diff@4.0.0: resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} engines: {node: '>=0.10.0'} @@ -4058,6 +4534,19 @@ packages: dependencies: '@babel/helper-plugin-utils': 7.10.4 + /babel-plugin-jsx-dom-expressions@0.37.21(@babel/core@7.24.7): + resolution: {integrity: sha512-WbQo1NQ241oki8bYasVzkMXOTSIri5GO/K47rYJb2ZBh8GaPUEWiWbMV3KwXz+96eU2i54N6ThzjQG/f5n8Azw==} + peerDependencies: + '@babel/core': ^7.20.12 + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-module-imports': 7.18.6 + '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.24.7) + '@babel/types': 7.24.0 + html-entities: 2.3.3 + validate-html-nesting: 1.2.2 + dev: true + /babel-plugin-macros@2.8.0: resolution: {integrity: sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==} dependencies: @@ -4101,7 +4590,7 @@ packages: /babel-plugin-styled-components@1.12.0(styled-components@5.2.3): resolution: {integrity: sha512-FEiD7l5ZABdJPpLssKXjBUJMYqzbcNzBowfXDCdJhOpbhWiewapUaY+LZGT8R4Jg2TwOjGjG4RKeyrO5p9sBkA==} peerDependencies: - styled-components: '>= 2 || 5' + styled-components: ^5.2.3 || 5 dependencies: '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-module-imports': 7.21.4 @@ -4132,6 +4621,15 @@ packages: '@babel/helper-module-imports': 7.21.4 webpack: 4.46.0 + /babel-preset-solid@1.8.17(@babel/core@7.24.7): + resolution: {integrity: sha512-s/FfTZOeds0hYxYqce90Jb+0ycN2lrzC7VP1k1JIn3wBqcaexDKdYi6xjB+hMNkL+Q6HobKbwsriqPloasR9LA==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.7 + babel-plugin-jsx-dom-expressions: 0.37.21(@babel/core@7.24.7) + dev: true + /babel-runtime@6.26.0: resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==} dependencies: @@ -4433,6 +4931,17 @@ packages: node-releases: 2.0.10 update-browserslist-db: 1.0.10(browserslist@4.21.5) + /browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001629 + electron-to-chromium: 1.4.795 + node-releases: 2.0.14 + update-browserslist-db: 1.0.16(browserslist@4.23.0) + dev: true + /buffer-alloc-unsafe@1.1.0: resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} @@ -4674,6 +5183,10 @@ packages: /caniuse-lite@1.0.30001466: resolution: {integrity: sha512-ewtFBSfWjEmxUgNBSZItFSmVtvk9zkwkl1OfRZlKA8slltRN+/C/tuGVrF9styXkN36Yu3+SeJ1qkXxDEyNZ5w==} + /caniuse-lite@1.0.30001629: + resolution: {integrity: sha512-c3dl911slnQhmxUIT4HhYzT7wnBK/XYpGnYLOj4nJBaRiw52Ibe7YxlDaAeRECvA786zCuExhxIUJ2K7nHMrBw==} + dev: true + /case-sensitive-paths-webpack-plugin@2.4.0: resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} engines: {node: '>=4'} @@ -4723,6 +5236,14 @@ packages: escape-string-regexp: 1.0.5 supports-color: 5.5.0 + /chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -5172,6 +5693,10 @@ packages: well-known-symbols: 2.0.0 dev: true + /confbox@0.1.7: + resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} + dev: true + /config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} dependencies: @@ -5209,6 +5734,10 @@ packages: /convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true + /cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} @@ -5320,7 +5849,7 @@ packages: resolution: {integrity: sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==} peerDependencies: prop-types: ^15.0.0 - react: ^0.14.0 || ^15.0.0 || ^16.0.0 || 17 + react: ^17.0.2 || 17 dependencies: gud: 1.0.0 prop-types: 15.8.1 @@ -5456,6 +5985,10 @@ packages: engines: {node: '>= 6'} dev: true + /css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + dev: true + /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -5544,6 +6077,9 @@ packages: resolution: {integrity: sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==} dev: true + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + /csv-generate@3.4.3: resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} dev: true @@ -5952,6 +6488,11 @@ packages: resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} dev: false + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: true + /des.js@1.0.1: resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==} dependencies: @@ -5974,6 +6515,11 @@ packages: /detect-node@2.0.5: resolution: {integrity: sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw==} + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + /diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} dependencies: @@ -6016,6 +6562,10 @@ packages: esutils: 2.0.3 dev: true + /dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + dev: true + /dom-accessibility-api@0.5.4: resolution: {integrity: sha512-TvrjBckDy2c6v6RLxPv5QXOnU+SmF9nBII5621Ve5fu6Z/BDrENurBEvlC1f44lKEUVqOpK4w9E5Idc5/EgkLQ==} dev: true @@ -6166,6 +6716,10 @@ packages: /electron-to-chromium@1.4.332: resolution: {integrity: sha512-c1Vbv5tuUlBFp0mb3mCIjw+REEsgthRgNE8BlbEDKmvzb8rxjcVki6OkQP83vLN34s0XCxpSkq7AZNep1a6xhw==} + /electron-to-chromium@1.4.795: + resolution: {integrity: sha512-hHo4lK/8wb4NUa+NJYSFyJ0xedNHiR6ylilDtb8NUW9d4dmBFmGiecYEKCEbti1wTNzbKXLfl4hPWEkAFbHYlw==} + dev: true + /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} dependencies: @@ -6593,6 +7147,11 @@ packages: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + dev: true + /escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -6600,6 +7159,11 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} + /escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + dev: true + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -6936,6 +7500,17 @@ packages: transitivePeerDependencies: - supports-color + /expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + dev: true + /express@4.17.1(supports-color@6.1.0): resolution: {integrity: sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==} engines: {node: '>= 0.10.0'} @@ -7373,7 +7948,7 @@ packages: resolution: {integrity: sha512-jvHSQMXujUtncyT3ObkoQgwOzkxdnnAs7XYgJDGSqhGqPF+LZ0y4rS5b6XzaN2BR3hG2e7isVtCNOmb7gxNuYw==} engines: {node: '>= 0.12.0', npm: '>= 2.0.0'} peerDependencies: - styled-components: '>= 4.0.0 || 5' + styled-components: ^5.2.3 || 5 dependencies: styled-components: 5.2.3(react-dom@17.0.2)(react-is@17.0.2)(react@17.0.2) dev: false @@ -8042,6 +8617,10 @@ packages: /html-entities@1.4.0: resolution: {integrity: sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==} + /html-entities@2.3.3: + resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} + dev: true + /html-minifier@3.5.21: resolution: {integrity: sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==} engines: {node: '>=4'} @@ -8829,6 +9408,11 @@ packages: dependencies: call-bind: 1.0.2 + /is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + dev: true + /is-whitespace-character@1.0.4: resolution: {integrity: sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==} @@ -8887,6 +9471,58 @@ packages: has-to-string-tag-x: 1.4.1 is-object: 1.0.2 + /jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + + /jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + + /jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/code-frame': 7.24.2 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: true + + /jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 18.16.3 + chalk: 4.1.2 + ci-info: 3.8.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: true + /js-beautify@1.14.6: resolution: {integrity: sha512-GfofQY5zDp+cuHc+gsEXKPpNw2KbPddreEo35O6jT6i0RVK6LhsoYBhq5TvK4/n74wnA0QbK8gGd+jUZwTMKJw==} engines: {node: '>=10'} @@ -8965,6 +9601,44 @@ packages: - utf-8-validate dev: true + /jsdom@22.1.0: + resolution: {integrity: sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==} + engines: {node: '>=16'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + abab: 2.0.6 + cssstyle: 3.0.0 + data-urls: 4.0.0 + decimal.js: 10.4.3 + domexception: 4.0.0 + form-data: 4.0.0 + html-encoding-sniffer: 3.0.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.10 + parse5: 7.1.2 + rrweb-cssom: 0.6.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.2 + w3c-xmlserializer: 4.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 2.0.0 + whatwg-mimetype: 3.0.0 + whatwg-url: 12.0.1 + ws: 8.13.0 + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + /jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -9417,6 +10091,11 @@ packages: hasBin: true dev: true + /lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + dev: true + /magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} dependencies: @@ -9639,6 +10318,13 @@ packages: yargs-parser: 18.1.3 dev: true + /merge-anything@5.1.7: + resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} + engines: {node: '>=12.13'} + dependencies: + is-what: 4.1.16 + dev: true + /merge-descriptors@1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} @@ -9760,7 +10446,7 @@ packages: deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: prop-types: ^15.0.0 - react: ^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || 17 + react: ^17.0.2 || 17 dependencies: '@babel/runtime': 7.22.5 prop-types: 15.8.1 @@ -9949,6 +10635,15 @@ packages: ufo: 1.1.1 dev: true + /mlly@1.7.1: + resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} + dependencies: + acorn: 8.11.3 + pathe: 1.1.2 + pkg-types: 1.1.1 + ufo: 1.5.3 + dev: true + /moniker@0.1.2: resolution: {integrity: sha512-Uj9iV0QYr6281G+o0TvqhKwHHWB2Q/qUTT4LPQ3qDGc0r8cbMuqQjRXPZuVZ+gcL7APx+iQgE8lcfWPrj1LsLA==} dev: true @@ -10055,8 +10750,8 @@ packages: peerDependencies: fibers: '>= 3.1.0' node-sass: ^6.0.0 || ^7.0.0 - react: ^18.0.0-0 || 17 - react-dom: ^18.0.0-0 || 17 + react: ^17.0.2 || 17 + react-dom: ^17.0.2 || 17 sass: ^1.3.0 peerDependenciesMeta: fibers: @@ -10187,6 +10882,10 @@ packages: /node-releases@2.0.10: resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true + /node-stream-zip@1.15.0: resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==} engines: {node: '>=0.12.0'} @@ -10405,6 +11104,10 @@ packages: /num2fraction@1.2.2: resolution: {integrity: sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==} + /nwsapi@2.2.10: + resolution: {integrity: sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==} + dev: true + /nwsapi@2.2.2: resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} dev: true @@ -10940,6 +11643,10 @@ packages: resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==} dev: true + /pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + dev: true + /pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true @@ -10970,6 +11677,10 @@ packages: /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + /picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + dev: true + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -11039,6 +11750,14 @@ packages: pathe: 1.1.0 dev: true + /pkg-types@1.1.1: + resolution: {integrity: sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==} + dependencies: + confbox: 0.1.7 + mlly: 1.7.1 + pathe: 1.1.2 + dev: true + /please-upgrade-node@3.2.0: resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} dependencies: @@ -11452,10 +12171,19 @@ packages: react-is: 17.0.2 dev: true + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 17.0.2 + dev: true + /prism-react-renderer@1.2.0(react@17.0.2): resolution: {integrity: sha512-GHqzxLYImx1iKN1jJURcuRoA/0ygCcNhfGw1IT8nPIMzarmKQ3Nc+JcG0gi8JXQzuh0C5ShE4npMIoqNin40hg==} peerDependencies: - react: '>=0.14.9 || 17' + react: ^17.0.2 || 17 dependencies: react: 17.0.2 dev: false @@ -11705,7 +12433,7 @@ packages: /react-dom@17.0.2(react@17.0.2): resolution: {integrity: sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==} peerDependencies: - react: 17.0.2 || 17 + react: ^17.0.2 || 17 dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 @@ -11716,7 +12444,7 @@ packages: resolution: {integrity: sha512-W3xCd9zXnanqrTUeViceufD3mIW8Ut29BUD+S2f0eO2XCOU8b6UrJfY46RDGe5lxCJzfe4j0yvIfh0RbTZhKJw==} engines: {node: '>=10', npm: '>=6'} peerDependencies: - react: '>=16.13.1 || 17' + react: ^17.0.2 || 17 dependencies: '@babel/runtime': 7.22.5 react: 17.0.2 @@ -11728,7 +12456,7 @@ packages: /react-from-dom@0.3.1(react@17.0.2): resolution: {integrity: sha512-PeNBa8iuzoD7qHA9O7YpGnXFvC+XFFwStmFh2/r2zJAvEIaRg6EwOj+EPcDIFwyYBhqPIItxIx/dGdeWiFivjQ==} peerDependencies: - react: ^15.0.0 || ^16.0.0 || 17 + react: ^17.0.2 || 17 dependencies: react: 17.0.2 dev: false @@ -11737,7 +12465,7 @@ packages: resolution: {integrity: sha512-o8RScHj6Lb8cwy3GMrVH6NJvL+y0zpJvKtc0+wmH7Bt23rszJmnqEQxRbyrqUzk9DTJIHoP42bfO5rswC9SWBQ==} peerDependencies: prop-types: ^15.6.0 - react: ^15.6.2 || ^16.0 || ^17 || 17 + react: ^17.0.2 || 17 dependencies: prop-types: 15.7.2 react: 17.0.2 @@ -11750,7 +12478,7 @@ packages: /react-helmet@5.2.1(react@17.0.2): resolution: {integrity: sha512-CnwD822LU8NDBnjCpZ4ySh8L6HYyngViTZLfBBb3NjtrpN8m49clH8hidHouq20I51Y6TpCTISCBbqiY5GamwA==} peerDependencies: - react: '>=15.0.0 || 17' + react: ^17.0.2 || 17 dependencies: object-assign: 4.1.1 prop-types: 15.8.1 @@ -11762,9 +12490,9 @@ packages: resolution: {integrity: sha512-JrLlvUPqh6wIkrK2hZDfOyq/Uh/WeVEr8nc7hkn2/3Ul0sx1Kr5y4kOGNacNRoj7RhwLNcQ3Udf1KJXrqc0ZtA==} engines: {node: '>= 6'} peerDependencies: - '@types/react': '^15.0.0 || ^16.0.0 || ^17.0.0 ' - react: ^15.0.0 || ^16.0.0 || ^17.0.0 || 17 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || 17 + '@types/react': ^17.0.39 + react: ^17.0.2 || 17 + react-dom: ^17.0.2 || 17 peerDependenciesMeta: '@types/react': optional: true @@ -11783,7 +12511,7 @@ packages: /react-inlinesvg@1.2.0(react@17.0.2): resolution: {integrity: sha512-IsznU+UzpUwDGzBWbf0bfSRA5Jbqz87xeoqLM/nSIDPkoHksInF1wCGybTSn4sIui+30TqboRQP1wAelNTkdog==} peerDependencies: - react: ^16.3.0 || 17 + react: ^17.0.2 || 17 dependencies: exenv: 1.2.2 react: 17.0.2 @@ -11799,7 +12527,7 @@ packages: /react-router-dom@5.2.0(react@17.0.2): resolution: {integrity: sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==} peerDependencies: - react: '>=15 || 17' + react: ^17.0.2 || 17 dependencies: '@babel/runtime': 7.22.5 history: 4.10.1 @@ -11814,7 +12542,7 @@ packages: /react-router-ga@1.2.3(react-router-dom@5.2.0)(react@17.0.2): resolution: {integrity: sha512-0rNBGGI6Q1hkznbLB+bAmDTS+8w3duaJYYIbCrCwof/p7RbZuv+Lsv9enumRZXxb4oTZrY95vOvFxnsRQ4cFCg==} peerDependencies: - react: ^16.8.6 || 17 + react: ^17.0.2 || 17 react-router-dom: ^5.0.0 dependencies: react: 17.0.2 @@ -11824,7 +12552,7 @@ packages: /react-router@5.2.0(react@17.0.2): resolution: {integrity: sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==} peerDependencies: - react: '>=15 || 17' + react: ^17.0.2 || 17 dependencies: '@babel/runtime': 7.22.5 history: 4.10.1 @@ -11842,8 +12570,8 @@ packages: /react-scroll@1.8.2(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-f2ZEG5fsPbPTySI9ekcFpETCcNlqbmwbQj9hhzYK8tkgv+PA8APatSt66o/q0KSkDZxyT98ONTtXp9x0lyowEw==} peerDependencies: - react: ^15.5.4 || ^16.0.0 || ^17.0.0 || 17 - react-dom: ^15.5.4 || ^16.0.0 || ^17.0.0 || 17 + react: ^17.0.2 || 17 + react-dom: ^17.0.2 || 17 dependencies: lodash.throttle: 4.1.1 prop-types: 15.8.1 @@ -11854,7 +12582,7 @@ packages: /react-shallow-renderer@16.14.1(react@17.0.2): resolution: {integrity: sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg==} peerDependencies: - react: ^16.0.0 || ^17.0.0 || 17 + react: ^17.0.2 || 17 dependencies: object-assign: 4.1.1 react: 17.0.2 @@ -11864,7 +12592,7 @@ packages: /react-side-effect@1.2.0(react@17.0.2): resolution: {integrity: sha512-v1ht1aHg5k/thv56DRcjw+WtojuuDHFUgGfc+bFHOWsF4ZK6C2V57DO0Or0GPsg6+LSTE0M6Ry/gfzhzSwbc5w==} peerDependencies: - react: ^0.13.0 || ^0.14.0 || ^15.0.0 || ^16.0.0 || 17 + react: ^17.0.2 || 17 dependencies: react: 17.0.2 shallowequal: 1.1.0 @@ -11872,7 +12600,7 @@ packages: /react-ssr-prepass@1.4.0(react@17.0.2): resolution: {integrity: sha512-0SzdmiQUtHvhxCabHg9BI/pkJfijGkQ0jQL6fC4YFy7idaDOuaiQLsajIkkNxffFXtJFHIWFITlve2WB88e0Jw==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || 17 + react: ^17.0.2 || 17 dependencies: react: 17.0.2 dev: true @@ -11915,8 +12643,8 @@ packages: /react-static-plugin-styled-components@7.2.2(react@17.0.2)(styled-components@5.2.3): resolution: {integrity: sha512-yjZ2V5b4HLRs6ldbLmreXpXBiNU5y4IByPID/rYWe3J8NFenPMI7kbhiFlBDkUDEhJvGIpSFw3I8OCvAcm4yQg==} peerDependencies: - react: ^16.9.0 || 17 - styled-components: ^4.3.2 || 5 + react: ^17.0.2 || 17 + styled-components: ^5.2.3 || 5 dependencies: react: 17.0.2 styled-components: 5.2.3(react-dom@17.0.2)(react-is@17.0.2)(react@17.0.2) @@ -12013,7 +12741,7 @@ packages: /react-test-renderer@17.0.2(react@17.0.2): resolution: {integrity: sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==} peerDependencies: - react: 17.0.2 || 17 + react: ^17.0.2 || 17 dependencies: object-assign: 4.1.1 react: 17.0.2 @@ -12025,7 +12753,7 @@ packages: /react-universal-component@4.5.0(react@17.0.2): resolution: {integrity: sha512-dBUC6afvSAQhDcE4oh1eTmfU29W0O2eZhcGXnfGUTulXkU8ejuWqlJWXXrSMx5iV1H6LNgj2NJMj3BtBMfBNhA==} peerDependencies: - react: ^16.3.0 || ^17.0.0 || 17 + react: ^17.0.2 || 17 dependencies: hoist-non-react-statics: 3.3.2 prop-types: 15.8.1 @@ -12750,6 +13478,18 @@ packages: randombytes: 2.1.0 dev: true + /seroval-plugins@1.0.7(seroval@1.0.7): + resolution: {integrity: sha512-GO7TkWvodGp6buMEX9p7tNyIkbwlyuAWbI6G9Ec5bhcm7mQdu3JOK1IXbEUwb3FVzSc363GraG/wLW23NSavIw==} + engines: {node: '>=10'} + peerDependencies: + seroval: ^1.0 + dependencies: + seroval: 1.0.7 + + /seroval@1.0.7: + resolution: {integrity: sha512-n6ZMQX5q0Vn19Zq7CIKNIo7E75gPkGCFUEqDpa8jgwpYr/vScjqnQ6H09t1uIiZ0ZSK0ypEGvrYK2bhBGWsGdw==} + engines: {node: '>=10'} + /serve-handler@6.1.3: resolution: {integrity: sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==} dependencies: @@ -13088,6 +13828,26 @@ packages: smart-buffer: 4.2.0 dev: true + /solid-js@1.8.17: + resolution: {integrity: sha512-E0FkUgv9sG/gEBWkHr/2XkBluHb1fkrHywUgA6o6XolPDCJ4g1HaLmQufcBBhiF36ee40q+HpG/vCZu7fLpI3Q==} + dependencies: + csstype: 3.1.3 + seroval: 1.0.7 + seroval-plugins: 1.0.7(seroval@1.0.7) + + /solid-refresh@0.6.3(solid-js@1.8.17): + resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} + peerDependencies: + solid-js: ^1.3 + dependencies: + '@babel/generator': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/types': 7.24.0 + solid-js: 1.8.17 + transitivePeerDependencies: + - supports-color + dev: true + /sort-keys-length@1.0.1: resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} engines: {node: '>=0.10.0'} @@ -13268,6 +14028,13 @@ packages: resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + /stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 2.0.0 + dev: true + /stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} dev: true @@ -13290,6 +14057,10 @@ packages: resolution: {integrity: sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==} dev: true + /std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + dev: true + /stream-browserify@2.0.2: resolution: {integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==} dependencies: @@ -13526,9 +14297,9 @@ packages: resolution: {integrity: sha512-BlR+KrLW3NL1yhvEB+9Nu9Dt51CuOnHoxd+Hj+rYPdtyR8X11uIW9rvhpy3Dk4dXXBsiW1u5U78f00Lf/afGoA==} engines: {node: '>=10'} peerDependencies: - react: '>= 16.8.0 || 17' - react-dom: '>= 16.8.0 || 17' - react-is: '>= 16.8.0 || 17' + react: ^17.0.2 || 17 + react-dom: ^17.0.2 || 17 + react-is: ^17.0.2 || 17 dependencies: '@babel/helper-module-imports': 7.21.4 '@babel/traverse': 7.21.5(supports-color@5.5.0) @@ -13550,7 +14321,7 @@ packages: peerDependencies: '@babel/core': '*' babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || 17' + react: ^17.0.2 || 17 peerDependenciesMeta: '@babel/core': optional: true @@ -13827,16 +14598,30 @@ packages: resolution: {integrity: sha512-iyziEiyFxX4kyxSp+MtY1oCH/lvjH3PxFN8PGCDeqcZWAJ/i+9y+nL85w99PxVzrIvew/GSkSbDYtiGVa85Afg==} dev: true + /tinybench@2.8.0: + resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} + dev: true + /tinypool@0.4.0: resolution: {integrity: sha512-2ksntHOKf893wSAH4z/+JbPpi92esw8Gn9N2deXX+B0EO92hexAVI9GIZZPx7P5aYo5KULfeOSt3kMOmSOy6uA==} engines: {node: '>=14.0.0'} dev: true + /tinypool@0.5.0: + resolution: {integrity: sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==} + engines: {node: '>=14.0.0'} + dev: true + /tinyspy@2.1.0: resolution: {integrity: sha512-7eORpyqImoOvkQJCSkL0d0mB4NHHIFAy4b1u8PHdDa7SjGS2njzl6/lyGoZLm+eyYEtlUmFGE0rFj66SWxZgQQ==} engines: {node: '>=14.0.0'} dev: true + /tinyspy@2.2.1: + resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} + engines: {node: '>=14.0.0'} + dev: true + /titleize@3.0.0: resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} engines: {node: '>=12'} @@ -14139,6 +14924,10 @@ packages: resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==} dev: true + /ufo@1.5.3: + resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} + dev: true + /uglify-js@3.4.10: resolution: {integrity: sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==} engines: {node: '>=0.8.0'} @@ -14390,6 +15179,17 @@ packages: escalade: 3.1.1 picocolors: 1.0.0 + /update-browserslist-db@1.0.16(browserslist@4.23.0): + resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.23.0 + escalade: 3.1.2 + picocolors: 1.0.1 + dev: true + /update-check@1.5.2: resolution: {integrity: sha512-1TrmYLuLj/5ZovwUS7fFd1jMH3NnFDN1y1A8dboedIDt7zs/zJMo6TwwlhYKkSeEwzleeiSBV5/3c9ufAQWDaQ==} dependencies: @@ -14453,7 +15253,7 @@ packages: /use-sync-external-store@1.2.0(react@17.0.2): resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || 17 + react: ^17.0.2 || 17 dependencies: react: 17.0.2 dev: true @@ -14512,6 +15312,10 @@ packages: hasBin: true dev: true + /validate-html-nesting@1.2.2: + resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} + dev: true + /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -14588,10 +15392,54 @@ packages: - terser dev: true + /vite-node@0.32.4(@types/node@18.16.3)(terser@5.17.1): + resolution: {integrity: sha512-L2gIw+dCxO0LK14QnUMoqSYpa9XRGnTTTDjW2h19Mr+GR0EFj4vx52W41gFXfMLqpA00eK4ZjOVYo1Xk//LFEw==} + engines: {node: '>=v14.18.0'} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4(supports-color@5.5.0) + mlly: 1.7.1 + pathe: 1.1.2 + picocolors: 1.0.0 + vite: 3.2.5(@types/node@18.16.3)(terser@5.17.1) + transitivePeerDependencies: + - '@types/node' + - less + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vite-plugin-solid@2.10.2(@testing-library/jest-dom@5.17.0)(solid-js@1.8.17)(vite@3.2.5): + resolution: {integrity: sha512-AOEtwMe2baBSXMXdo+BUwECC8IFHcKS6WQV/1NEd+Q7vHPap5fmIhLcAzr+DUJ04/KHx/1UBU0l1/GWP+rMAPQ==} + peerDependencies: + '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* + solid-js: ^1.7.2 + vite: ^3.2.4 + peerDependenciesMeta: + '@testing-library/jest-dom': + optional: true + dependencies: + '@babel/core': 7.24.7 + '@testing-library/jest-dom': 5.17.0 + '@types/babel__core': 7.20.5 + babel-preset-solid: 1.8.17(@babel/core@7.24.7) + merge-anything: 5.1.7 + solid-js: 1.8.17 + solid-refresh: 0.6.3(solid-js@1.8.17) + vite: 3.2.5(@types/node@18.16.3)(terser@5.17.1) + vitefu: 0.2.5(vite@3.2.5) + transitivePeerDependencies: + - supports-color + dev: true + /vite-tsconfig-paths@4.2.0(typescript@5.1.6)(vite@3.2.5): resolution: {integrity: sha512-jGpus0eUy5qbbMVGiTxCL1iB9ZGN6Bd37VGLJU39kTDD6ZfULTTb1bcc5IeTWqWJKiWV5YihCaibeASPiGi8kw==} peerDependencies: - vite: '*' + vite: ^3.2.4 peerDependenciesMeta: vite: optional: true @@ -14640,6 +15488,17 @@ packages: fsevents: 2.3.3 dev: true + /vitefu@0.2.5(vite@3.2.5): + resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} + peerDependencies: + vite: ^3.2.4 + peerDependenciesMeta: + vite: + optional: true + dependencies: + vite: 3.2.5(@types/node@18.16.3)(terser@5.17.1) + dev: true + /vitest@0.30.1(jsdom@21.1.1)(terser@5.17.1): resolution: {integrity: sha512-y35WTrSTlTxfMLttgQk4rHcaDkbHQwDP++SNwPb+7H8yb13Q3cu2EixrtHzF27iZ8v0XCciSsLg00RkPAzB/aA==} engines: {node: '>=v14.18.0'} @@ -14707,6 +15566,71 @@ packages: - terser dev: true + /vitest@0.32.4(jsdom@22.1.0)(terser@5.17.1): + resolution: {integrity: sha512-3czFm8RnrsWwIzVDu/Ca48Y/M+qh3vOnF16czJm98Q/AN1y3B6PBsyV8Re91Ty5s7txKNjEhpgtGPcfdbh2MZg==} + engines: {node: '>=v14.18.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + playwright: '*' + safaridriver: '*' + webdriverio: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + dependencies: + '@types/chai': 4.3.16 + '@types/chai-subset': 1.3.3 + '@types/node': 18.16.3 + '@vitest/expect': 0.32.4 + '@vitest/runner': 0.32.4 + '@vitest/snapshot': 0.32.4 + '@vitest/spy': 0.32.4 + '@vitest/utils': 0.32.4 + acorn: 8.10.0 + acorn-walk: 8.2.0 + cac: 6.7.14 + chai: 4.3.7 + debug: 4.3.4(supports-color@5.5.0) + jsdom: 22.1.0 + local-pkg: 0.4.3 + magic-string: 0.30.0 + pathe: 1.1.2 + picocolors: 1.0.0 + std-env: 3.7.0 + strip-literal: 1.0.1 + tinybench: 2.8.0 + tinypool: 0.5.0 + vite: 3.2.5(@types/node@18.16.3)(terser@5.17.1) + vite-node: 0.32.4(@types/node@18.16.3)(terser@5.17.1) + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} @@ -14871,7 +15795,7 @@ packages: /webpack-flush-chunks@2.0.3(react@17.0.2): resolution: {integrity: sha512-CXGOyXG5YjjxyI+Qyt3VlI//JX92UmGRNP65zN3o9CIntEzfzc1J30YTKRRvF1JsE/iEzbnp5u99yCkL9obotQ==} peerDependencies: - react: '*' + react: ^17.0.2 || 17 dependencies: react: 17.0.2 From bdeff4963a3b79c946cb0d7b506145105a4b2b83 Mon Sep 17 00:00:00 2001 From: nvos Date: Wed, 19 Jul 2023 22:14:56 +0200 Subject: [PATCH 02/20] feat(solid): Add createMutation --- .../solid-urql/src/createMutation.test.ts | 78 +++++++++++++++++++ packages/solid-urql/src/createMutation.ts | 70 +++++++++++++++++ 2 files changed, 148 insertions(+) create mode 100644 packages/solid-urql/src/createMutation.test.ts create mode 100644 packages/solid-urql/src/createMutation.ts diff --git a/packages/solid-urql/src/createMutation.test.ts b/packages/solid-urql/src/createMutation.test.ts new file mode 100644 index 0000000000..2480d5b3d6 --- /dev/null +++ b/packages/solid-urql/src/createMutation.test.ts @@ -0,0 +1,78 @@ +import { renderHook } from '@solidjs/testing-library'; +import { expect, it, describe, vi } from 'vitest'; +import { createMutation } from './createMutation'; +import { + OperationResult, + OperationResultSource, + createClient, + gql, +} from '@urql/core'; +import { makeSubject } from 'wonka'; + +const QUERY = gql` + mutation { + test + } +`; + +const client = createClient({ + url: '/graphql', + exchanges: [], + suspense: false, +}); +vi.mock('./context', () => { + const useClient = () => { + return client!; + }; + + return { useClient }; +}); + +describe('createMutation', () => { + it.only('should have expected state before and after finish', async () => { + const subject = makeSubject(); + const clientMutation = vi + .spyOn(client, 'executeMutation') + .mockImplementation( + () => subject.source as OperationResultSource + ); + + const { result } = renderHook(() => + createMutation<{ test: boolean }, { variable: number }>(QUERY) + ); + + expect(result[0]).toMatchObject({ + data: undefined, + stale: false, + fetching: false, + error: undefined, + extensions: undefined, + operation: undefined, + }); + + const promise = result[1]({ variable: 1 }); + + expect(result[0]).toMatchObject({ + data: undefined, + stale: false, + fetching: true, + error: undefined, + extensions: undefined, + operation: undefined, + }); + + expect(clientMutation).toHaveBeenCalledTimes(1); + + subject.next({ data: { test: true }, stale: false }); + await promise.then(got => { + expect(got.stale).toBe(false); + expect(got.error).toBe(undefined); + expect(got.data).toEqual({ test: true }); + }); + + expect(result[0].fetching).toBe(false); + expect(result[0].stale).toBe(false); + expect(result[0].error).toBe(undefined); + expect(result[0].data).toEqual({ test: true }); + }); +}); diff --git a/packages/solid-urql/src/createMutation.ts b/packages/solid-urql/src/createMutation.ts new file mode 100644 index 0000000000..7e581d1240 --- /dev/null +++ b/packages/solid-urql/src/createMutation.ts @@ -0,0 +1,70 @@ +import { createStore } from 'solid-js/store'; +import { + createRequest, + type AnyVariables, + type DocumentInput, + OperationContext, + CombinedError, + Operation, +} from '@urql/core'; +import { useClient } from './context'; +import { pipe, onPush, filter, take, toPromise } from 'wonka'; + +export type CreateMutationState< + Data = any, + Variables extends AnyVariables = AnyVariables +> = { + fetching: boolean; + stale: boolean; + data?: Data; + error?: CombinedError; + extensions?: Record; + operation?: Operation; +}; + +export const createMutation = < + Data = any, + Variables extends AnyVariables = AnyVariables +>( + query: DocumentInput +) => { + const client = useClient(); + const initialResult: CreateMutationState = { + operation: undefined, + fetching: false, + stale: false, + data: undefined, + error: undefined, + extensions: undefined, + }; + + const [state, setState] = + createStore>(initialResult); + + const execute = ( + variables: Variables, + context?: Partial + ) => { + setState({ ...initialResult, fetching: true }); + + const request = createRequest(query, variables); + return pipe( + client.executeMutation(request, context ?? {}), + onPush(result => { + setState({ + fetching: false, + stale: result.stale, + data: result.data, + error: result.error, + extensions: result.extensions, + operation: result.operation, + }); + }), + filter(result => !result.hasNext), + take(1), + toPromise + ); + }; + + return [state, execute] as const; +}; From 4ab09ef3cedf224a8e3ef85e9c45eac6ae025c6b Mon Sep 17 00:00:00 2001 From: nvos Date: Sun, 23 Jul 2023 00:00:03 +0200 Subject: [PATCH 03/20] feat(solid): Add createSubscription --- .../solid-urql/src/createMutation.test.ts | 2 +- .../solid-urql/src/createSubscription.test.ts | 81 +++++++++ packages/solid-urql/src/createSubscription.ts | 156 ++++++++++++++++++ 3 files changed, 238 insertions(+), 1 deletion(-) create mode 100644 packages/solid-urql/src/createSubscription.test.ts create mode 100644 packages/solid-urql/src/createSubscription.ts diff --git a/packages/solid-urql/src/createMutation.test.ts b/packages/solid-urql/src/createMutation.test.ts index 2480d5b3d6..492a7214de 100644 --- a/packages/solid-urql/src/createMutation.test.ts +++ b/packages/solid-urql/src/createMutation.test.ts @@ -29,7 +29,7 @@ vi.mock('./context', () => { }); describe('createMutation', () => { - it.only('should have expected state before and after finish', async () => { + it('should have expected state before and after finish', async () => { const subject = makeSubject(); const clientMutation = vi .spyOn(client, 'executeMutation') diff --git a/packages/solid-urql/src/createSubscription.test.ts b/packages/solid-urql/src/createSubscription.test.ts new file mode 100644 index 0000000000..c085df23f7 --- /dev/null +++ b/packages/solid-urql/src/createSubscription.test.ts @@ -0,0 +1,81 @@ +import { renderHook } from '@solidjs/testing-library'; +import { + OperationResult, + OperationResultSource, + createClient, + createRequest, + gql, +} from '@urql/core'; +import { expect, it, describe, vi } from 'vitest'; +import { makeSubject } from 'wonka'; +import { createSubscription } from './createSubscription'; + +const QUERY = gql` + subscription { + value + } +`; + +const client = createClient({ + url: '/graphql', + exchanges: [], + suspense: false, +}); +vi.mock('./context', () => { + const useClient = () => { + return client!; + }; + + return { useClient }; +}); + +describe('createSubscription', () => { + it.only('should receive data', async () => { + const subject = + makeSubject, 'data'>>(); + const executeQuery = vi + .spyOn(client, 'executeSubscription') + .mockImplementation( + () => subject.source as OperationResultSource + ); + + const request = createRequest(QUERY, undefined); + const operation = client.createRequestOperation('subscription', request); + + const { result } = renderHook(() => + createSubscription<{ value: number }, { variable: number }>({ + query: QUERY, + }) + ); + + expect(result[0]).toMatchObject({ + data: undefined, + stale: false, + fetching: true, + operation: operation, + error: undefined, + extensions: undefined, + }); + expect(result[1]).toEqual(expect.any(Function)); + + expect(executeQuery).toHaveBeenCalledOnce(); + expect(client.executeSubscription).toBeCalledWith( + { + key: expect.any(Number), + query: expect.any(Object), + variables: {}, + }, + undefined + ); + + subject.next({ data: { value: 0 } }); + expect(result[0].data).toEqual({ value: 0 }); + + subject.next({ data: { value: 1 } }); + expect(result[0].data).toEqual({ value: 1 }); + + subject.complete(); + expect(result[0].fetching).toBe(false); + expect(result[0].data).toEqual({ value: 1 }); + }); +}); diff --git a/packages/solid-urql/src/createSubscription.ts b/packages/solid-urql/src/createSubscription.ts new file mode 100644 index 0000000000..da24b74b54 --- /dev/null +++ b/packages/solid-urql/src/createSubscription.ts @@ -0,0 +1,156 @@ +import { MaybeAccessor, asAccessor } from '@solid-primitives/utils'; +import { + type AnyVariables, + type DocumentInput, + type Operation, + type OperationContext, + CombinedError, + createRequest, + OperationResult, + OperationResultSource, +} from '@urql/core'; +import { useClient } from './context'; +import { createStore } from 'solid-js/store'; +import { createComputed, onCleanup } from 'solid-js'; +import { + concat, + fromValue, + makeSubject, + map, + pipe, + scan, + subscribe, + switchMap, +} from 'wonka'; + +type CreateSubscriptionArgs< + Data, + Variables extends AnyVariables = AnyVariables +> = { + query: DocumentInput; + variables?: MaybeAccessor; + context?: MaybeAccessor>; + pause?: MaybeAccessor; +}; + +type CreateSubscriptionState< + Data = any, + Variables extends AnyVariables = AnyVariables +> = { + fetching: boolean; + stale: boolean; + data?: Data; + error?: CombinedError; + extensions?: Record; + operation?: Operation; +}; + +export type SubscriptionHandler = (prev: R | undefined, data: T) => R; + +export const createSubscription = < + Data, + Result = Data, + Variables extends AnyVariables = AnyVariables +>( + args: CreateSubscriptionArgs, + handler?: SubscriptionHandler +) => { + const getContext = asAccessor(args.context), + getPause = asAccessor(args.pause), + getVariables = asAccessor(args.variables); + + const client = useClient(); + + const request = createRequest(args.query, getVariables() as Variables); + const operation = client.createRequestOperation( + 'subscription', + request, + getContext() + ); + const initialState: CreateSubscriptionState = { + operation, + fetching: false, + data: undefined, + error: undefined, + extensions: undefined, + stale: false, + }; + + const operationSubject = makeSubject< + OperationResultSource> | undefined + >(); + const [state, setState] = + createStore>(initialState); + + const sub = pipe( + operationSubject.source, + switchMap(subscription$ => { + if (subscription$ === undefined) { + return fromValue({ fetching: false }); + } + + return concat([ + fromValue({ fetching: true, stale: false }), + pipe( + subscription$, + map(it => ({ + fetching: true, + stale: !!it.stale, + data: it.data, + error: it.error, + extensions: it.extensions, + operation: it.operation, + })) + ), + fromValue({ fetching: false, stale: false }), + ]); + }), + scan((result: CreateSubscriptionState, partial: any) => { + const data = + partial.data !== undefined + ? typeof handler === 'function' + ? handler(result.data, partial.data) + : partial.data + : result.data; + + return { + ...result, + ...partial, + data: data, + }; + }, initialState), + subscribe(result => { + setState(result); + }) + ); + + onCleanup(() => { + sub.unsubscribe(); + }); + + createComputed(() => { + if (getPause() === true) { + operationSubject.next(undefined); + return; + } + + const ctx = getContext(); + const req = createRequest(args.query, getVariables() as Variables); + operationSubject.next( + client.executeSubscription(req, ctx) + ); + }); + + const execute = (opts?: Partial) => { + const ctx = getContext(); + const req = createRequest(args.query, getVariables() as Variables); + operationSubject.next( + client.executeSubscription(req, { + ...ctx, + ...opts, + }) + ); + }; + + return [state, execute] as const; +}; From 83f34ce4e1d890b4f9d15f3cc136c8b5bd3b233d Mon Sep 17 00:00:00 2001 From: nvos Date: Sun, 23 Jul 2023 00:43:50 +0200 Subject: [PATCH 04/20] feat(solid): Add more createSubscription tests --- packages/solid-urql/src/createQuery.test.tsx | 28 ++++---- .../solid-urql/src/createSubscription.test.ts | 71 ++++++++++++++++++- 2 files changed, 83 insertions(+), 16 deletions(-) diff --git a/packages/solid-urql/src/createQuery.test.tsx b/packages/solid-urql/src/createQuery.test.tsx index 4fca4ba32c..d1b3b8c552 100644 --- a/packages/solid-urql/src/createQuery.test.tsx +++ b/packages/solid-urql/src/createQuery.test.tsx @@ -37,7 +37,7 @@ const App = (props: AppProps) => { return ( loading}> - {resource.data?.test} + {data => {data().test}} - - ); -}; - describe('createQuery', () => { - it('should not suspend', async () => { - const subject = - makeSubject, 'data'>>(); - vi.spyOn(client, 'executeQuery').mockImplementation( - () => subject.source as OperationResultSource - ); - - const { findByTestId } = render(() => ); - - subject.next({ data: { test: true } }); - waitFor(async () => - expect((await findByTestId('value')).innerText).toStrictEqual('true') - ); - - const refetch = await findByTestId('refetch'); - refetch.click(); - - subject.next({ data: { test: true } }); - waitFor(async () => - expect((await findByTestId('value')).innerText).toStrictEqual('true') - ); - }); - - it('should suspend', async () => { - const subject = - makeSubject, 'data'>>(); - vi.spyOn(client, 'executeQuery').mockImplementation( - () => subject.source as OperationResultSource - ); - - const { findByTestId } = render(() => ); - - expect(await findByTestId('loading')).not.toBeFalsy(); - subject.next({ data: { test: true } }); - expect(await findByTestId('value')).not.toBeFalsy(); - - const refetch = await findByTestId('refetch'); - refetch.click(); - - expect(await findByTestId('loading')).not.toBeFalsy(); - subject.next({ data: { test: true } }); - expect(await findByTestId('value')).not.toBeFalsy(); - }); - it('should persist pause after refetch when variable changes', async () => { const subject = makeSubject, 'data'>>(); @@ -272,6 +200,6 @@ describe('createQuery', () => { ); cleanup(); - waitFor(() => expect(result[0].fetching).toEqual(false)); + await waitFor(() => expect(result[0].fetching).toEqual(false)); }); }); diff --git a/packages/solid-urql/src/createQuery.ts b/packages/solid-urql/src/createQuery.ts index c18d112163..2353462d46 100644 --- a/packages/solid-urql/src/createQuery.ts +++ b/packages/solid-urql/src/createQuery.ts @@ -171,7 +171,7 @@ export const createQuery = < Variables extends AnyVariables = AnyVariables, >( args: CreateQueryArgs -): CreateQueryResult => { +): CreateQueryResult => { const client = useClient(); const getContext = asAccessor(args.context); const getPause = asAccessor(args.pause); diff --git a/packages/solid-urql/src/createSubscription.test.ts b/packages/solid-urql/src/createSubscription.test.ts index a63ff29e80..1c8194fc01 100644 --- a/packages/solid-urql/src/createSubscription.test.ts +++ b/packages/solid-urql/src/createSubscription.test.ts @@ -1,4 +1,4 @@ -import { renderHook, waitFor } from '@solidjs/testing-library'; +import { renderHook, testEffect } from '@solidjs/testing-library'; import { OperationResult, OperationResultSource, @@ -8,8 +8,11 @@ import { } from '@urql/core'; import { expect, it, describe, vi } from 'vitest'; import { makeSubject } from 'wonka'; -import { createSubscription } from './createSubscription'; -import { createSignal } from 'solid-js'; +import { + CreateSubscriptionState, + createSubscription, +} from './createSubscription'; +import { createEffect, createSignal } from 'solid-js'; const QUERY = gql` subscription { @@ -22,6 +25,7 @@ const client = createClient({ exchanges: [], suspense: false, }); + vi.mock('./context', () => { const useClient = () => { return client!; @@ -30,57 +34,89 @@ vi.mock('./context', () => { return { useClient }; }); +// Given that it is not possible to directly listen to all store changes it is necessary +// to access all relevant parts on which `createEffect` should listen on +const markStateDependencies = (state: CreateSubscriptionState) => { + state.data; + state.error; + state.extensions; + state.fetching; + state.operation; + state.stale; +}; + describe('createSubscription', () => { - it('should receive data', async () => { - const subject = - makeSubject, 'data'>>(); - const executeQuery = vi - .spyOn(client, 'executeSubscription') - .mockImplementation( - () => subject.source as OperationResultSource - ); + it('should receive data', () => { + return testEffect(done => { + const subject = + makeSubject, 'data'>>(); + const executeQuery = vi + .spyOn(client, 'executeSubscription') + .mockImplementation( + () => subject.source as OperationResultSource + ); - const request = createRequest(QUERY, undefined); - const operation = client.createRequestOperation('subscription', request); + const request = createRequest(QUERY, undefined); + const operation = client.createRequestOperation('subscription', request); - const { result } = renderHook(() => - createSubscription<{ value: number }, { variable: number }>({ + const [state] = createSubscription< + { value: number }, + { value: number }, + { variable: number } + >({ query: QUERY, - }) - ); - - expect(result[0]).toMatchObject({ - data: undefined, - stale: false, - fetching: true, - operation: operation, - error: undefined, - extensions: undefined, - }); - expect(result[1]).toEqual(expect.any(Function)); - - expect(executeQuery).toHaveBeenCalledOnce(); - expect(client.executeSubscription).toBeCalledWith( - { - key: expect.any(Number), - query: expect.any(Object), - variables: {}, - }, - undefined - ); + }); - subject.next({ data: { value: 0 } }); - expect(result[0].data).toEqual({ value: 0 }); + createEffect((run: number = 0) => { + markStateDependencies(state); - subject.next({ data: { value: 1 } }); - expect(result[0].data).toEqual({ value: 1 }); + switch (run) { + case 0: { + expect(state).toMatchObject({ + data: undefined, + stale: false, + operation: operation, + error: undefined, + extensions: undefined, + fetching: true, + }); + expect(executeQuery).toEqual(expect.any(Function)); + expect(executeQuery).toHaveBeenCalledOnce(); + expect(client.executeSubscription).toBeCalledWith( + { + key: expect.any(Number), + query: expect.any(Object), + variables: {}, + }, + undefined + ); + subject.next({ data: { value: 0 } }); + break; + } + case 1: { + expect(state.data).toEqual({ value: 0 }); + subject.next({ data: { value: 1 } }); + break; + } + case 2: { + expect(state.data).toEqual({ value: 1 }); + // expect(state.fetching).toEqual(true); + subject.complete(); + break; + } + case 3: { + expect(state.fetching).toEqual(false); + expect(state.data).toEqual({ value: 1 }); + done(); + } + } - subject.complete(); - expect(result[0].fetching).toBe(false); - expect(result[0].data).toEqual({ value: 1 }); + return run + 1; + }); + }); }); - it('should call handler', async () => { + it('should call handler', () => { const handler = vi.fn(); const subject = makeSubject, 'data'>>(); @@ -88,18 +124,38 @@ describe('createSubscription', () => { () => subject.source as OperationResultSource ); - renderHook(() => - createSubscription<{ value: number }, { variable: number }>( + return testEffect(done => { + const [state] = createSubscription< + { value: number }, + { value: number }, + { variable: number } + >( { query: QUERY, }, handler - ) - ); + ); + + createEffect((run: number = 0) => { + markStateDependencies(state); + switch (run) { + case 0: { + expect(state.fetching).toEqual(true); + subject.next({ data: { value: 0 } }); - waitFor(() => expect(handler).toHaveBeenCalledOnce()); - subject.next({ data: { value: 0 } }); - waitFor(() => expect(handler).toHaveBeenCalledTimes(2)); + break; + } + case 1: { + expect(handler).toHaveBeenCalledOnce(); + expect(handler).toBeCalledWith(undefined, { value: 0 }); + done(); + break; + } + } + + return run + 1; + }); + }); }); it('should unsubscribe on teardown', async () => { @@ -109,44 +165,75 @@ describe('createSubscription', () => { () => subject.source as OperationResultSource ); - const { result, cleanup } = renderHook(() => + const { + result: [state], + cleanup, + } = renderHook(() => createSubscription<{ value: number }, { variable: number }>({ query: QUERY, }) ); - expect(result[0].fetching).toEqual(true); - cleanup(); - waitFor(() => expect(result[0].fetching).toEqual(false)); + return testEffect(done => + createEffect((run: number = 0) => { + if (run === 0) { + expect(state.fetching).toEqual(true); + cleanup(); + } + + if (run === 1) { + expect(state.fetching).toEqual(false); + done(); + } + + return run + 1; + }) + ); }); it('should skip executing query when paused', async () => { const subject = makeSubject, 'data'>>(); - const executeQuery = vi - .spyOn(client, 'executeSubscription') - .mockImplementation( - () => subject.source as OperationResultSource - ); - - const [pause, setPause] = createSignal(true); - const { result } = renderHook(() => - createSubscription<{ value: number }, { variable: number }>({ - query: QUERY, - pause: pause, - }) + vi.spyOn(client, 'executeSubscription').mockImplementation( + () => subject.source as OperationResultSource ); - expect(executeQuery).not.toBeCalled(); - subject.next({ data: { value: 0 } }); - expect(result[0].data).toBeUndefined(); - setPause(false); - subject.next({ data: { value: 1 } }); - expect(executeQuery).toHaveBeenCalledOnce(); - expect(result[0].data).toStrictEqual({ value: 1 }); + return testEffect(done => { + const [pause, setPause] = createSignal(true); + + const [state] = createSubscription< + { value: number }, + { value: number }, + { variable: number } + >({ query: QUERY, pause: pause }); + + createEffect((run: number = 0) => { + switch (run) { + case 0: { + expect(state.fetching).toBe(false); + setPause(false); + break; + } + case 1: { + expect(state.fetching).toBe(true); + expect(state.data).toBeUndefined(); + subject.next({ data: { value: 1 } }); + + break; + } + case 2: { + expect(state.data).toStrictEqual({ value: 1 }); + done(); + break; + } + } + + return run + 1; + }); + }); }); - it('should override pause when execute executeSubscription', async () => { + it('should override pause when execute executeSubscription', () => { const subject = makeSubject, 'data'>>(); const executeQuery = vi @@ -155,22 +242,98 @@ describe('createSubscription', () => { () => subject.source as OperationResultSource ); - const { result } = renderHook(() => - createSubscription<{ value: number }, { variable: number }>({ + return testEffect(done => { + const [state, executeSubscription] = createSubscription< + { value: number }, + { value: number }, + { variable: number } + >({ query: QUERY, pause: true, - }) + }); + + createEffect((run: number = 0) => { + markStateDependencies(state); + + switch (run) { + case 0: { + expect(state.fetching).toEqual(false); + expect(executeQuery).not.toBeCalled(); + + executeSubscription(); + + break; + } + case 1: { + expect(state.fetching).toEqual(true); + expect(executeQuery).toHaveBeenCalledOnce(); + subject.next({ data: { value: 1 } }); + break; + } + case 2: { + expect(state.data).toStrictEqual({ value: 1 }); + done(); + break; + } + } + + return run + 1; + }); + }); + }); + + it.only('should aggregate results', () => { + const subject = + makeSubject, 'data'>>(); + vi.spyOn(client, 'executeSubscription').mockImplementation( + () => subject.source as OperationResultSource ); - expect(result[0].fetching).toEqual(false); - expect(executeQuery).not.toBeCalled(); + return testEffect(done => { + const [state] = createSubscription< + { value: number }, + { merged: number }, + { variable: number } + >( + { + query: QUERY, + }, + (prev, next) => { + if (prev === undefined) { + return { + merged: 0 + next.value, + }; + } + + return { merged: prev.merged + next.value }; + } + ); + + createEffect((run: number = 0) => { + markStateDependencies(state); + switch (run) { + case 0: { + expect(state.fetching).toEqual(true); + subject.next({ data: { value: 1 } }); - result[1](); + break; + } + case 1: { + expect(state.data).toEqual({ merged: 1 }); + subject.next({ data: { value: 2 } }); - expect(result[0].fetching).toEqual(true); - expect(executeQuery).toHaveBeenCalledOnce(); - subject.next({ data: { value: 1 } }); + break; + } + case 2: { + expect(state.data).toEqual({ merged: 3 }); - expect(result[0].data).toStrictEqual({ value: 1 }); + done(); + break; + } + } + + return run + 1; + }); + }); }); }); diff --git a/packages/solid-urql/src/suspense.test.tsx b/packages/solid-urql/src/suspense.test.tsx new file mode 100644 index 0000000000..556970a2a8 --- /dev/null +++ b/packages/solid-urql/src/suspense.test.tsx @@ -0,0 +1,132 @@ +import { describe, it, vi } from 'vitest'; +import { + OperationResult, + OperationResultSource, + createClient, +} from '@urql/core'; +import { createQuery } from './createQuery'; +import { fireEvent, render, screen, waitFor } from '@solidjs/testing-library'; +import { Provider } from './context'; +import { Suspense } from 'solid-js'; +import { makeSubject } from 'wonka'; + +describe('createQuery suspense', () => { + it('should not suspend', async () => { + const client = createClient({ + url: '/graphql', + exchanges: [], + suspense: false, + }); + + const subject = + makeSubject, 'data'>>(); + vi.spyOn(client, 'executeQuery').mockImplementation( + () => subject.source as OperationResultSource + ); + + const Page = () => { + const [state, refetch] = createQuery< + { test: boolean }, + { variable: number } + >({ + query: '{ test }', + }); + + return ( +
+
+ ); + }; + + render(() => ( + + + + + + )); + + subject.next({ data: { test: true } }); + await waitFor(() => screen.getByText('data: true')); + + fireEvent.click(screen.getByTestId('refetch')); + + subject.next({ data: { test: false } }); + await waitFor(() => screen.getByText('data: false')); + }); + + it('should suspend', async () => { + const client = createClient({ + url: '/graphql', + exchanges: [], + suspense: true, + }); + + const subject = + makeSubject, 'data'>>(); + vi.spyOn(client, 'executeQuery').mockImplementation( + () => subject.source as OperationResultSource + ); + + const Page = () => { + const [state] = createQuery<{ test: boolean }, { variable: number }>({ + query: '{ test }', + }); + + return
data: {String(state.data?.test)}
; + }; + + render(() => ( + + + + + + )); + + await waitFor(() => screen.getByText('loading')); + + subject.next({ data: { test: true } }); + await waitFor(() => screen.getByText('data: true')); + }); + + it('context suspend should override client suspend', async () => { + const client = createClient({ + url: '/graphql', + exchanges: [], + suspense: false, + }); + + const subject = + makeSubject, 'data'>>(); + vi.spyOn(client, 'executeQuery').mockImplementation( + () => subject.source as OperationResultSource + ); + + const Page = () => { + const [state] = createQuery<{ test: boolean }, { variable: number }>({ + query: '{ test }', + context: { + suspense: true, + }, + }); + + return
data: {String(state.data?.test)}
; + }; + + render(() => ( + + + + + + )); + + await waitFor(() => screen.getByText('loading')); + + subject.next({ data: { test: true } }); + await waitFor(() => screen.getByText('data: true')); + }); +}); diff --git a/packages/solid-urql/vitest.config.ts b/packages/solid-urql/vitest.config.ts index 43ca8c3dce..7c589551d1 100644 --- a/packages/solid-urql/vitest.config.ts +++ b/packages/solid-urql/vitest.config.ts @@ -1,32 +1,14 @@ -/// -/// -// 👆 do not forget to add the references above -import { resolve } from 'path'; -import { defineConfig } from 'vite'; +import { mergeConfig } from 'vite'; import solidPlugin from 'vite-plugin-solid'; -import tsconfigPaths from 'vite-tsconfig-paths'; +import rootConfig from '../../vitest.config'; +import { defineProject } from 'vitest/config'; -export default defineConfig({ - plugins: [solidPlugin(), tsconfigPaths()], - server: { - port: 3000, - }, - build: { - target: 'esnext', - }, - test: { - environment: 'jsdom', - transformMode: { web: [/\.[jt]sx?$/] }, - globals: true, - setupFiles: [resolve(__dirname, '../../scripts/vitest/setup.js')], - clearMocks: true, - exclude: [ - '**/node_modules/**', - '**/dist/**', - '**/cypress/**', - '**/e2e-tests/**', - '**/.{idea,git,cache,output,temp}/**', - '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress}.config.*', - ], - }, -}); +export default mergeConfig( + rootConfig, + defineProject({ + plugins: [solidPlugin()], + test: { + globals: true, + }, + }) +); From 65863d3edff2bb3248ef3e954b35c52656825178 Mon Sep 17 00:00:00 2001 From: nvos Date: Mon, 2 Oct 2023 19:47:43 +0200 Subject: [PATCH 17/20] test(solid): Migrate query tests to use testEffect --- packages/solid-urql/src/createQuery.test.tsx | 305 +++++++++++------- .../solid-urql/src/createSubscription.test.ts | 6 +- packages/solid-urql/vitest.config.ts | 5 +- 3 files changed, 185 insertions(+), 131 deletions(-) diff --git a/packages/solid-urql/src/createQuery.test.tsx b/packages/solid-urql/src/createQuery.test.tsx index 3e798f9a94..f02a9b69f0 100644 --- a/packages/solid-urql/src/createQuery.test.tsx +++ b/packages/solid-urql/src/createQuery.test.tsx @@ -1,11 +1,10 @@ import { expect, it, describe, vi } from 'vitest'; -import { createQuery } from './createQuery'; -import { renderHook, waitFor } from '@solidjs/testing-library'; +import { CreateQueryState, createQuery } from './createQuery'; +import { renderHook, testEffect } from '@solidjs/testing-library'; import { createClient } from '@urql/core'; -import { createSignal } from 'solid-js'; +import { createEffect, createSignal } from 'solid-js'; import { makeSubject } from 'wonka'; import { OperationResult, OperationResultSource } from '@urql/core'; -import '@testing-library/jest-dom'; const client = createClient({ url: '/graphql', @@ -21,43 +20,19 @@ vi.mock('./context', () => { return { useClient }; }); -describe('createQuery', () => { - it('should persist pause after refetch when variable changes', async () => { - const subject = - makeSubject, 'data'>>(); - const executeQuery = vi - .spyOn(client, 'executeQuery') - .mockImplementation( - () => subject.source as OperationResultSource - ); - - const [variable, setVariable] = createSignal(1); - - const { result } = renderHook(() => - createQuery<{ variable: number }>({ - query: '{ test }', - pause: true, - variables: () => ({ - variable: variable(), - }), - }) - ); - - expect(result[0].fetching).toEqual(false); - - result[1](); - - expect(result[0].fetching).toEqual(true); - subject.next({ data: { test: true } }); - expect(result[0].fetching).toEqual(false); - expect(executeQuery).toHaveBeenCalledTimes(1); +// Given that it is not possible to directly listen to all store changes it is necessary +// to access all relevant parts on which `createEffect` should listen on +const markStateDependencies = (state: CreateQueryState) => { + state.data; + state.error; + state.extensions; + state.fetching; + state.operation; + state.stale; +}; - setVariable(2); - expect(result[0].fetching).toEqual(false); - expect(executeQuery).toHaveBeenCalledTimes(1); - }); - - it('should not refetch when paused on variable change', async () => { +describe('createQuery', () => { + it('should fetch when query is resumed', () => { const subject = makeSubject, 'data'>>(); const executeQuery = vi @@ -66,39 +41,43 @@ describe('createQuery', () => { () => subject.source as OperationResultSource ); - const [variable, setVariable] = createSignal(1); - const [pause, setPause] = createSignal(false); - - const { result } = renderHook(() => - createQuery<{ variable: number }>({ + return testEffect(done => { + const [pause, setPause] = createSignal(true); + const [state] = createQuery<{ test: boolean }, { variable: number }>({ query: '{ test }', pause: pause, - variables: () => ({ - variable: variable(), - }), - }) - ); - - expect(result[0].fetching).toEqual(true); - subject.next({ data: { test: true } }); - expect(result[0].fetching).toEqual(false); - - setVariable(2); - - expect(result[0].fetching).toEqual(true); - subject.next({ data: { test: true } }); - expect(result[0].fetching).toEqual(false); - - expect(executeQuery).toHaveBeenCalledTimes(2); - - setPause(true); - setVariable(3); - - expect(result[0].fetching).toEqual(false); - expect(executeQuery).toHaveBeenCalledTimes(2); + }); + + createEffect((run: number = 0) => { + markStateDependencies(state); + + switch (run) { + case 0: { + expect(state.fetching).toEqual(false); + expect(executeQuery).not.toHaveBeenCalled(); + setPause(false); + break; + } + case 1: { + expect(state.fetching).toEqual(true); + expect(executeQuery).toHaveBeenCalledOnce(); + subject.next({ data: { test: true } }); + break; + } + case 2: { + expect(state.fetching).toEqual(false); + expect(state.data).toStrictEqual({ test: true }); + done(); + break; + } + } + + return run + 1; + }); + }); }); - it('should override pause when execute via refetch', async () => { + it('should override pause when execute via refetch', () => { const subject = makeSubject, 'data'>>(); const executeQuery = vi @@ -107,27 +86,45 @@ describe('createQuery', () => { () => subject.source as OperationResultSource ); - const { result } = renderHook(() => - createQuery<{ variable: number }>({ + return testEffect(done => { + const [state, refetch] = createQuery< + { test: boolean }, + { variable: number } + >({ query: '{ test }', pause: true, - }) - ); - - expect(result[0].fetching).toEqual(false); - expect(executeQuery).not.toBeCalled(); - - result[1](); // refetch function - - expect(result[0].fetching).toEqual(true); - expect(executeQuery).toHaveBeenCalledOnce(); - subject.next({ data: { test: true } }); - - expect(result[0].fetching).toEqual(false); - expect(result[0].data).toStrictEqual({ test: true }); + }); + + createEffect((run: number = 0) => { + markStateDependencies(state); + + switch (run) { + case 0: { + expect(state.fetching).toEqual(false); + expect(executeQuery).not.toBeCalled(); + refetch(); + break; + } + case 1: { + expect(state.fetching).toEqual(true); + expect(executeQuery).toHaveBeenCalledOnce(); + subject.next({ data: { test: true } }); + break; + } + case 2: { + expect(state.fetching).toEqual(false); + expect(state.data).toStrictEqual({ test: true }); + done(); + break; + } + } + + return run + 1; + }); + }); }); - it('should trigger refetch on variables change', async () => { + it('should trigger refetch on variables change', () => { const subject = makeSubject, 'data'>>(); const executeQuery = vi @@ -136,32 +133,54 @@ describe('createQuery', () => { () => subject.source as OperationResultSource ); - const [variables, setVariables] = createSignal<{ variable: number }>({ - variable: 1, - }); + return testEffect(done => { + const [variables, setVariables] = createSignal<{ variable: number }>({ + variable: 1, + }); - const { result } = renderHook(() => - createQuery<{ test: boolean }, { variable: number }>({ + const [state] = createQuery<{ test: boolean }, { variable: number }>({ query: '{ test }', variables: variables, - }) - ); - - expect(result[0].fetching).toEqual(true); - subject.next({ data: { test: true } }); - expect(result[0].fetching).toEqual(false); - expect(result[0].data?.test).toEqual(true); - setVariables({ variable: 2 }); - - expect(result[0].fetching).toEqual(true); - expect(executeQuery).toHaveBeenCalledTimes(2); - - subject.next({ data: { test: false } }); - expect(result[0].fetching).toEqual(false); - expect(result[0].data?.test).toEqual(false); + }); + + createEffect((run: number = 0) => { + markStateDependencies(state); + + switch (run) { + case 0: { + expect(state.fetching).toEqual(true); + + subject.next({ data: { test: true } }); + + break; + } + case 1: { + expect(state.fetching).toEqual(false); + expect(state.data).toEqual({ test: true }); + setVariables({ variable: 2 }); + break; + } + case 2: { + expect(state.fetching).toEqual(true); + expect(executeQuery).toHaveBeenCalledTimes(2); + + subject.next({ data: { test: false } }); + break; + } + case 3: { + expect(state.fetching).toEqual(false); + expect(state.data).toEqual({ test: false }); + done(); + break; + } + } + + return run + 1; + }); + }); }); - it('should receive data', async () => { + it('should receive data', () => { const subject = makeSubject, 'data'>>(); const executeQuery = vi @@ -170,36 +189,72 @@ describe('createQuery', () => { () => subject.source as OperationResultSource ); - const { result } = renderHook(() => - createQuery<{ variable: number }, { test: boolean }>({ + return testEffect(done => { + const [state] = createQuery<{ test: boolean }, { variable: number }>({ query: '{ test }', - }) - ); - - expect(result[0].fetching).toEqual(true); - expect(result[0].data).toBeUndefined(); - - subject.next({ data: { test: true } }); - - expect(result[0].fetching).toEqual(false); - expect(result[0].data).toStrictEqual({ test: true }); - expect(executeQuery).toHaveBeenCalledTimes(1); + }); + + createEffect((run: number = 0) => { + markStateDependencies(state); + + switch (run) { + case 0: { + expect(state.fetching).toEqual(true); + expect(state.data).toBeUndefined(); + + subject.next({ data: { test: true } }); + break; + } + + case 1: { + expect(state.fetching).toEqual(false); + expect(state.data).toStrictEqual({ test: true }); + expect(executeQuery).toHaveBeenCalledTimes(1); + done(); + break; + } + } + + return run + 1; + }); + }); }); - it('should unsubscribe on teardown', async () => { + it('should unsubscribe on teardown', () => { const subject = makeSubject, 'data'>>(); vi.spyOn(client, 'executeQuery').mockImplementation( () => subject.source as OperationResultSource ); - const { result, cleanup } = renderHook(() => - createQuery<{ value: number }, { variable: number }>({ + const { + result: [state], + cleanup, + } = renderHook(() => + createQuery<{ test: number }, { variable: number }>({ query: '{ test }', }) ); - cleanup(); - await waitFor(() => expect(result[0].fetching).toEqual(false)); + return testEffect(done => { + markStateDependencies(state); + + createEffect((run: number = 0) => { + switch (run) { + case 0: { + expect(state.fetching).toEqual(true); + cleanup(); + break; + } + case 1: { + expect(state.fetching).toEqual(false); + done(); + break; + } + } + + return run + 1; + }); + }); }); }); diff --git a/packages/solid-urql/src/createSubscription.test.ts b/packages/solid-urql/src/createSubscription.test.ts index 1c8194fc01..74bf3d4429 100644 --- a/packages/solid-urql/src/createSubscription.test.ts +++ b/packages/solid-urql/src/createSubscription.test.ts @@ -158,7 +158,7 @@ describe('createSubscription', () => { }); }); - it('should unsubscribe on teardown', async () => { + it('should unsubscribe on teardown', () => { const subject = makeSubject, 'data'>>(); vi.spyOn(client, 'executeSubscription').mockImplementation( @@ -191,7 +191,7 @@ describe('createSubscription', () => { ); }); - it('should skip executing query when paused', async () => { + it('should skip executing query when paused', () => { const subject = makeSubject, 'data'>>(); vi.spyOn(client, 'executeSubscription').mockImplementation( @@ -282,7 +282,7 @@ describe('createSubscription', () => { }); }); - it.only('should aggregate results', () => { + it('should aggregate results', () => { const subject = makeSubject, 'data'>>(); vi.spyOn(client, 'executeSubscription').mockImplementation( diff --git a/packages/solid-urql/vitest.config.ts b/packages/solid-urql/vitest.config.ts index 7c589551d1..d28545e0dc 100644 --- a/packages/solid-urql/vitest.config.ts +++ b/packages/solid-urql/vitest.config.ts @@ -1,11 +1,10 @@ -import { mergeConfig } from 'vite'; +import { defineConfig, mergeConfig } from 'vite'; import solidPlugin from 'vite-plugin-solid'; import rootConfig from '../../vitest.config'; -import { defineProject } from 'vitest/config'; export default mergeConfig( rootConfig, - defineProject({ + defineConfig({ plugins: [solidPlugin()], test: { globals: true, From 3cb3af206268446f2fa5e999fe44516e5f8d298b Mon Sep 17 00:00:00 2001 From: Stefan Maric Date: Sun, 9 Jun 2024 12:32:29 +0200 Subject: [PATCH 18/20] Add per-package vitest config and test script --- exchanges/auth/package.json | 5 +- exchanges/auth/vitest.config.ts | 4 + exchanges/context/package.json | 5 +- exchanges/context/vitest.config.ts | 4 + exchanges/execute/package.json | 5 +- exchanges/execute/vitest.config.ts | 4 + exchanges/graphcache/package.json | 5 +- exchanges/graphcache/vitest.config.ts | 4 + exchanges/persisted/package.json | 5 +- exchanges/persisted/vitest.config.ts | 4 + exchanges/populate/package.json | 5 +- exchanges/populate/vitest.config.ts | 4 + exchanges/refocus/package.json | 7 +- exchanges/refocus/vitest.config.ts | 4 + exchanges/request-policy/package.json | 5 +- exchanges/request-policy/vitest.config.ts | 4 + exchanges/retry/package.json | 5 +- exchanges/retry/vitest.config.ts | 4 + package.json | 2 +- packages/core/package.json | 5 +- packages/core/vitest.config.ts | 4 + packages/introspection/package.json | 2 - packages/next-urql/vitest.config.ts | 4 + packages/preact-urql/package.json | 7 +- packages/preact-urql/vitest.config.ts | 4 + packages/react-urql/package.json | 5 +- packages/react-urql/vitest.config.ts | 4 + packages/solid-urql/package.json | 3 +- .../solid-urql/src/createMutation.test.ts | 2 + packages/solid-urql/src/createQuery.test.tsx | 2 + .../solid-urql/src/createSubscription.test.ts | 2 + packages/solid-urql/src/suspense.test.tsx | 2 + packages/solid-urql/vitest.config.ts | 16 +- packages/storage-rn/package.json | 9 +- packages/storage-rn/vitest.config.ts | 4 + packages/svelte-urql/package.json | 5 +- packages/svelte-urql/vitest.config.ts | 4 + packages/vue-urql/package.json | 3 +- packages/vue-urql/vitest.config.ts | 4 + pnpm-lock.yaml | 357 ++++-------------- vitest.config.ts | 1 + 41 files changed, 196 insertions(+), 338 deletions(-) create mode 100644 exchanges/auth/vitest.config.ts create mode 100644 exchanges/context/vitest.config.ts create mode 100644 exchanges/execute/vitest.config.ts create mode 100644 exchanges/graphcache/vitest.config.ts create mode 100644 exchanges/persisted/vitest.config.ts create mode 100644 exchanges/populate/vitest.config.ts create mode 100644 exchanges/refocus/vitest.config.ts create mode 100644 exchanges/request-policy/vitest.config.ts create mode 100644 exchanges/retry/vitest.config.ts create mode 100644 packages/core/vitest.config.ts create mode 100644 packages/next-urql/vitest.config.ts create mode 100644 packages/preact-urql/vitest.config.ts create mode 100644 packages/react-urql/vitest.config.ts create mode 100644 packages/storage-rn/vitest.config.ts create mode 100644 packages/svelte-urql/vitest.config.ts create mode 100644 packages/vue-urql/vitest.config.ts diff --git a/exchanges/auth/package.json b/exchanges/auth/package.json index bb9ef542d0..e5588eb4e3 100644 --- a/exchanges/auth/package.json +++ b/exchanges/auth/package.json @@ -40,7 +40,7 @@ "dist/" ], "scripts": { - "test": "vitest --config ../../vitest.config.ts", + "test": "vitest", "clean": "rimraf dist extras", "check": "tsc --noEmit", "lint": "eslint --ext=js,jsx,ts,tsx .", @@ -57,7 +57,8 @@ }, "devDependencies": { "@urql/core": "workspace:*", - "graphql": "^16.0.0" + "graphql": "^16.0.0", + "vitest": "^0.30.1" }, "publishConfig": { "access": "public", diff --git a/exchanges/auth/vitest.config.ts b/exchanges/auth/vitest.config.ts new file mode 100644 index 0000000000..6561524839 --- /dev/null +++ b/exchanges/auth/vitest.config.ts @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import baseConfig from '../../vitest.config'; + +export default mergeConfig(baseConfig, {}); diff --git a/exchanges/context/package.json b/exchanges/context/package.json index 3b3ae0b659..b917caf54c 100644 --- a/exchanges/context/package.json +++ b/exchanges/context/package.json @@ -39,7 +39,7 @@ "dist/" ], "scripts": { - "test": "vitest --config ../../vitest.config.ts", + "test": "vitest", "clean": "rimraf dist extras", "check": "tsc --noEmit", "lint": "eslint --ext=js,jsx,ts,tsx .", @@ -56,7 +56,8 @@ }, "devDependencies": { "@urql/core": "workspace:*", - "graphql": "^16.0.0" + "graphql": "^16.0.0", + "vitest": "^0.30.1" }, "publishConfig": { "access": "public", diff --git a/exchanges/context/vitest.config.ts b/exchanges/context/vitest.config.ts new file mode 100644 index 0000000000..6561524839 --- /dev/null +++ b/exchanges/context/vitest.config.ts @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import baseConfig from '../../vitest.config'; + +export default mergeConfig(baseConfig, {}); diff --git a/exchanges/execute/package.json b/exchanges/execute/package.json index 963276da6b..a363a5dfd6 100644 --- a/exchanges/execute/package.json +++ b/exchanges/execute/package.json @@ -40,7 +40,7 @@ "dist/" ], "scripts": { - "test": "vitest --config ../../vitest.config.ts", + "test": "vitest", "clean": "rimraf dist extras", "check": "tsc --noEmit", "lint": "eslint --ext=js,jsx,ts,tsx .", @@ -58,7 +58,8 @@ }, "devDependencies": { "@urql/core": "workspace:*", - "graphql": "^16.0.0" + "graphql": "^16.0.0", + "vitest": "^0.30.1" }, "publishConfig": { "access": "public", diff --git a/exchanges/execute/vitest.config.ts b/exchanges/execute/vitest.config.ts new file mode 100644 index 0000000000..6561524839 --- /dev/null +++ b/exchanges/execute/vitest.config.ts @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import baseConfig from '../../vitest.config'; + +export default mergeConfig(baseConfig, {}); diff --git a/exchanges/graphcache/package.json b/exchanges/graphcache/package.json index 76aef184c7..cd76d32d01 100644 --- a/exchanges/graphcache/package.json +++ b/exchanges/graphcache/package.json @@ -54,7 +54,7 @@ "default-storage/" ], "scripts": { - "test": "vitest --config ../../vitest.config.ts", + "test": "vitest", "clean": "rimraf dist extras", "check": "tsc --noEmit", "lint": "eslint --ext=js,jsx,ts,tsx .", @@ -79,7 +79,8 @@ "graphql": "^16.6.0", "react": "^17.0.1", "react-dom": "^17.0.1", - "urql": "workspace:*" + "urql": "workspace:*", + "vitest": "^0.30.1" }, "publishConfig": { "access": "public", diff --git a/exchanges/graphcache/vitest.config.ts b/exchanges/graphcache/vitest.config.ts new file mode 100644 index 0000000000..6561524839 --- /dev/null +++ b/exchanges/graphcache/vitest.config.ts @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import baseConfig from '../../vitest.config'; + +export default mergeConfig(baseConfig, {}); diff --git a/exchanges/persisted/package.json b/exchanges/persisted/package.json index d40a652f84..002457d9e9 100644 --- a/exchanges/persisted/package.json +++ b/exchanges/persisted/package.json @@ -38,7 +38,7 @@ "dist/" ], "scripts": { - "test": "vitest --config ../../vitest.config.ts", + "test": "vitest", "clean": "rimraf dist extras", "check": "tsc --noEmit", "lint": "eslint --ext=js,jsx,ts,tsx .", @@ -55,7 +55,8 @@ }, "devDependencies": { "@urql/core": "workspace:*", - "graphql": "^16.0.0" + "graphql": "^16.0.0", + "vitest": "^0.30.1" }, "publishConfig": { "access": "public", diff --git a/exchanges/persisted/vitest.config.ts b/exchanges/persisted/vitest.config.ts new file mode 100644 index 0000000000..6561524839 --- /dev/null +++ b/exchanges/persisted/vitest.config.ts @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import baseConfig from '../../vitest.config'; + +export default mergeConfig(baseConfig, {}); diff --git a/exchanges/populate/package.json b/exchanges/populate/package.json index 3c60ab7dea..5f5cb519ef 100644 --- a/exchanges/populate/package.json +++ b/exchanges/populate/package.json @@ -38,7 +38,7 @@ "extras/" ], "scripts": { - "test": "vitest --config ../../vitest.config.ts", + "test": "vitest", "clean": "rimraf dist extras", "check": "tsc --noEmit", "lint": "eslint --ext=js,jsx,ts,tsx .", @@ -56,7 +56,8 @@ }, "devDependencies": { "@urql/core": "workspace:*", - "graphql": "^16.0.0" + "graphql": "^16.0.0", + "vitest": "^0.30.1" }, "publishConfig": { "access": "public", diff --git a/exchanges/populate/vitest.config.ts b/exchanges/populate/vitest.config.ts new file mode 100644 index 0000000000..6561524839 --- /dev/null +++ b/exchanges/populate/vitest.config.ts @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import baseConfig from '../../vitest.config'; + +export default mergeConfig(baseConfig, {}); diff --git a/exchanges/refocus/package.json b/exchanges/refocus/package.json index 9a83208536..23b1531844 100644 --- a/exchanges/refocus/package.json +++ b/exchanges/refocus/package.json @@ -40,7 +40,7 @@ "dist/" ], "scripts": { - "test": "vitest --config ../../vitest.config.ts", + "test": "vitest", "clean": "rimraf dist", "check": "tsc --noEmit", "lint": "eslint --ext=js,jsx,ts,tsx .", @@ -49,9 +49,10 @@ "prepublishOnly": "run-s clean build" }, "devDependencies": { - "@urql/core": "workspace:*", "@types/react": "^17.0.4", - "graphql": "^16.0.0" + "@urql/core": "workspace:*", + "graphql": "^16.0.0", + "vitest": "^0.30.1" }, "peerDependencies": { "@urql/core": "^5.0.0" diff --git a/exchanges/refocus/vitest.config.ts b/exchanges/refocus/vitest.config.ts new file mode 100644 index 0000000000..6561524839 --- /dev/null +++ b/exchanges/refocus/vitest.config.ts @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import baseConfig from '../../vitest.config'; + +export default mergeConfig(baseConfig, {}); diff --git a/exchanges/request-policy/package.json b/exchanges/request-policy/package.json index c2118e04be..cc2e520473 100644 --- a/exchanges/request-policy/package.json +++ b/exchanges/request-policy/package.json @@ -39,7 +39,7 @@ "dist/" ], "scripts": { - "test": "vitest --config ../../vitest.config.ts", + "test": "vitest", "clean": "rimraf dist", "check": "tsc --noEmit", "lint": "eslint --ext=js,jsx,ts,tsx .", @@ -49,7 +49,8 @@ }, "devDependencies": { "@urql/core": "workspace:*", - "graphql": "^16.0.0" + "graphql": "^16.0.0", + "vitest": "^0.30.1" }, "peerDependencies": { "@urql/core": "^5.0.0" diff --git a/exchanges/request-policy/vitest.config.ts b/exchanges/request-policy/vitest.config.ts new file mode 100644 index 0000000000..6561524839 --- /dev/null +++ b/exchanges/request-policy/vitest.config.ts @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import baseConfig from '../../vitest.config'; + +export default mergeConfig(baseConfig, {}); diff --git a/exchanges/retry/package.json b/exchanges/retry/package.json index 59a1e00a7a..138c339eb0 100644 --- a/exchanges/retry/package.json +++ b/exchanges/retry/package.json @@ -39,7 +39,7 @@ "dist/" ], "scripts": { - "test": "vitest --config ../../vitest.config.ts", + "test": "vitest", "clean": "rimraf dist", "check": "tsc --noEmit", "lint": "eslint --ext=js,jsx,ts,tsx .", @@ -49,7 +49,8 @@ }, "devDependencies": { "@urql/core": "workspace:*", - "graphql": "^16.0.0" + "graphql": "^16.0.0", + "vitest": "^0.30.1" }, "peerDependencies": { "@urql/core": "^5.0.0" diff --git a/exchanges/retry/vitest.config.ts b/exchanges/retry/vitest.config.ts new file mode 100644 index 0000000000..6561524839 --- /dev/null +++ b/exchanges/retry/vitest.config.ts @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import baseConfig from '../../vitest.config'; + +export default mergeConfig(baseConfig, {}); diff --git a/package.json b/package.json index 758fdab541..a4a429cb74 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "private": true, "scripts": { - "test": "vitest", + "test": "test -z $CI && vitest || pnpm -r --parallel run test run", "check": "tsc", "lint": "eslint --ext=js,jsx,ts,tsx .", "build": "node ./scripts/actions/build-all.mjs", diff --git a/packages/core/package.json b/packages/core/package.json index 9ea40dcf3e..c2dfc77a97 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -45,7 +45,7 @@ "internal/" ], "scripts": { - "test": "vitest --config ../../vitest.config.ts", + "test": "vitest", "clean": "rimraf dist", "check": "tsc --noEmit", "lint": "eslint --ext=js,jsx,ts,tsx .", @@ -61,5 +61,8 @@ "publishConfig": { "access": "public", "provenance": true + }, + "devDependencies": { + "vitest": "^0.30.1" } } diff --git a/packages/core/vitest.config.ts b/packages/core/vitest.config.ts new file mode 100644 index 0000000000..6561524839 --- /dev/null +++ b/packages/core/vitest.config.ts @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import baseConfig from '../../vitest.config'; + +export default mergeConfig(baseConfig, {}); diff --git a/packages/introspection/package.json b/packages/introspection/package.json index e992937b9f..06d7d21bbf 100644 --- a/packages/introspection/package.json +++ b/packages/introspection/package.json @@ -37,7 +37,6 @@ "dist/" ], "scripts": { - "test": "vitest --config ../../vitest.config.ts", "clean": "rimraf dist", "check": "tsc --noEmit", "lint": "eslint --ext=js,jsx,ts,tsx .", @@ -51,7 +50,6 @@ "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" }, - "dependencies": {}, "publishConfig": { "access": "public", "provenance": true diff --git a/packages/next-urql/vitest.config.ts b/packages/next-urql/vitest.config.ts new file mode 100644 index 0000000000..6561524839 --- /dev/null +++ b/packages/next-urql/vitest.config.ts @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import baseConfig from '../../vitest.config'; + +export default mergeConfig(baseConfig, {}); diff --git a/packages/preact-urql/package.json b/packages/preact-urql/package.json index dede80385d..8ba183e667 100644 --- a/packages/preact-urql/package.json +++ b/packages/preact-urql/package.json @@ -40,7 +40,7 @@ "dist/" ], "scripts": { - "test": "vitest --config ../../vitest.config.ts", + "test": "vitest", "clean": "rimraf dist", "check": "tsc --noEmit", "lint": "eslint --ext=js,jsx,ts,tsx .", @@ -49,10 +49,11 @@ "prepublishOnly": "run-s clean build" }, "devDependencies": { - "@urql/core": "workspace:*", "@testing-library/preact": "^2.0.0", + "@urql/core": "workspace:*", "graphql": "^16.0.0", - "preact": "^10.13.0" + "preact": "^10.13.0", + "vitest": "^0.30.1" }, "peerDependencies": { "@urql/core": "^5.0.0", diff --git a/packages/preact-urql/vitest.config.ts b/packages/preact-urql/vitest.config.ts new file mode 100644 index 0000000000..6561524839 --- /dev/null +++ b/packages/preact-urql/vitest.config.ts @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import baseConfig from '../../vitest.config'; + +export default mergeConfig(baseConfig, {}); diff --git a/packages/react-urql/package.json b/packages/react-urql/package.json index 65133fd2ec..48944b13bd 100644 --- a/packages/react-urql/package.json +++ b/packages/react-urql/package.json @@ -32,7 +32,7 @@ "dist/" ], "scripts": { - "test": "vitest --config ../../vitest.config.ts", + "test": "vitest", "clean": "rimraf dist", "check": "tsc --noEmit", "lint": "eslint --ext=js,jsx,ts,tsx .", @@ -55,7 +55,8 @@ "react-is": "^17.0.1", "react-ssr-prepass": "^1.1.2", "react-test-renderer": "^17.0.1", - "vite": "^3.2.4" + "vite": "^3.2.4", + "vitest": "^0.30.1" }, "peerDependencies": { "@urql/core": "^5.0.0", diff --git a/packages/react-urql/vitest.config.ts b/packages/react-urql/vitest.config.ts new file mode 100644 index 0000000000..6561524839 --- /dev/null +++ b/packages/react-urql/vitest.config.ts @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import baseConfig from '../../vitest.config'; + +export default mergeConfig(baseConfig, {}); diff --git a/packages/solid-urql/package.json b/packages/solid-urql/package.json index 34384e9679..8c67edcf8b 100644 --- a/packages/solid-urql/package.json +++ b/packages/solid-urql/package.json @@ -50,13 +50,12 @@ }, "devDependencies": { "@solidjs/testing-library": "^0.8.2", - "@testing-library/jest-dom": "^5.16.5", "@urql/core": "workspace:*", "graphql": "^16.0.0", "jsdom": "^22.1.0", "vite-plugin-solid": "^2.7.0", "vite-tsconfig-paths": "^4.2.0", - "vitest": "^0.32.2" + "vitest": "^0.30.1" }, "peerDependencies": { "@urql/core": "^5.0.0", diff --git a/packages/solid-urql/src/createMutation.test.ts b/packages/solid-urql/src/createMutation.test.ts index 48b051ab32..110e28b0be 100644 --- a/packages/solid-urql/src/createMutation.test.ts +++ b/packages/solid-urql/src/createMutation.test.ts @@ -1,3 +1,5 @@ +// @vitest-environment jsdom + import { testEffect } from '@solidjs/testing-library'; import { expect, it, describe, vi } from 'vitest'; import { CreateMutationState, createMutation } from './createMutation'; diff --git a/packages/solid-urql/src/createQuery.test.tsx b/packages/solid-urql/src/createQuery.test.tsx index f02a9b69f0..d0e7903ef2 100644 --- a/packages/solid-urql/src/createQuery.test.tsx +++ b/packages/solid-urql/src/createQuery.test.tsx @@ -1,3 +1,5 @@ +// @vitest-environment jsdom + import { expect, it, describe, vi } from 'vitest'; import { CreateQueryState, createQuery } from './createQuery'; import { renderHook, testEffect } from '@solidjs/testing-library'; diff --git a/packages/solid-urql/src/createSubscription.test.ts b/packages/solid-urql/src/createSubscription.test.ts index 74bf3d4429..d79ea91f76 100644 --- a/packages/solid-urql/src/createSubscription.test.ts +++ b/packages/solid-urql/src/createSubscription.test.ts @@ -1,3 +1,5 @@ +// @vitest-environment jsdom + import { renderHook, testEffect } from '@solidjs/testing-library'; import { OperationResult, diff --git a/packages/solid-urql/src/suspense.test.tsx b/packages/solid-urql/src/suspense.test.tsx index 556970a2a8..3be0bd2020 100644 --- a/packages/solid-urql/src/suspense.test.tsx +++ b/packages/solid-urql/src/suspense.test.tsx @@ -1,3 +1,5 @@ +// @vitest-environment jsdom + import { describe, it, vi } from 'vitest'; import { OperationResult, diff --git a/packages/solid-urql/vitest.config.ts b/packages/solid-urql/vitest.config.ts index d28545e0dc..55b1b9e774 100644 --- a/packages/solid-urql/vitest.config.ts +++ b/packages/solid-urql/vitest.config.ts @@ -1,13 +1,7 @@ -import { defineConfig, mergeConfig } from 'vite'; +import { mergeConfig } from 'vitest/config'; import solidPlugin from 'vite-plugin-solid'; -import rootConfig from '../../vitest.config'; +import baseConfig from '../../vitest.config'; -export default mergeConfig( - rootConfig, - defineConfig({ - plugins: [solidPlugin()], - test: { - globals: true, - }, - }) -); +export default mergeConfig(baseConfig, { + plugins: [solidPlugin({ hot: false })], +}); diff --git a/packages/storage-rn/package.json b/packages/storage-rn/package.json index 693d790c26..1b2c506361 100644 --- a/packages/storage-rn/package.json +++ b/packages/storage-rn/package.json @@ -49,15 +49,16 @@ "prepublishOnly": "run-s clean build" }, "peerDependencies": { - "@urql/exchange-graphcache": ">=5.0.0", "@react-native-async-storage/async-storage": "^1.15.5", - "@react-native-community/netinfo": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^11.0.0" + "@react-native-community/netinfo": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^11.0.0", + "@urql/exchange-graphcache": ">=5.0.0" }, "devDependencies": { + "@react-native-async-storage/async-storage": "^1.21.0", + "@react-native-community/netinfo": "^11.2.1", "@urql/core": "workspace:*", "@urql/exchange-graphcache": "workspace:*", - "@react-native-async-storage/async-storage": "^1.21.0", - "@react-native-community/netinfo": "^11.2.1" + "vitest": "^0.30.1" }, "publishConfig": { "access": "public", diff --git a/packages/storage-rn/vitest.config.ts b/packages/storage-rn/vitest.config.ts new file mode 100644 index 0000000000..6561524839 --- /dev/null +++ b/packages/storage-rn/vitest.config.ts @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import baseConfig from '../../vitest.config'; + +export default mergeConfig(baseConfig, {}); diff --git a/packages/svelte-urql/package.json b/packages/svelte-urql/package.json index bdb5b4e840..d861f9658d 100644 --- a/packages/svelte-urql/package.json +++ b/packages/svelte-urql/package.json @@ -40,7 +40,7 @@ "dist/" ], "scripts": { - "test": "vitest --config ../../vitest.config.ts", + "test": "vitest", "clean": "rimraf dist", "check": "tsc --noEmit", "lint": "eslint --ext=js,jsx,ts,tsx .", @@ -59,7 +59,8 @@ "devDependencies": { "@urql/core": "workspace:*", "graphql": "^16.0.0", - "svelte": "^3.20.0" + "svelte": "^3.20.0", + "vitest": "^0.30.1" }, "publishConfig": { "access": "public", diff --git a/packages/svelte-urql/vitest.config.ts b/packages/svelte-urql/vitest.config.ts new file mode 100644 index 0000000000..6561524839 --- /dev/null +++ b/packages/svelte-urql/vitest.config.ts @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import baseConfig from '../../vitest.config'; + +export default mergeConfig(baseConfig, {}); diff --git a/packages/vue-urql/package.json b/packages/vue-urql/package.json index becee05825..2e01f841b5 100644 --- a/packages/vue-urql/package.json +++ b/packages/vue-urql/package.json @@ -40,7 +40,7 @@ "dist/" ], "scripts": { - "test": "vitest --config ../../vitest.config.ts", + "test": "vitest", "clean": "rimraf dist", "check": "tsc --noEmit", "lint": "eslint --ext=js,jsx,ts,tsx .", @@ -52,6 +52,7 @@ "@urql/core": "workspace:*", "@vue/test-utils": "^2.3.0", "graphql": "^16.0.0", + "vitest": "^0.30.1", "vue": "^3.2.47" }, "peerDependencies": { diff --git a/packages/vue-urql/vitest.config.ts b/packages/vue-urql/vitest.config.ts new file mode 100644 index 0000000000..6561524839 --- /dev/null +++ b/packages/vue-urql/vitest.config.ts @@ -0,0 +1,4 @@ +import { mergeConfig } from 'vitest/config'; +import baseConfig from '../../vitest.config'; + +export default mergeConfig(baseConfig, {}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7c1d66dccf..6f286c779f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -194,6 +194,9 @@ importers: graphql: specifier: ^16.6.0 version: 16.6.0 + vitest: + specifier: ^0.30.1 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) exchanges/context: dependencies: @@ -207,6 +210,9 @@ importers: graphql: specifier: ^16.6.0 version: 16.6.0 + vitest: + specifier: ^0.30.1 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) exchanges/execute: dependencies: @@ -220,6 +226,9 @@ importers: graphql: specifier: ^16.6.0 version: 16.6.0 + vitest: + specifier: ^0.30.1 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) exchanges/graphcache: dependencies: @@ -257,6 +266,9 @@ importers: urql: specifier: workspace:* version: link:../../packages/react-urql + vitest: + specifier: ^0.30.1 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) exchanges/persisted: dependencies: @@ -270,6 +282,9 @@ importers: graphql: specifier: ^16.6.0 version: 16.6.0 + vitest: + specifier: ^0.30.1 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) exchanges/populate: dependencies: @@ -283,6 +298,9 @@ importers: graphql: specifier: ^16.6.0 version: 16.6.0 + vitest: + specifier: ^0.30.1 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) exchanges/refocus: dependencies: @@ -299,6 +317,9 @@ importers: graphql: specifier: ^16.6.0 version: 16.6.0 + vitest: + specifier: ^0.30.1 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) exchanges/request-policy: dependencies: @@ -312,6 +333,9 @@ importers: graphql: specifier: ^16.6.0 version: 16.6.0 + vitest: + specifier: ^0.30.1 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) exchanges/retry: dependencies: @@ -325,6 +349,9 @@ importers: graphql: specifier: ^16.6.0 version: 16.6.0 + vitest: + specifier: ^0.30.1 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) packages/core: dependencies: @@ -334,6 +361,10 @@ importers: wonka: specifier: ^6.3.2 version: 6.3.2 + devDependencies: + vitest: + specifier: ^0.30.1 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) packages/introspection: devDependencies: @@ -386,6 +417,9 @@ importers: preact: specifier: ^10.13.0 version: 10.13.1 + vitest: + specifier: ^0.30.1 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) packages/react-urql: dependencies: @@ -438,6 +472,9 @@ importers: vite: specifier: ^3.2.4 version: 3.2.5(@types/node@18.16.3)(terser@5.17.1) + vitest: + specifier: ^0.30.1 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) packages/site: dependencies: @@ -557,9 +594,6 @@ importers: '@solidjs/testing-library': specifier: ^0.8.2 version: 0.8.8(solid-js@1.8.17) - '@testing-library/jest-dom': - specifier: ^5.16.5 - version: 5.17.0 graphql: specifier: ^16.6.0 version: 16.6.0 @@ -568,13 +602,13 @@ importers: version: 22.1.0 vite-plugin-solid: specifier: ^2.7.0 - version: 2.10.2(@testing-library/jest-dom@5.17.0)(solid-js@1.8.17)(vite@3.2.5) + version: 2.10.2(solid-js@1.8.17)(vite@3.2.5) vite-tsconfig-paths: specifier: ^4.2.0 version: 4.2.0(typescript@5.1.6)(vite@3.2.5) vitest: - specifier: ^0.32.2 - version: 0.32.4(jsdom@22.1.0)(terser@5.17.1) + specifier: ^0.30.1 + version: 0.30.1(jsdom@22.1.0)(terser@5.17.1) packages/storage-rn: devDependencies: @@ -590,6 +624,9 @@ importers: '@urql/exchange-graphcache': specifier: workspace:* version: link:../../exchanges/graphcache + vitest: + specifier: ^0.30.1 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) packages/svelte-urql: dependencies: @@ -606,6 +643,9 @@ importers: svelte: specifier: ^3.20.0 version: 3.37.0 + vitest: + specifier: ^0.30.1 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) packages/vue-urql: dependencies: @@ -622,6 +662,9 @@ importers: graphql: specifier: ^16.6.0 version: 16.6.0 + vitest: + specifier: ^0.30.1 + version: 0.30.1(jsdom@21.1.1)(terser@5.17.1) vue: specifier: ^3.2.47 version: 3.2.47 @@ -675,10 +718,6 @@ packages: dependencies: tunnel: 0.0.6 - /@adobe/css-tools@4.4.0: - resolution: {integrity: sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==} - dev: true - /@ampproject/remapping@2.2.0: resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} engines: {node: '>=6.0.0'} @@ -2443,20 +2482,6 @@ packages: resolution: {integrity: sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==} dev: true - /@jest/expect-utils@29.7.0: - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - jest-get-type: 29.6.3 - dev: true - - /@jest/schemas@29.6.3: - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@sinclair/typebox': 0.27.8 - dev: true - /@jest/types@26.6.2: resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} engines: {node: '>= 10.14.2'} @@ -2468,18 +2493,6 @@ packages: chalk: 4.1.2 dev: true - /@jest/types@29.6.3: - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.3 - '@types/istanbul-reports': 3.0.0 - '@types/node': 18.16.3 - '@types/yargs': 17.0.32 - chalk: 4.1.2 - dev: true - /@jridgewell/gen-mapping@0.1.1: resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} engines: {node: '>=6.0.0'} @@ -3162,10 +3175,6 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - dev: true - /@sindresorhus/is@0.7.0: resolution: {integrity: sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==} engines: {node: '>=4'} @@ -3218,21 +3227,6 @@ packages: pretty-format: 26.6.2 dev: true - /@testing-library/jest-dom@5.17.0: - resolution: {integrity: sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==} - engines: {node: '>=8', npm: '>=6', yarn: '>=1'} - dependencies: - '@adobe/css-tools': 4.4.0 - '@babel/runtime': 7.22.5 - '@types/testing-library__jest-dom': 5.14.9 - aria-query: 5.3.0 - chalk: 3.0.0 - css.escape: 1.5.1 - dom-accessibility-api: 0.5.16 - lodash: 4.17.21 - redent: 3.0.0 - dev: true - /@testing-library/preact@2.0.1(preact@10.13.1): resolution: {integrity: sha512-79kwVOY+3caoLgaPbiPzikjgY0Aya7Fc7TvGtR1upCnz2wrtmPDnN2t9vO7I7vDP2zoA+feSwOH5Q0BFErhaaQ==} engines: {node: '>= 10'} @@ -3331,7 +3325,7 @@ packages: /@types/chai-subset@1.3.3: resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} dependencies: - '@types/chai': 4.3.4 + '@types/chai': 4.3.16 dev: true /@types/chai@4.3.16: @@ -3379,13 +3373,6 @@ packages: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest@29.5.12: - resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - dev: true - /@types/json-schema@7.0.12: resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} @@ -3479,16 +3466,6 @@ packages: resolution: {integrity: sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==} dev: true - /@types/stack-utils@2.0.3: - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - dev: true - - /@types/testing-library__jest-dom@5.14.9: - resolution: {integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==} - dependencies: - '@types/jest': 29.5.12 - dev: true - /@types/unist@2.0.3: resolution: {integrity: sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==} @@ -3502,12 +3479,6 @@ packages: '@types/yargs-parser': 20.2.0 dev: true - /@types/yargs@17.0.32: - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} - dependencies: - '@types/yargs-parser': 20.2.0 - dev: true - /@types/yauzl@2.10.3: resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} requiresBuild: true @@ -3665,14 +3636,6 @@ packages: chai: 4.3.7 dev: true - /@vitest/expect@0.32.4: - resolution: {integrity: sha512-m7EPUqmGIwIeoU763N+ivkFjTzbaBn0n9evsTOcde03ugy2avPs3kZbYmw3DkcH1j5mxhMhdamJkLQ6dM1bk/A==} - dependencies: - '@vitest/spy': 0.32.4 - '@vitest/utils': 0.32.4 - chai: 4.3.7 - dev: true - /@vitest/runner@0.30.1: resolution: {integrity: sha512-W62kT/8i0TF1UBCNMRtRMOBWJKRnNyv9RrjIgdUryEe0wNpGZvvwPDLuzYdxvgSckzjp54DSpv1xUbv4BQ0qVA==} dependencies: @@ -3682,14 +3645,6 @@ packages: pathe: 1.1.0 dev: true - /@vitest/runner@0.32.4: - resolution: {integrity: sha512-cHOVCkiRazobgdKLnczmz2oaKK9GJOw6ZyRcaPdssO1ej+wzHVIkWiCiNacb3TTYPdzMddYkCgMjZ4r8C0JFCw==} - dependencies: - '@vitest/utils': 0.32.4 - p-limit: 4.0.0 - pathe: 1.1.2 - dev: true - /@vitest/snapshot@0.30.1: resolution: {integrity: sha512-fJZqKrE99zo27uoZA/azgWyWbFvM1rw2APS05yB0JaLwUIg9aUtvvnBf4q7JWhEcAHmSwbrxKFgyBUga6tq9Tw==} dependencies: @@ -3698,22 +3653,8 @@ packages: pretty-format: 27.5.1 dev: true - /@vitest/snapshot@0.32.4: - resolution: {integrity: sha512-IRpyqn9t14uqsFlVI2d7DFMImGMs1Q9218of40bdQQgMePwVdmix33yMNnebXcTzDU5eiV3eUsoxxH5v0x/IQA==} - dependencies: - magic-string: 0.30.0 - pathe: 1.1.2 - pretty-format: 29.7.0 - dev: true - /@vitest/spy@0.30.1: resolution: {integrity: sha512-YfJeIf37GvTZe04ZKxzJfnNNuNSmTEGnla2OdL60C8od16f3zOfv9q9K0nNii0NfjDJRt/CVN/POuY5/zTS+BA==} - dependencies: - tinyspy: 2.1.0 - dev: true - - /@vitest/spy@0.32.4: - resolution: {integrity: sha512-oA7rCOqVOOpE6rEoXuCOADX7Lla1LIa4hljI2MSccbpec54q+oifhziZIJXxlE/CvI2E+ElhBHzVu0VEvJGQKQ==} dependencies: tinyspy: 2.2.1 dev: true @@ -3726,14 +3667,6 @@ packages: pretty-format: 27.5.1 dev: true - /@vitest/utils@0.32.4: - resolution: {integrity: sha512-Gwnl8dhd1uJ+HXrYyV0eRqfmk9ek1ASE/LWfTCuWMw+d07ogHqp4hEAV28NiecimK6UY9DpSEPh+pXBA5gtTBg==} - dependencies: - diff-sequences: 29.6.3 - loupe: 2.3.6 - pretty-format: 29.7.0 - dev: true - /@vue/compiler-core@3.2.47: resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==} dependencies: @@ -5222,14 +5155,6 @@ packages: escape-string-regexp: 1.0.5 supports-color: 5.5.0 - /chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -5971,10 +5896,6 @@ packages: engines: {node: '>= 6'} dev: true - /css.escape@1.5.1: - resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - dev: true - /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -6501,11 +6422,6 @@ packages: /detect-node@2.0.5: resolution: {integrity: sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw==} - /diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true - /diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} dependencies: @@ -7145,11 +7061,6 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - /escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - dev: true - /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -7486,17 +7397,6 @@ packages: transitivePeerDependencies: - supports-color - /expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/expect-utils': 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - dev: true - /express@4.17.1(supports-color@6.1.0): resolution: {integrity: sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==} engines: {node: '>= 0.10.0'} @@ -9457,58 +9357,6 @@ packages: has-to-string-tag-x: 1.4.1 is-object: 1.0.2 - /jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - dev: true - - /jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true - - /jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - dev: true - - /jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/code-frame': 7.24.7 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: true - - /jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - '@types/node': 18.16.3 - chalk: 4.1.2 - ci-info: 3.8.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - dev: true - /js-beautify@1.14.6: resolution: {integrity: sha512-GfofQY5zDp+cuHc+gsEXKPpNw2KbPddreEo35O6jT6i0RVK6LhsoYBhq5TvK4/n74wnA0QbK8gGd+jUZwTMKJw==} engines: {node: '>=10'} @@ -9689,10 +9537,6 @@ packages: engines: {node: '>=6'} hasBin: true - /jsonc-parser@3.2.0: - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} - dev: true - /jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: @@ -10612,15 +10456,6 @@ packages: hasBin: true dev: true - /mlly@1.2.0: - resolution: {integrity: sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==} - dependencies: - acorn: 8.10.0 - pathe: 1.1.0 - pkg-types: 1.0.2 - ufo: 1.1.1 - dev: true - /mlly@1.7.1: resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} dependencies: @@ -11727,14 +11562,6 @@ packages: find-up: 5.0.0 dev: true - /pkg-types@1.0.2: - resolution: {integrity: sha512-hM58GKXOcj8WTqUXnsQyJYXdeAPbythQgEF3nTcEo+nkD49chjQ9IKm/QJy9xf6JakXptz86h7ecP2024rrLaQ==} - dependencies: - jsonc-parser: 3.2.0 - mlly: 1.2.0 - pathe: 1.1.0 - dev: true - /pkg-types@1.1.1: resolution: {integrity: sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==} dependencies: @@ -12063,7 +11890,7 @@ packages: engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.4 - picocolors: 1.0.0 + picocolors: 1.0.1 source-map-js: 1.0.2 dev: true @@ -12072,7 +11899,7 @@ packages: engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.4 - picocolors: 1.0.0 + picocolors: 1.0.1 source-map-js: 1.0.2 dev: true @@ -12156,15 +11983,6 @@ packages: react-is: 17.0.2 dev: true - /pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 17.0.2 - dev: true - /prism-react-renderer@1.2.0(react@17.0.2): resolution: {integrity: sha512-GHqzxLYImx1iKN1jJURcuRoA/0ygCcNhfGw1IT8nPIMzarmKQ3Nc+JcG0gi8JXQzuh0C5ShE4npMIoqNin40hg==} peerDependencies: @@ -14013,13 +13831,6 @@ packages: resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' - /stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - dependencies: - escape-string-regexp: 2.0.0 - dev: true - /stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} dev: true @@ -14592,16 +14403,6 @@ packages: engines: {node: '>=14.0.0'} dev: true - /tinypool@0.5.0: - resolution: {integrity: sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==} - engines: {node: '>=14.0.0'} - dev: true - - /tinyspy@2.1.0: - resolution: {integrity: sha512-7eORpyqImoOvkQJCSkL0d0mB4NHHIFAy4b1u8PHdDa7SjGS2njzl6/lyGoZLm+eyYEtlUmFGE0rFj66SWxZgQQ==} - engines: {node: '>=14.0.0'} - dev: true - /tinyspy@2.2.1: resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} engines: {node: '>=14.0.0'} @@ -14905,10 +14706,6 @@ packages: hasBin: true dev: true - /ufo@1.1.1: - resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==} - dev: true - /ufo@1.5.3: resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} dev: true @@ -15360,33 +15157,12 @@ packages: resolution: {integrity: sha512-vTikpU/J7e6LU/8iM3dzBo8ZhEiKZEKRznEMm+mJh95XhWaPrJQraT/QsT2NWmuEf+zgAoMe64PKT7hfZ1Njmg==} engines: {node: '>=v14.18.0'} hasBin: true - dependencies: - cac: 6.7.14 - debug: 4.3.4(supports-color@5.5.0) - mlly: 1.2.0 - pathe: 1.1.0 - picocolors: 1.0.0 - vite: 3.2.5(@types/node@18.16.3)(terser@5.17.1) - transitivePeerDependencies: - - '@types/node' - - less - - sass - - stylus - - sugarss - - supports-color - - terser - dev: true - - /vite-node@0.32.4(@types/node@18.16.3)(terser@5.17.1): - resolution: {integrity: sha512-L2gIw+dCxO0LK14QnUMoqSYpa9XRGnTTTDjW2h19Mr+GR0EFj4vx52W41gFXfMLqpA00eK4ZjOVYo1Xk//LFEw==} - engines: {node: '>=v14.18.0'} - hasBin: true dependencies: cac: 6.7.14 debug: 4.3.4(supports-color@5.5.0) mlly: 1.7.1 pathe: 1.1.2 - picocolors: 1.0.0 + picocolors: 1.0.1 vite: 3.2.5(@types/node@18.16.3)(terser@5.17.1) transitivePeerDependencies: - '@types/node' @@ -15398,7 +15174,7 @@ packages: - terser dev: true - /vite-plugin-solid@2.10.2(@testing-library/jest-dom@5.17.0)(solid-js@1.8.17)(vite@3.2.5): + /vite-plugin-solid@2.10.2(solid-js@1.8.17)(vite@3.2.5): resolution: {integrity: sha512-AOEtwMe2baBSXMXdo+BUwECC8IFHcKS6WQV/1NEd+Q7vHPap5fmIhLcAzr+DUJ04/KHx/1UBU0l1/GWP+rMAPQ==} peerDependencies: '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* @@ -15409,7 +15185,6 @@ packages: optional: true dependencies: '@babel/core': 7.24.7 - '@testing-library/jest-dom': 5.17.0 '@types/babel__core': 7.20.5 babel-preset-solid: 1.8.17(@babel/core@7.24.7) merge-anything: 5.1.7 @@ -15551,8 +15326,8 @@ packages: - terser dev: true - /vitest@0.32.4(jsdom@22.1.0)(terser@5.17.1): - resolution: {integrity: sha512-3czFm8RnrsWwIzVDu/Ca48Y/M+qh3vOnF16czJm98Q/AN1y3B6PBsyV8Re91Ty5s7txKNjEhpgtGPcfdbh2MZg==} + /vitest@0.30.1(jsdom@22.1.0)(terser@5.17.1): + resolution: {integrity: sha512-y35WTrSTlTxfMLttgQk4rHcaDkbHQwDP++SNwPb+7H8yb13Q3cu2EixrtHzF27iZ8v0XCciSsLg00RkPAzB/aA==} engines: {node: '>=v14.18.0'} hasBin: true peerDependencies: @@ -15585,27 +15360,29 @@ packages: '@types/chai': 4.3.16 '@types/chai-subset': 1.3.3 '@types/node': 18.16.3 - '@vitest/expect': 0.32.4 - '@vitest/runner': 0.32.4 - '@vitest/snapshot': 0.32.4 - '@vitest/spy': 0.32.4 - '@vitest/utils': 0.32.4 - acorn: 8.10.0 + '@vitest/expect': 0.30.1 + '@vitest/runner': 0.30.1 + '@vitest/snapshot': 0.30.1 + '@vitest/spy': 0.30.1 + '@vitest/utils': 0.30.1 + acorn: 8.11.3 acorn-walk: 8.2.0 cac: 6.7.14 chai: 4.3.7 + concordance: 5.0.4 debug: 4.3.4(supports-color@5.5.0) jsdom: 22.1.0 local-pkg: 0.4.3 magic-string: 0.30.0 pathe: 1.1.2 - picocolors: 1.0.0 + picocolors: 1.0.1 + source-map: 0.6.1 std-env: 3.7.0 strip-literal: 1.0.1 tinybench: 2.8.0 - tinypool: 0.5.0 + tinypool: 0.4.0 vite: 3.2.5(@types/node@18.16.3)(terser@5.17.1) - vite-node: 0.32.4(@types/node@18.16.3)(terser@5.17.1) + vite-node: 0.30.1(@types/node@18.16.3)(terser@5.17.1) why-is-node-running: 2.2.2 transitivePeerDependencies: - less diff --git a/vitest.config.ts b/vitest.config.ts index abb29bd401..2b108b4726 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -18,6 +18,7 @@ export default defineConfig({ setupFiles: [resolve(__dirname, 'scripts/vitest/setup.js')], clearMocks: true, exclude: [ + 'packages/solid-urql/**', '**/node_modules/**', '**/dist/**', '**/cypress/**', From c5dd678e0505ddf8d279e00a841ce0e52881248c Mon Sep 17 00:00:00 2001 From: Stefan Maric Date: Sun, 9 Jun 2024 12:36:37 +0200 Subject: [PATCH 19/20] Fix TypeScript errors on Solid tests by setting the correct JSX import --- packages/solid-urql/src/suspense.test.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/solid-urql/src/suspense.test.tsx b/packages/solid-urql/src/suspense.test.tsx index 3be0bd2020..f07d5a37de 100644 --- a/packages/solid-urql/src/suspense.test.tsx +++ b/packages/solid-urql/src/suspense.test.tsx @@ -1,3 +1,4 @@ +/** @jsxImportSource solid-js */ // @vitest-environment jsdom import { describe, it, vi } from 'vitest'; From 97601bc2ae749fc4c5e1be8811d9db1f9c8dadb6 Mon Sep 17 00:00:00 2001 From: jdecroock Date: Fri, 13 Sep 2024 08:39:35 +0200 Subject: [PATCH 20/20] Fix version and add changeset --- .changeset/forty-cameras-check.md | 5 +++++ packages/solid-urql/package.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/forty-cameras-check.md diff --git a/.changeset/forty-cameras-check.md b/.changeset/forty-cameras-check.md new file mode 100644 index 0000000000..ab3fb6b944 --- /dev/null +++ b/.changeset/forty-cameras-check.md @@ -0,0 +1,5 @@ +--- +'@urql/solid': minor +--- + +Initial release diff --git a/packages/solid-urql/package.json b/packages/solid-urql/package.json index 8c67edcf8b..39e3e32495 100644 --- a/packages/solid-urql/package.json +++ b/packages/solid-urql/package.json @@ -1,6 +1,6 @@ { "name": "@urql/solid", - "version": "4.0.4", + "version": "0.0.0", "description": "A highly customizable and versatile GraphQL client for Solid", "sideEffects": false, "homepage": "https://formidable.com/open-source/urql/docs/",