diff --git a/packages/clients/tanstack-query/package.json b/packages/clients/tanstack-query/package.json index 6e0f775e..1ffc31bc 100644 --- a/packages/clients/tanstack-query/package.json +++ b/packages/clients/tanstack-query/package.json @@ -43,6 +43,16 @@ "default": "./dist/vue.cjs" } }, + "./svelte": { + "import": { + "types": "./dist/svelte.d.ts", + "default": "./dist/svelte.js" + }, + "require": { + "types": "./dist/svelte.d.cts", + "default": "./dist/svelte.cjs" + } + }, "./package.json": { "import": "./package.json", "require": "./package.json" @@ -57,6 +67,7 @@ }, "devDependencies": { "@tanstack/react-query": "catalog:", + "@tanstack/svelte-query": "5.90.2", "@tanstack/vue-query": "5.90.6", "@testing-library/dom": "^10.4.1", "@testing-library/react": "^16.3.0", @@ -69,11 +80,13 @@ "happy-dom": "^20.0.10", "nock": "^14.0.10", "react": "catalog:", - "vue": "catalog:" + "vue": "catalog:", + "svelte": "catalog:" }, "peerDependencies": { "@tanstack/react-query": "^5.0.0", - "@tanstack/vue-query": "^5.0.0" + "@tanstack/vue-query": "^5.0.0", + "@tanstack/svelte-query": "^5.0.0" }, "peerDependenciesMeta": { "@tanstack/react-query": { @@ -81,6 +94,9 @@ }, "@tanstack/vue-query": { "optional": true + }, + "@tanstack/svelte-query": { + "optional": true } } } diff --git a/packages/clients/tanstack-query/src/react.ts b/packages/clients/tanstack-query/src/react.ts index 6e5de2fd..05962d87 100644 --- a/packages/clients/tanstack-query/src/react.ts +++ b/packages/clients/tanstack-query/src/react.ts @@ -37,6 +37,7 @@ import type { GroupByResult, ModelResult, SelectSubset, + Subset, UpdateArgs, UpdateManyAndReturnArgs, UpdateManyArgs, @@ -200,26 +201,32 @@ export type ModelQueryHooks; useCount>( + args?: Subset>, options?: ModelQueryOptions>, ): ModelQueryResult>; useSuspenseCount>( + args?: Subset>, options?: ModelSuspenseQueryOptions>, ): ModelSuspenseQueryResult>; useAggregate>( + args: Subset>, options?: ModelQueryOptions>, ): ModelQueryResult>; useSuspenseAggregate>( + args: Subset>, options?: ModelSuspenseQueryOptions>, ): ModelSuspenseQueryResult>; useGroupBy>( + args: Subset>, options?: ModelQueryOptions>, ): ModelQueryResult>; useSuspenseGroupBy>( + args: Subset>, options?: ModelSuspenseQueryOptions>, ): ModelSuspenseQueryResult>; }; diff --git a/packages/clients/tanstack-query/src/svelte.ts b/packages/clients/tanstack-query/src/svelte.ts new file mode 100644 index 00000000..b2b5961e --- /dev/null +++ b/packages/clients/tanstack-query/src/svelte.ts @@ -0,0 +1,469 @@ +import { + createInfiniteQuery, + createMutation, + createQuery, + useQueryClient, + type CreateInfiniteQueryOptions, + type CreateInfiniteQueryResult, + type CreateMutationOptions, + type CreateMutationResult, + type CreateQueryOptions, + type CreateQueryResult, + type DefaultError, + type InfiniteData, + type QueryFunction, + type QueryKey, + type StoreOrVal, +} from '@tanstack/svelte-query'; +import { lowerCaseFirst } from '@zenstackhq/common-helpers'; +import type { + AggregateArgs, + AggregateResult, + BatchResult, + CountArgs, + CountResult, + CreateArgs, + CreateManyAndReturnArgs, + CreateManyArgs, + DeleteArgs, + DeleteManyArgs, + FindArgs, + FindUniqueArgs, + GroupByArgs, + GroupByResult, + ModelResult, + SelectSubset, + Subset, + UpdateArgs, + UpdateManyAndReturnArgs, + UpdateManyArgs, + UpsertArgs, +} from '@zenstackhq/orm'; +import type { GetModels, SchemaDef } from '@zenstackhq/schema'; +import { getContext, setContext } from 'svelte'; +import { derived, get, type Readable } from 'svelte/store'; +import { + fetcher, + getQueryKey, + makeUrl, + marshal, + setupInvalidation, + setupOptimisticUpdate, + type APIContext, + type ExtraMutationOptions, + type ExtraQueryOptions, +} from './utils/common'; + +export type { FetchFn } from './utils/common'; + +/** + * The default query endpoint. + */ +export const DEFAULT_QUERY_ENDPOINT = '/api/model'; + +/** + * Key for setting and getting the global query context. + */ +export const SvelteQueryContextKey = 'zenstack-svelte-query-context'; + +/** + * Set context for query settings. + * + * @deprecated use {@link setQuerySettingsContext} instead. + */ +export function setHooksContext(context: APIContext) { + setContext(SvelteQueryContextKey, context); +} + +/** + * Set context for query settings. + */ +export function setQuerySettingsContext(context: APIContext) { + setContext(SvelteQueryContextKey, context); +} + +function getQuerySettings() { + const { endpoint, ...rest } = getContext(SvelteQueryContextKey) ?? {}; + return { endpoint: endpoint ?? DEFAULT_QUERY_ENDPOINT, ...rest }; +} + +export type ModelQueryOptions = Omit, 'queryKey'> & ExtraQueryOptions; + +export type ModelQueryResult = Readable> & { queryKey: QueryKey }>; + +export type ModelInfiniteQueryOptions = Omit< + CreateInfiniteQueryOptions>, + 'queryKey' | 'initialPageParam' +>; + +export type ModelInfiniteQueryResult = Readable< + UnwrapStore> & { + queryKey: QueryKey; + } +>; + +export type ModelMutationOptions = Omit, 'mutationFn'> & + ExtraMutationOptions; + +export type ModelMutationResult = CreateMutationResult; + +export type SchemaHooks = { + [Model in GetModels as `${Uncapitalize}`]: ModelQueryHooks; +}; + +export type ModelQueryHooks> = { + useFindUnique>( + args: SelectSubset>, + options?: ModelQueryOptions | null>, + ): ModelQueryResult | null>; + + useFindFirst>( + args?: SelectSubset>, + options?: ModelQueryOptions | null>, + ): ModelQueryResult | null>; + + useFindMany>( + args?: SelectSubset>, + options?: ModelQueryOptions[]>, + ): ModelQueryResult[]>; + + useInfiniteFindMany>( + args?: SelectSubset>, + options?: ModelInfiniteQueryOptions[]>, + ): ModelInfiniteQueryResult[]>>; + + useCreate>( + options?: ModelMutationOptions, T>, + ): ModelMutationResult, T>; + + useCreateMany>( + options?: ModelMutationOptions, + ): ModelMutationResult; + + useCreateManyAndReturn>( + options?: ModelMutationOptions[], T>, + ): ModelMutationResult[], T>; + + useUpdate>( + options?: ModelMutationOptions, T>, + ): ModelMutationResult, T>; + + useUpdateMany>( + options?: ModelMutationOptions, + ): ModelMutationResult; + + useUpdateManyAndReturn>( + options?: ModelMutationOptions[], T>, + ): ModelMutationResult[], T>; + + useUpsert>( + options?: ModelMutationOptions, T>, + ): ModelMutationResult, T>; + + useDelete>( + options?: ModelMutationOptions, T>, + ): ModelMutationResult, T>; + + useDeleteMany>( + options?: ModelMutationOptions, + ): ModelMutationResult; + + useCount>( + args?: Subset>, + options?: ModelQueryOptions>, + ): ModelQueryResult>; + + useAggregate>( + args: Subset>, + options?: ModelQueryOptions>, + ): ModelQueryResult>; + + useGroupBy>( + args: Subset>, + options?: ModelQueryOptions>, + ): ModelQueryResult>; +}; + +/** + * Gets data query hooks for all models in the schema. + */ +export function useClientQueries(schema: Schema): SchemaHooks { + return Object.keys(schema.models).reduce((acc, model) => { + (acc as any)[lowerCaseFirst(model)] = useModelQueries(schema, model as GetModels); + return acc; + }, {} as SchemaHooks); +} + +/** + * Gets data query hooks for a specific model in the schema. + */ +export function useModelQueries>( + schema: Schema, + model: Model, +): ModelQueryHooks { + const modelDef = Object.values(schema.models).find((m) => m.name.toLowerCase() === model.toLowerCase()); + if (!modelDef) { + throw new Error(`Model "${model}" not found in schema`); + } + + const modelName = modelDef.name; + + return { + useFindUnique: (args: any, options?: any) => { + return useInternalQuery(schema, modelName, 'findUnique', args, options); + }, + + useFindFirst: (args: any, options?: any) => { + return useInternalQuery(schema, modelName, 'findFirst', args, options); + }, + + useFindMany: (args: any, options?: any) => { + return useInternalQuery(schema, modelName, 'findMany', args, options); + }, + + useInfiniteFindMany: (args: any, options?: any) => { + return useInternalInfiniteQuery(schema, modelName, 'findMany', args, options); + }, + + useCreate: (options?: any) => { + return useInternalMutation(schema, modelName, 'POST', 'create', options, true); + }, + + useCreateMany: (options?: any) => { + return useInternalMutation(schema, modelName, 'POST', 'createMany', options, false); + }, + + useCreateManyAndReturn: (options?: any) => { + return useInternalMutation(schema, modelName, 'POST', 'createManyAndReturn', options, true); + }, + + useUpdate: (options?: any) => { + return useInternalMutation(schema, modelName, 'PUT', 'update', options, true); + }, + + useUpdateMany: (options?: any) => { + return useInternalMutation(schema, modelName, 'PUT', 'updateMany', options, false); + }, + + useUpdateManyAndReturn: (options?: any) => { + return useInternalMutation(schema, modelName, 'PUT', 'updateManyAndReturn', options, true); + }, + + useUpsert: (options?: any) => { + return useInternalMutation(schema, modelName, 'POST', 'upsert', options, true); + }, + + useDelete: (options?: any) => { + return useInternalMutation(schema, modelName, 'DELETE', 'delete', options, true); + }, + + useDeleteMany: (options?: any) => { + return useInternalMutation(schema, modelName, 'DELETE', 'deleteMany', options, false); + }, + + useCount: (options?: any) => { + return useInternalQuery(schema, modelName, 'count', undefined, options); + }, + + useAggregate: (options?: any) => { + return useInternalQuery(schema, modelName, 'aggregate', undefined, options); + }, + + useGroupBy: (options?: any) => { + return useInternalQuery(schema, modelName, 'groupBy', undefined, options); + }, + } as ModelQueryHooks; +} + +export function useInternalQuery( + _schema: SchemaDef, + model: string, + operation: string, + args?: StoreOrVal, + options?: StoreOrVal, 'queryKey'> & ExtraQueryOptions>, +) { + const { endpoint, fetch } = getQuerySettings(); + const argsValue = unwrapStore(args); + const reqUrl = makeUrl(endpoint, model, operation, argsValue); + const optionsValue = unwrapStore(options); + const queryKey = getQueryKey(model, operation, argsValue, { + infinite: false, + optimisticUpdate: optionsValue?.optimisticUpdate !== false, + }); + const queryFn: QueryFunction = ({ signal }) => + fetcher(reqUrl, { signal }, fetch, false); + + let mergedOpt: any; + if (isStore(options)) { + // options is store + mergedOpt = derived([options], ([$opt]) => { + return { + queryKey, + queryFn, + ...($opt as object), + }; + }); + } else { + // options is value + mergedOpt = { + queryKey, + queryFn, + ...options, + }; + } + + const result = createQuery(mergedOpt); + return derived(result, (r) => ({ + queryKey, + ...r, + })); +} + +export function useInternalInfiniteQuery( + _schema: SchemaDef, + model: string, + operation: string, + args: StoreOrVal, + options: StoreOrVal< + Omit< + CreateInfiniteQueryOptions>, + 'queryKey' | 'initialPageParam' + > + >, +) { + const { endpoint, fetch } = getQuerySettings(); + const argsValue = unwrapStore(args); + const queryKey = getQueryKey(model, operation, argsValue, { infinite: true, optimisticUpdate: false }); + const queryFn: QueryFunction = ({ pageParam, signal }) => + fetcher( + makeUrl(endpoint, model, operation, pageParam ?? argsValue), + { signal }, + fetch, + false, + ); + + let mergedOpt: StoreOrVal>>; + if (isStore(options)) { + // options is store + mergedOpt = derived([options], ([$opt]) => { + return { + queryKey, + queryFn, + initialPageParam: argsValue, + ...$opt, + }; + }); + } else { + // options is value + mergedOpt = { + queryKey, + queryFn, + initialPageParam: argsValue, + ...options, + }; + } + + const result = createInfiniteQuery>(mergedOpt); + return derived(result, (r) => ({ + queryKey, + ...r, + })); +} + +/** + * Creates a svelte-query mutation + * + * @private + * + * @param model The name of the model under mutation. + * @param method The HTTP method. + * @param operation The mutation operation (e.g. `create`). + * @param options The svelte-query options. + * @param checkReadBack Whether to check for read back errors and return undefined if found. + */ +export function useInternalMutation< + TArgs, + R = any, + C extends boolean = boolean, + Result = C extends true ? R | undefined : R, +>( + schema: SchemaDef, + model: string, + method: 'POST' | 'PUT' | 'DELETE', + operation: string, + options?: StoreOrVal, 'mutationFn'> & ExtraMutationOptions>, + checkReadBack?: C, +) { + const { endpoint, fetch, logging } = getQuerySettings(); + const queryClient = useQueryClient(); + const optionsValue = unwrapStore(options); + const mutationFn = (data: any) => { + const reqUrl = + method === 'DELETE' ? makeUrl(endpoint, model, operation, data) : makeUrl(endpoint, model, operation); + const fetchInit: RequestInit = { + method, + ...(method !== 'DELETE' && { + headers: { + 'content-type': 'application/json', + }, + body: marshal(data), + }), + }; + return fetcher(reqUrl, fetchInit, fetch, checkReadBack) as Promise; + }; + + let mergedOpt: StoreOrVal>; + + if (isStore(options)) { + mergedOpt = derived([options], ([$opt]) => ({ + ...$opt, + mutationFn, + })); + } else { + mergedOpt = { + ...options, + mutationFn, + }; + } + + const invalidateQueries = optionsValue?.invalidateQueries !== false; + const optimisticUpdate = !!optionsValue?.optimisticUpdate; + + if (operation) { + if (invalidateQueries) { + setupInvalidation( + model, + operation, + schema, + unwrapStore(mergedOpt), + (predicate) => queryClient.invalidateQueries({ predicate }), + logging, + ); + } + + if (optimisticUpdate) { + setupOptimisticUpdate( + model, + operation, + schema, + unwrapStore(mergedOpt), + queryClient.getQueryCache().getAll(), + (queryKey, data) => queryClient.setQueryData(queryKey, data), + invalidateQueries ? (predicate) => queryClient.invalidateQueries({ predicate }) : undefined, + logging, + ); + } + } + + return createMutation(mergedOpt); +} + +function isStore(opt: unknown): opt is Readable { + return typeof (opt as any)?.subscribe === 'function'; +} + +function unwrapStore(storeOrValue: StoreOrVal): T { + return isStore(storeOrValue) ? get(storeOrValue) : storeOrValue; +} + +type UnwrapStore = T extends Readable ? U : T; diff --git a/packages/clients/tanstack-query/src/vue.ts b/packages/clients/tanstack-query/src/vue.ts index 742c58de..990f1bc4 100644 --- a/packages/clients/tanstack-query/src/vue.ts +++ b/packages/clients/tanstack-query/src/vue.ts @@ -31,6 +31,7 @@ import type { GroupByResult, ModelResult, SelectSubset, + Subset, UpdateArgs, UpdateManyAndReturnArgs, UpdateManyArgs, @@ -157,14 +158,17 @@ export type ModelQueryHooks; useCount>( + args?: Subset>, options?: ModelQueryOptions>, ): ModelQueryResult>; useAggregate>( + args: Subset>, options?: ModelQueryOptions>, ): ModelQueryResult>; useGroupBy>( + args: Subset>, options?: ModelQueryOptions>, ): ModelQueryResult>; }; diff --git a/packages/clients/tanstack-query/tsup.config.ts b/packages/clients/tanstack-query/tsup.config.ts index 00bcc071..1bfafb93 100644 --- a/packages/clients/tanstack-query/tsup.config.ts +++ b/packages/clients/tanstack-query/tsup.config.ts @@ -4,6 +4,7 @@ export default defineConfig({ entry: { react: 'src/react.ts', vue: 'src/vue.ts', + svelte: 'src/svelte.ts', }, outDir: 'dist', splitting: false, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dcd772f0..cea73983 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,7 +29,7 @@ catalogs: version: 12.2.0 decimal.js: specifier: ^10.4.3 - version: 10.4.3 + version: 10.6.0 kysely: specifier: ^0.27.6 version: 0.27.6 @@ -54,6 +54,9 @@ catalogs: react-dom: specifier: 19.2.0 version: 19.2.0 + svelte: + specifier: 5.43.3 + version: 5.43.3 tmp: specifier: ^0.2.3 version: 0.2.3 @@ -197,7 +200,7 @@ importers: version: link:../../schema decimal.js: specifier: 'catalog:' - version: 10.4.3 + version: 10.6.0 superjson: specifier: ^2.2.3 version: 2.2.3 @@ -205,6 +208,9 @@ importers: '@tanstack/react-query': specifier: 'catalog:' version: 5.90.6(react@19.2.0) + '@tanstack/svelte-query': + specifier: 5.90.2 + version: 5.90.2(svelte@5.43.3) '@tanstack/vue-query': specifier: 5.90.6 version: 5.90.6(vue@3.5.22(typescript@5.8.3)) @@ -241,6 +247,9 @@ importers: react: specifier: 'catalog:' version: 19.2.0 + svelte: + specifier: 'catalog:' + version: 5.43.3 vue: specifier: 'catalog:' version: 3.5.22(typescript@5.8.3) @@ -381,7 +390,7 @@ importers: version: 12.2.0 decimal.js: specifier: 'catalog:' - version: 10.4.3 + version: 10.6.0 json-stable-stringify: specifier: ^1.3.0 version: 1.3.0 @@ -470,7 +479,7 @@ importers: dependencies: decimal.js: specifier: 'catalog:' - version: 10.4.3 + version: 10.6.0 devDependencies: '@zenstackhq/eslint-config': specifier: workspace:* @@ -505,7 +514,7 @@ importers: version: link:../config/typescript-config decimal.js: specifier: 'catalog:' - version: 10.4.3 + version: 10.6.0 kysely: specifier: 'catalog:' version: 0.27.6 @@ -520,7 +529,7 @@ importers: version: link:../orm decimal.js: specifier: 'catalog:' - version: 10.4.3 + version: 10.6.0 superjson: specifier: ^2.2.3 version: 2.2.3 @@ -539,7 +548,7 @@ importers: devDependencies: '@sveltejs/kit': specifier: ^2.48.3 - version: 2.48.3(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.0)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.43.0)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) + version: 2.48.3(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) '@types/body-parser': specifier: ^1.19.6 version: 1.19.6 @@ -801,7 +810,7 @@ importers: version: 12.2.0 decimal.js: specifier: 'catalog:' - version: 10.4.3 + version: 10.6.0 kysely: specifier: 'catalog:' version: 0.27.6 @@ -829,7 +838,7 @@ importers: version: link:../../packages/testtools decimal.js: specifier: 'catalog:' - version: 10.4.3 + version: 10.6.0 devDependencies: '@zenstackhq/cli': specifier: workspace:* @@ -2687,6 +2696,9 @@ packages: resolution: {integrity: sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==} engines: {node: '>=12'} + '@tanstack/query-core@5.90.2': + resolution: {integrity: sha512-k/TcR3YalnzibscALLwxeiLUub6jN5EDLwKDiO7q5f4ICEoptJ+n9+7vcEFy5/x/i6Q+Lb/tXrsKCggf5uQJXQ==} + '@tanstack/query-core@5.90.6': resolution: {integrity: sha512-AnZSLF26R8uX+tqb/ivdrwbVdGemdEDm1Q19qM6pry6eOZ6bEYiY7mWhzXT1YDIPTNEVcZ5kYP9nWjoxDLiIVw==} @@ -2695,6 +2707,11 @@ packages: peerDependencies: react: ^18 || ^19 + '@tanstack/svelte-query@5.90.2': + resolution: {integrity: sha512-owjnp0w8sOXlMhLZhucHrsYvCjgjHrVyII/wlqMGefxKFyroZS3xCwTee+IUx7UHbL+QmKr/HQTeTqhgxmxPQw==} + peerDependencies: + svelte: ^3.54.0 || ^4.0.0 || ^5.0.0 + '@tanstack/vue-query@5.90.6': resolution: {integrity: sha512-7lKXKuTkX8XPjNd3g71B39JDE5B83Gtrr+yDPs5DiHm5wsM80OcwolLYkXumOM8+7VSm6ZYCrI9HSWszTIx5Gw==} peerDependencies: @@ -3845,9 +3862,6 @@ packages: supports-color: optional: true - decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} @@ -6626,8 +6640,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svelte@5.43.0: - resolution: {integrity: sha512-1sRxVbgJAB+UGzwkc3GUoiBSzEOf0jqzccMaVoI2+pI+kASUe9qubslxace8+Mzhqw19k4syTA5niCIJwfXpOA==} + svelte@5.43.3: + resolution: {integrity: sha512-kjkAjCk41mJfvJZG56XcJNOdJSke94JxtcX8zFzzz2vrt47E0LnoBzU6azIZ1aBxJgUep8qegAkguSf1GjxLXQ==} engines: {node: '>=18'} svgo@4.0.0: @@ -8124,8 +8138,8 @@ snapshots: '@jridgewell/remapping@2.3.5': dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/resolve-uri@3.1.2': {} @@ -8133,8 +8147,8 @@ snapshots: '@jridgewell/source-map@0.3.11': dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/sourcemap-codec@1.5.0': {} @@ -9040,11 +9054,11 @@ snapshots: dependencies: acorn: 8.15.0 - '@sveltejs/kit@2.48.3(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.0)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.43.0)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))': + '@sveltejs/kit@2.48.3(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))': dependencies: '@standard-schema/spec': 1.0.0 '@sveltejs/acorn-typescript': 1.0.6(acorn@8.15.0) - '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.43.0)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) '@types/cookie': 0.6.0 acorn: 8.15.0 cookie: 0.6.0 @@ -9056,25 +9070,25 @@ snapshots: sade: 1.8.1 set-cookie-parser: 2.7.2 sirv: 3.0.2 - svelte: 5.43.0 + svelte: 5.43.3 vite: 7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) - '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.0)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.43.0)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))': + '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))': dependencies: - '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.43.0)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) debug: 4.4.1 - svelte: 5.43.0 + svelte: 5.43.3 vite: 7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.0)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))': + '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.0)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.43.0)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) + '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.43.3)(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) debug: 4.4.1 deepmerge: 4.3.1 magic-string: 0.30.21 - svelte: 5.43.0 + svelte: 5.43.3 vite: 7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1) vitefu: 1.1.1(vite@7.1.12(@types/node@20.17.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.1)) transitivePeerDependencies: @@ -9212,6 +9226,8 @@ snapshots: dependencies: remove-accents: 0.5.0 + '@tanstack/query-core@5.90.2': {} + '@tanstack/query-core@5.90.6': {} '@tanstack/react-query@5.90.6(react@19.2.0)': @@ -9219,6 +9235,11 @@ snapshots: '@tanstack/query-core': 5.90.6 react: 19.2.0 + '@tanstack/svelte-query@5.90.2(svelte@5.43.3)': + dependencies: + '@tanstack/query-core': 5.90.2 + svelte: 5.43.3 + '@tanstack/vue-query@5.90.6(vue@3.5.22(typescript@5.8.3))': dependencies: '@tanstack/match-sorter-utils': 8.19.4 @@ -10549,10 +10570,7 @@ snapshots: dependencies: ms: 2.1.3 - decimal.js@10.4.3: {} - - decimal.js@10.6.0: - optional: true + decimal.js@10.6.0: {} decompress-response@6.0.0: dependencies: @@ -13881,7 +13899,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte@5.43.0: + svelte@5.43.3: dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 351849ee..85916fa7 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -25,3 +25,4 @@ catalog: '@tanstack/react-query': 5.90.6 'next': 16.0.1 'vue': 3.5.22 + 'svelte': 5.43.3