diff --git a/packages/svelte-query-devtools/tsconfig.json b/packages/svelte-query-devtools/tsconfig.json index c01e67b85f..54936037f3 100644 --- a/packages/svelte-query-devtools/tsconfig.json +++ b/packages/svelte-query-devtools/tsconfig.json @@ -5,9 +5,7 @@ "checkJs": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, - "importsNotUsedAsValues": "error", "isolatedModules": true, - "preserveValueImports": true, "lib": ["esnext", "DOM", "DOM.Iterable"], "moduleResolution": "node", "module": "esnext", @@ -23,8 +21,7 @@ "sourceMap": true, "strict": true, "strictNullChecks": true, - "target": "esnext", - "tsBuildInfoFile": "./build/.tsbuildinfo" + "target": "esnext" }, "include": ["src/**/*.js", "src/**/*.ts", "src/**/*.svelte", ".eslintrc.cjs", "vite.config.ts"] } diff --git a/packages/svelte-query/src/__tests__/CreateQuery.svelte b/packages/svelte-query/src/__tests__/CreateQuery.svelte index d64347258f..c702c66814 100644 --- a/packages/svelte-query/src/__tests__/CreateQuery.svelte +++ b/packages/svelte-query/src/__tests__/CreateQuery.svelte @@ -2,9 +2,9 @@ import { QueryClient } from '@tanstack/query-core' import { setQueryClientContext } from '../context' import { createQuery } from '../createQuery' - import type { CreateQueryOptions, WritableOrVal } from '../types' + import type { CreateQueryOptions } from '../types' - export let options: WritableOrVal> + export let options: CreateQueryOptions const queryClient = new QueryClient() setQueryClientContext(queryClient) diff --git a/packages/svelte-query/src/__tests__/createQuery.test.ts b/packages/svelte-query/src/__tests__/createQuery.test.ts index 0537f2a82c..47460e3d06 100644 --- a/packages/svelte-query/src/__tests__/createQuery.test.ts +++ b/packages/svelte-query/src/__tests__/createQuery.test.ts @@ -3,7 +3,7 @@ import { render, waitFor } from '@testing-library/svelte' import { writable } from 'svelte/store' import CreateQuery from './CreateQuery.svelte' import { sleep } from './utils' -import type { CreateQueryOptions, WritableOrVal } from '../types' +import type { CreateQueryOptions } from '../types' describe('createQuery', () => { it('Render and wait for success', async () => { @@ -29,7 +29,7 @@ describe('createQuery', () => { }) it('should keep previous data when returned as placeholder data', async () => { - const options: WritableOrVal = writable({ + const options: CreateQueryOptions = writable({ queryKey: ['test', [1]], queryFn: async ({ queryKey }) => { await sleep(10) diff --git a/packages/svelte-query/src/createBaseQuery.ts b/packages/svelte-query/src/createBaseQuery.ts index 430e2efb31..46130a002a 100644 --- a/packages/svelte-query/src/createBaseQuery.ts +++ b/packages/svelte-query/src/createBaseQuery.ts @@ -1,10 +1,6 @@ import type { QueryClient, QueryKey, QueryObserver } from '@tanstack/query-core' import { notifyManager } from '@tanstack/query-core' -import type { - CreateBaseQueryOptions, - CreateBaseQueryResult, - WritableOrVal, -} from './types' +import type { CreateBaseQueryOptions, CreateBaseQueryResult } from './types' import { useQueryClient } from './useQueryClient' import { derived, get, readable, writable } from 'svelte/store' import { isWritable } from './utils' @@ -16,8 +12,12 @@ export function createBaseQuery< TQueryData, TQueryKey extends QueryKey, >( - options: WritableOrVal< - CreateBaseQueryOptions + options: CreateBaseQueryOptions< + TQueryFnData, + TError, + TData, + TQueryData, + TQueryKey >, Observer: typeof QueryObserver, queryClient?: QueryClient, diff --git a/packages/svelte-query/src/createInfiniteQuery.ts b/packages/svelte-query/src/createInfiniteQuery.ts index 46f33e7eb3..78df0ec427 100644 --- a/packages/svelte-query/src/createInfiniteQuery.ts +++ b/packages/svelte-query/src/createInfiniteQuery.ts @@ -9,7 +9,6 @@ import { InfiniteQueryObserver } from '@tanstack/query-core' import type { CreateInfiniteQueryOptions, CreateInfiniteQueryResult, - WritableOrVal, } from './types' import { createBaseQuery } from './createBaseQuery' @@ -20,15 +19,13 @@ export function createInfiniteQuery< TQueryKey extends QueryKey = QueryKey, TPageParam = unknown, >( - options: WritableOrVal< - CreateInfiniteQueryOptions< - TQueryFnData, - TError, - TData, - TQueryFnData, - TQueryKey, - TPageParam - > + options: CreateInfiniteQueryOptions< + TQueryFnData, + TError, + TData, + TQueryFnData, + TQueryKey, + TPageParam >, queryClient?: QueryClient, ): CreateInfiniteQueryResult { diff --git a/packages/svelte-query/src/createMutation.ts b/packages/svelte-query/src/createMutation.ts index b9c37d3a91..58004ea29a 100644 --- a/packages/svelte-query/src/createMutation.ts +++ b/packages/svelte-query/src/createMutation.ts @@ -5,7 +5,6 @@ import type { CreateMutateFunction, CreateMutationOptions, CreateMutationResult, - WritableOrVal, } from './types' import { useQueryClient } from './useQueryClient' import { isWritable } from './utils' @@ -16,9 +15,7 @@ export function createMutation< TVariables = void, TContext = unknown, >( - options: WritableOrVal< - CreateMutationOptions - >, + options: CreateMutationOptions, queryClient?: QueryClient, ): CreateMutationResult { const client = useQueryClient(queryClient) diff --git a/packages/svelte-query/src/createQueries.ts b/packages/svelte-query/src/createQueries.ts index ac5e0de48c..d54cb265fc 100644 --- a/packages/svelte-query/src/createQueries.ts +++ b/packages/svelte-query/src/createQueries.ts @@ -6,24 +6,25 @@ import type { QueryObserverResult, DefaultError, QueriesObserverOptions, + QueryObserverOptions, } from '@tanstack/query-core' import { notifyManager, QueriesObserver } from '@tanstack/query-core' import { derived, get, readable, writable, type Readable } from 'svelte/store' -import type { CreateQueryOptions, WritableOrVal } from './types' +import type { WritableOrVal } from './types' import { useQueryClient } from './useQueryClient' import { isWritable } from './utils' // This defines the `CreateQueryOptions` that are accepted in `QueriesOptions` & `GetOptions`. // `placeholderData` function does not have a parameter -type CreateQueryOptionsForCreateQueries< +type QueryObserverOptionsForCreateQueries< TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, > = Omit< - CreateQueryOptions, + QueryObserverOptions, 'placeholderData' > & { placeholderData?: TQueryFnData | QueriesPlaceholderDataFunction @@ -39,33 +40,38 @@ type GetOptions = error?: infer TError data: infer TData } - ? CreateQueryOptionsForCreateQueries + ? QueryObserverOptionsForCreateQueries : T extends { queryFnData: infer TQueryFnData; error?: infer TError } - ? CreateQueryOptionsForCreateQueries + ? QueryObserverOptionsForCreateQueries : T extends { data: infer TData; error?: infer TError } - ? CreateQueryOptionsForCreateQueries + ? QueryObserverOptionsForCreateQueries : // Part 2: responsible for applying explicit type parameter to function arguments, if tuple [TQueryFnData, TError, TData] T extends [infer TQueryFnData, infer TError, infer TData] - ? CreateQueryOptionsForCreateQueries + ? QueryObserverOptionsForCreateQueries : T extends [infer TQueryFnData, infer TError] - ? CreateQueryOptionsForCreateQueries + ? QueryObserverOptionsForCreateQueries : T extends [infer TQueryFnData] - ? CreateQueryOptionsForCreateQueries + ? QueryObserverOptionsForCreateQueries : // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided T extends { queryFn?: QueryFunction select: (data: any) => infer TData } - ? CreateQueryOptionsForCreateQueries + ? QueryObserverOptionsForCreateQueries< + TQueryFnData, + Error, + TData, + TQueryKey + > : T extends { queryFn?: QueryFunction } - ? CreateQueryOptionsForCreateQueries< + ? QueryObserverOptionsForCreateQueries< TQueryFnData, Error, TQueryFnData, TQueryKey > : // Fallback - CreateQueryOptionsForCreateQueries + QueryObserverOptionsForCreateQueries type GetResults = // Part 1: responsible for mapping explicit type parameter to function result, if object @@ -101,7 +107,7 @@ export type QueriesOptions< Result extends any[] = [], Depth extends ReadonlyArray = [], > = Depth['length'] extends MAXIMUM_DEPTH - ? CreateQueryOptionsForCreateQueries[] + ? QueryObserverOptionsForCreateQueries[] : T extends [] ? [] : T extends [infer Head] @@ -112,15 +118,20 @@ export type QueriesOptions< ? T : // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type! // use this to infer the param types in the case of Array.map() argument - T extends CreateQueryOptionsForCreateQueries< + T extends QueryObserverOptionsForCreateQueries< infer TQueryFnData, infer TError, infer TData, infer TQueryKey >[] - ? CreateQueryOptionsForCreateQueries[] + ? QueryObserverOptionsForCreateQueries< + TQueryFnData, + TError, + TData, + TQueryKey + >[] : // Fallback - CreateQueryOptionsForCreateQueries[] + QueryObserverOptionsForCreateQueries[] /** * QueriesResults reducer recursively maps type param to results @@ -137,7 +148,7 @@ export type QueriesResults< ? [...Result, GetResults] : T extends [infer Head, ...infer Tail] ? QueriesResults<[...Tail], [...Result, GetResults], [...Depth, 1]> - : T extends CreateQueryOptionsForCreateQueries< + : T extends QueryObserverOptionsForCreateQueries< infer TQueryFnData, infer TError, infer TData, diff --git a/packages/svelte-query/src/createQuery.ts b/packages/svelte-query/src/createQuery.ts index 3851214623..ba12a3764d 100644 --- a/packages/svelte-query/src/createQuery.ts +++ b/packages/svelte-query/src/createQuery.ts @@ -5,7 +5,6 @@ import type { DefinedCreateQueryResult, CreateQueryOptions, CreateQueryResult, - WritableOrVal, } from './types' type UndefinedInitialDataOptions< @@ -32,9 +31,7 @@ export function createQuery< TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, >( - options: WritableOrVal< - UndefinedInitialDataOptions - >, + options: UndefinedInitialDataOptions, queryClient?: QueryClient, ): CreateQueryResult @@ -44,9 +41,7 @@ export function createQuery< TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, >( - options: WritableOrVal< - DefinedInitialDataOptions - >, + options: DefinedInitialDataOptions, queryClient?: QueryClient, ): DefinedCreateQueryResult @@ -56,9 +51,7 @@ export function createQuery< TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, >( - options: WritableOrVal< - CreateQueryOptions - >, + options: CreateQueryOptions, queryClient?: QueryClient, ) { return createBaseQuery(options, QueryObserver, queryClient) diff --git a/packages/svelte-query/src/types.ts b/packages/svelte-query/src/types.ts index f8ca30b8fe..39a058586e 100644 --- a/packages/svelte-query/src/types.ts +++ b/packages/svelte-query/src/types.ts @@ -10,87 +10,91 @@ import type { DefinedQueryObserverResult, DefaultError, } from '@tanstack/query-core' -import type { QueryClient } from '@tanstack/query-core' import type { Readable, Writable } from 'svelte/store' +/** Allows a type to be either the base object or a store of that object */ export type WritableOrVal = T | Writable -export interface ContextOptions { - /** - * Use this to pass your Svelte Query context. Otherwise, `defaultContext` will be used. - */ - context?: QueryClient | undefined -} - -export interface CreateBaseQueryOptions< +/** Options for createBaseQuery */ +export type CreateBaseQueryOptions< TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, -> extends ContextOptions, - QueryObserverOptions {} +> = WritableOrVal< + QueryObserverOptions +> -export interface CreateBaseQueryResult - extends Readable> {} +/** Result from createBaseQuery */ +export type CreateBaseQueryResult< + TData = unknown, + TError = DefaultError, +> = Readable> -export interface CreateQueryOptions< +/** Options for createQuery */ +export type CreateQueryOptions< TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, -> extends CreateBaseQueryOptions< - TQueryFnData, - TError, - TData, - TQueryFnData, - TQueryKey - > {} +> = CreateBaseQueryOptions -export interface CreateQueryResult - extends CreateBaseQueryResult {} +/** Result from createQuery */ +export type CreateQueryResult< + TData = unknown, + TError = DefaultError, +> = CreateBaseQueryResult -export interface CreateInfiniteQueryOptions< +/** Options for createInfiniteQuery */ +export type CreateInfiniteQueryOptions< TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown, -> extends InfiniteQueryObserverOptions< +> = WritableOrVal< + InfiniteQueryObserverOptions< TQueryFnData, TError, TData, TQueryData, TQueryKey, TPageParam - > {} + > +> +/** Result from createInfiniteQuery */ export type CreateInfiniteQueryResult< TData = unknown, TError = DefaultError, > = Readable> +/** Options for createBaseQuery with initialData */ export type DefinedCreateBaseQueryResult< TData = unknown, TError = DefaultError, > = Readable> +/** Options for createQuery with initialData */ export type DefinedCreateQueryResult< TData = unknown, TError = DefaultError, > = DefinedCreateBaseQueryResult -export interface CreateMutationOptions< +/** Options for createMutation */ +export type CreateMutationOptions< TData = unknown, TError = DefaultError, TVariables = void, TContext = unknown, -> extends ContextOptions, - Omit< - MutationObserverOptions, - '_defaulted' | 'variables' - > {} +> = WritableOrVal< + Omit< + MutationObserverOptions, + '_defaulted' | 'variables' + > +> export type CreateMutateFunction< TData = unknown, @@ -120,13 +124,12 @@ export type CreateBaseMutationResult< mutateAsync: CreateMutateAsyncFunction } -export interface CreateMutationResult< +/** Result from createMutation */ +export type CreateMutationResult< TData = unknown, TError = DefaultError, TVariables = unknown, TContext = unknown, -> extends Readable< - CreateBaseMutationResult - > {} +> = Readable> type Override = { [K in keyof A]: K extends keyof B ? B[K] : A[K] } diff --git a/packages/svelte-query/tsconfig.json b/packages/svelte-query/tsconfig.json index 54793c3205..e1f81ad88f 100644 --- a/packages/svelte-query/tsconfig.json +++ b/packages/svelte-query/tsconfig.json @@ -5,9 +5,7 @@ "checkJs": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, - "importsNotUsedAsValues": "error", "isolatedModules": true, - "preserveValueImports": true, "lib": ["esnext", "DOM", "DOM.Iterable"], "moduleResolution": "node", "module": "esnext", @@ -24,7 +22,6 @@ "strict": true, "strictNullChecks": true, "target": "esnext", - "tsBuildInfoFile": "./build/.tsbuildinfo", "types": ["vitest/globals", "@testing-library/jest-dom"] }, "include": ["src/**/*.js", "src/**/*.ts", "src/**/*.svelte", ".eslintrc.cjs", "vite.config.ts"]