@supabase-cache-helpers/postgrest-swr
Version:
A collection of SWR utilities for working with Supabase.
1 lines • 93.5 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts","../src/cache/use-delete-item.ts","../src/lib/constants.ts","../src/lib/create-key-getter.ts","../src/lib/parse-order-by.ts","../src/lib/decode.ts","../src/lib/encode.ts","../src/lib/middleware.ts","../src/lib/use-postgrest-filter-cache.ts","../src/lib/use-queries-for-table-loader.ts","../src/lib/mutable-keys.ts","../src/cache/use-mutate-item.ts","../src/cache/use-revalidate-tables.ts","../src/cache/use-upsert-item.ts","../src/mutate/use-delete-many-mutation.ts","../src/mutate/use-random-key.ts","../src/mutate/use-delete-mutation.ts","../src/mutate/use-insert-mutation.ts","../src/mutate/get-user-response.ts","../src/mutate/use-update-mutation.ts","../src/mutate/use-upsert-mutation.ts","../src/query/prefetch.ts","../src/query/use-cursor-infinite-scroll-query.ts","../src/query/use-offset-infinite-query.ts","../src/query/use-offset-infinite-scroll-query.ts","../src/query/use-infinite-offset-pagination-query.ts","../src/query/use-query.ts","../src/subscribe/use-subscription-query.ts","../src/subscribe/use-subscription.ts"],"sourcesContent":["export type {\n PostgrestHasMorePaginationCacheData,\n PostgrestPaginationCacheData,\n} from '@supabase-cache-helpers/postgrest-core';\n\nexport * from './cache';\nexport * from './lib';\nexport * from './mutate';\nexport * from './query';\nexport * from './subscribe';\n","import {\n type DeleteItemOperation,\n deleteItem,\n} from '@supabase-cache-helpers/postgrest-core';\nimport { flatten } from 'flat';\nimport { type MutatorOptions, useSWRConfig } from 'swr';\n\nimport { decode, usePostgrestFilterCache } from '../lib';\nimport { getMutableKeys } from '../lib/mutable-keys';\n\n/**\n * Returns a function that can be used to delete an item into the SWR cache.\n * This hook does not make any HTTP requests and is intended to be used for custom cache updates.\n *\n * @param opts - Options for the delete operation, excluding the input record.\n *\n * @returns A function that takes a record of type `Type` and returns a promise that resolves once the record has been deleted from the cache.\n * **/\nexport function useDeleteItem<Type extends Record<string, unknown>>(\n opts: Omit<DeleteItemOperation<Type>, 'input'> & MutatorOptions<Type>,\n): (input: Type) => Promise<void> {\n const { mutate, cache } = useSWRConfig();\n const getPostgrestFilter = usePostgrestFilterCache();\n\n return async (input: Type) =>\n await deleteItem<string, Type>(\n {\n input: flatten(input) as Type,\n ...opts,\n },\n {\n cacheKeys: getMutableKeys(Array.from(cache.keys())),\n getPostgrestFilter,\n revalidate: (key) => {\n mutate(key);\n },\n mutate: (key, data) => {\n mutate(key, data, { ...opts, revalidate: opts?.revalidate ?? false });\n },\n decode,\n },\n );\n}\n","export const KEY_PREFIX = 'postgrest';\nexport const POSTGREST_FILTER_KEY_PREFIX = 'postgrest-filter';\nexport const KEY_SEPARATOR = '$';\nexport const INFINITE_PREFIX = '$inf$';\nexport const INFINITE_KEY_PREFIX = 'page';\n","import {\n type PostgrestHasMorePaginationResponse,\n type PostgrestPaginationResponse,\n get,\n isPlainObject,\n isPostgrestHasMorePaginationResponse,\n isPostgrestPaginationResponse,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type { PostgrestTransformBuilder } from '@supabase/postgrest-js';\nimport { GenericSchema } from '@supabase/postgrest-js/dist/cjs/types';\nimport { parseOrderBy } from './parse-order-by';\n\nexport const createOffsetKeyGetter = <\n Schema extends GenericSchema,\n Table extends Record<string, unknown>,\n Result,\n>(\n queryFactory: (() => PostgrestTransformBuilder<Schema, Table, Result>) | null,\n {\n pageSize,\n rpcArgs,\n }: {\n pageSize: number;\n rpcArgs?: { limit: string; offset: string };\n },\n) => {\n if (!queryFactory) return () => null;\n return (\n pageIndex: number,\n previousPageData: (\n | PostgrestHasMorePaginationResponse<Result>\n | PostgrestPaginationResponse<Result>\n )[],\n ) => {\n if (\n previousPageData &&\n ((isPostgrestHasMorePaginationResponse(previousPageData) &&\n !previousPageData.data.length) ||\n (isPostgrestPaginationResponse(previousPageData) &&\n !previousPageData.length))\n ) {\n return null;\n }\n const cursor = pageIndex * pageSize;\n\n const query = queryFactory();\n\n if (rpcArgs) {\n if (query['method'] === 'GET') {\n query['url'].searchParams.set(rpcArgs.limit, String(pageSize));\n query['url'].searchParams.set(rpcArgs.offset, String(cursor));\n } else {\n query['body'] = {\n ...(isPlainObject(query['body']) ? query['body'] : {}),\n [rpcArgs.limit]: pageSize,\n [rpcArgs.offset]: cursor,\n };\n }\n\n return query;\n }\n\n return query.range(cursor, cursor + pageSize - 1);\n };\n};\n\nexport const createCursorKeyGetter = <\n Schema extends GenericSchema,\n Table extends Record<string, unknown>,\n Result,\n>(\n queryFactory: (() => PostgrestTransformBuilder<Schema, Table, Result>) | null,\n {\n orderBy,\n uqOrderBy: uqColumn,\n rpcArgs,\n }: {\n orderBy: string;\n uqOrderBy?: string;\n rpcArgs?: { orderBy: string; uqOrderBy?: string };\n },\n) => {\n if (!queryFactory) return () => null;\n\n return (\n _pageIndex: number,\n previousPageData: (\n | PostgrestHasMorePaginationResponse<Result>\n | PostgrestPaginationResponse<Result>\n )[],\n ) => {\n // Return null if we've reached the end of the data\n if (previousPageData && isEmptyPreviousPage(previousPageData)) {\n return null;\n }\n\n const query = queryFactory();\n\n // If this is the first page, return the original query\n if (!previousPageData) return query;\n\n // Extract the last values for cursor-based pagination\n const lastItem = getLastItem(previousPageData);\n\n if (!lastItem) return query;\n\n const lastValueOrderBy = get(lastItem, orderBy);\n if (!lastValueOrderBy) return query;\n\n const lastValueUqColumn = uqColumn ? get(lastItem, uqColumn) : null;\n\n if (rpcArgs) {\n if (query['method'] === 'GET') {\n if (lastValueOrderBy) {\n query['url'].searchParams.set(rpcArgs.orderBy, lastValueOrderBy);\n }\n if (lastValueUqColumn && rpcArgs.uqOrderBy) {\n query['url'].searchParams.set(rpcArgs.uqOrderBy, lastValueUqColumn);\n }\n } else {\n query['body'] = {\n ...(isPlainObject(query['body']) ? query['body'] : {}),\n [rpcArgs.orderBy]: lastValueOrderBy,\n ...(lastValueUqColumn && rpcArgs.uqOrderBy\n ? { [rpcArgs.uqOrderBy]: lastValueUqColumn }\n : {}),\n };\n }\n\n return query;\n }\n\n const { orderBy: mainOrderBy, uqOrderBy } = parseOrderBy(\n query['url'].searchParams,\n { orderByPath: orderBy, uqOrderByPath: uqColumn },\n );\n\n // Apply cursor filters\n if (uqColumn && uqOrderBy && lastValueOrderBy && lastValueUqColumn) {\n const operator = mainOrderBy.ascending ? 'gt' : 'lt';\n const uqOperator = uqOrderBy.ascending ? 'gt' : 'lt';\n\n query['url'].searchParams.append(\n 'or',\n `(${orderBy}.${operator}.${lastValueOrderBy},and(${orderBy}.eq.${lastValueOrderBy},${uqColumn}.${uqOperator}.${lastValueUqColumn}))`,\n );\n } else if (lastValueOrderBy) {\n const operator = mainOrderBy.ascending ? 'gt' : 'lt';\n query['url'].searchParams.append(\n orderBy,\n `${operator}.${lastValueOrderBy}`,\n );\n }\n\n return query;\n };\n};\n\n// Helper functions\nfunction isEmptyPreviousPage<Result>(\n previousPageData: (\n | PostgrestHasMorePaginationResponse<Result>\n | PostgrestPaginationResponse<Result>\n )[],\n): boolean {\n return (\n (isPostgrestHasMorePaginationResponse(previousPageData) &&\n !previousPageData.data.length) ||\n (isPostgrestPaginationResponse(previousPageData) &&\n !previousPageData.length)\n );\n}\n\nfunction getLastItem<Result>(\n data: (\n | PostgrestHasMorePaginationResponse<Result>\n | PostgrestPaginationResponse<Result>\n )[],\n): Result | null {\n if (isPostgrestHasMorePaginationResponse(data)) {\n return data.data.length\n ? (data.data[data.data.length - 1] as Result)\n : null;\n } else if (isPostgrestPaginationResponse(data)) {\n return data.length ? (data[data.length - 1] as Result) : null;\n }\n return null;\n}\n","import { parseOrderBy as core } from '@supabase-cache-helpers/postgrest-core';\n\nexport function parseOrderBy(\n searchParams: URLSearchParams,\n {\n orderByPath,\n uqOrderByPath,\n }: { orderByPath: string; uqOrderByPath?: string },\n) {\n const orderByDef = core(searchParams);\n const orderBy = orderByDef.find((o) => o.column === orderByPath);\n\n if (!orderBy) {\n throw new Error(`No ordering key found for path ${orderByPath}`);\n }\n\n const uqOrderBy = uqOrderByPath\n ? orderByDef.find((o) => o.column === uqOrderByPath)\n : null;\n\n return {\n orderBy,\n uqOrderBy,\n };\n}\n","import type { Key } from 'swr';\n\nimport {\n INFINITE_KEY_PREFIX,\n INFINITE_PREFIX,\n KEY_PREFIX,\n KEY_SEPARATOR,\n} from './constants';\nimport type { DecodedSWRKey } from './types';\n\nexport const decode = (key: Key): DecodedSWRKey | null => {\n if (typeof key !== 'string') return null;\n\n const isInfinite = key.startsWith(INFINITE_PREFIX);\n let parsedKey = key.replace(INFINITE_PREFIX, '');\n\n // Exit early if not a postgrest key\n const isPostgrestKey = parsedKey.startsWith(`${KEY_PREFIX}${KEY_SEPARATOR}`);\n if (!isPostgrestKey) {\n return null;\n }\n parsedKey = parsedKey.replace(`${KEY_PREFIX}${KEY_SEPARATOR}`, '');\n\n const [\n pagePrefix,\n schema,\n table,\n queryKey,\n bodyKey,\n count,\n head,\n orderByKey,\n ] = parsedKey.split(KEY_SEPARATOR);\n\n const params = new URLSearchParams(queryKey);\n const limit = params.get('limit');\n const offset = params.get('offset');\n\n const countValue = count.replace('count=', '');\n\n return {\n limit: limit ? Number(limit) : undefined,\n offset: offset ? Number(offset) : undefined,\n bodyKey,\n count: countValue === 'null' ? null : countValue,\n isHead: head === 'head=true',\n isInfinite,\n key,\n isInfiniteKey: pagePrefix === INFINITE_KEY_PREFIX,\n queryKey,\n schema,\n table,\n orderByKey,\n };\n};\n","import type { PostgrestParser } from '@supabase-cache-helpers/postgrest-core';\n\nimport { INFINITE_KEY_PREFIX, KEY_PREFIX, KEY_SEPARATOR } from './constants';\n\nexport const encode = <Result>(\n parser: PostgrestParser<Result>,\n isInfinite: boolean,\n) => {\n return [\n KEY_PREFIX,\n isInfinite ? INFINITE_KEY_PREFIX : 'null',\n parser.schema,\n parser.table,\n parser.queryKey,\n parser.bodyKey ?? 'null',\n `count=${parser.count}`,\n `head=${parser.isHead}`,\n parser.orderByKey,\n ].join(KEY_SEPARATOR);\n};\n","import {\n PostgrestParser,\n isPostgrestBuilder,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n SWRInfiniteConfiguration,\n SWRInfiniteFetcher,\n SWRInfiniteHook,\n SWRInfiniteKeyLoader,\n} from 'swr/infinite';\n\nimport { encode } from './encode';\n\nexport const infiniteMiddleware = <Result>(\n useSWRInfiniteNext: SWRInfiniteHook,\n) => {\n return (\n keyFn: SWRInfiniteKeyLoader,\n fetcher: SWRInfiniteFetcher,\n config: SWRInfiniteConfiguration,\n ) => {\n return useSWRInfiniteNext(\n (index, previousPageData) => {\n // todo use type guard\n const query = keyFn(index, previousPageData);\n if (!query) return null;\n if (!isPostgrestBuilder<Result>(query)) {\n throw new Error('Key is not a PostgrestBuilder');\n }\n\n return encode(new PostgrestParser<Result>(query), true);\n },\n typeof fetcher === 'function' ? (query) => fetcher(query) : fetcher,\n config,\n );\n };\n};\n","import {\n PostgrestFilter,\n type PostgrestQueryParserOptions,\n encodeObject,\n} from '@supabase-cache-helpers/postgrest-core';\nimport { useSWRConfig } from 'swr';\n\nimport { KEY_SEPARATOR, POSTGREST_FILTER_KEY_PREFIX } from './constants';\n\nexport const usePostgrestFilterCache = <\n R extends Record<string, unknown>,\n>() => {\n const { cache } = useSWRConfig();\n\n return (query: string, opts?: PostgrestQueryParserOptions) => {\n const key = [\n POSTGREST_FILTER_KEY_PREFIX,\n query,\n opts ? encodeObject(opts) : null,\n ]\n .filter(Boolean)\n .join(KEY_SEPARATOR);\n const cacheData = cache.get(key);\n if (cacheData && cacheData.data instanceof PostgrestFilter) {\n return cacheData.data;\n }\n const filter = PostgrestFilter.fromQuery(query, opts);\n cache.set(key, { data: filter });\n return filter as PostgrestFilter<R>;\n };\n};\n","import type { BuildNormalizedQueryOps } from '@supabase-cache-helpers/postgrest-core';\nimport { useSWRConfig } from 'swr';\n\nimport { decode } from './decode';\nimport { usePostgrestFilterCache } from './use-postgrest-filter-cache';\n\nexport const useQueriesForTableLoader = (table: string) => {\n const { cache } = useSWRConfig();\n const getPostgrestFilter = usePostgrestFilterCache();\n\n return () =>\n Array.from(cache.keys()).reduce<\n ReturnType<BuildNormalizedQueryOps['queriesForTable']>\n >((prev, curr) => {\n const decodedKey = decode(curr);\n if (decodedKey?.table === table) {\n prev.push(getPostgrestFilter(decodedKey.queryKey).params);\n }\n return prev;\n }, []);\n};\n","import { decode } from './decode';\n\nexport const getMutableKeys = (keys: string[]) => {\n return keys.filter((k) => {\n const decoded = decode(k);\n return decoded && (decoded.isInfinite || !decoded.isInfiniteKey);\n });\n};\n","import {\n type MutateItemOperation,\n mutateItem,\n} from '@supabase-cache-helpers/postgrest-core';\nimport { flatten } from 'flat';\nimport { type MutatorOptions, useSWRConfig } from 'swr';\n\nimport { decode, usePostgrestFilterCache } from '../lib';\nimport { getMutableKeys } from '../lib/mutable-keys';\n\n/**\n * Returns a function that can be used to mutate an item by primary key(s) in the SWR cache.\n * This hook does not make any HTTP requests and is intended to be used for custom cache updates.\n *\n * @param opts - Options for the mutate operation, excluding the input and the mutate function.\n *\n * @returns A function that takes a record that should contain a value for all primary keys of `Type` as well as a mutate function and returns a promise that resolves once the record has been upserted into the cache.\n * **/\nexport function useMutateItem<Type extends Record<string, unknown>>(\n opts: Omit<MutateItemOperation<Type>, 'input' | 'mutate'> &\n MutatorOptions<Type>,\n): (input: Partial<Type>, mutateFn: (current: Type) => Type) => Promise<void> {\n const { mutate, cache } = useSWRConfig();\n const getPostgrestFilter = usePostgrestFilterCache();\n\n return async (input: Partial<Type>, mutateFn: (current: Type) => Type) =>\n await mutateItem<string, Type>(\n {\n input: flatten(input) as Partial<Type>,\n mutate: mutateFn,\n ...opts,\n },\n {\n cacheKeys: getMutableKeys(Array.from(cache.keys())),\n getPostgrestFilter,\n revalidate: (key) => {\n mutate(key);\n },\n mutate: (key, data) => {\n mutate(key, data, {\n ...opts,\n revalidate: opts?.revalidate ?? false,\n });\n },\n decode,\n },\n );\n}\n","import {\n type RevalidateTablesOperation,\n revalidateTables,\n} from '@supabase-cache-helpers/postgrest-core';\nimport { useSWRConfig } from 'swr';\n\nimport { decode } from '../lib';\nimport { getMutableKeys } from '../lib/mutable-keys';\n\n/**\n * Returns a function that can be used to revalidate all queries in the cache that match the tables provided in the `RevalidateTablesOperation`\n * This hook does not make any HTTP requests and is intended to be used for custom cache revalidations.\n *\n * @param tables - The tables to revalidate\n *\n * @returns A function that will revalidate all defined tables when called.\n * **/\nexport function useRevalidateTables(\n tables: RevalidateTablesOperation,\n): () => Promise<void> {\n const { mutate, cache } = useSWRConfig();\n\n return async () =>\n await revalidateTables<string>(tables, {\n cacheKeys: getMutableKeys(Array.from(cache.keys())),\n revalidate: (key) => {\n mutate(key);\n },\n decode,\n });\n}\n","import {\n type UpsertItemOperation,\n upsertItem,\n} from '@supabase-cache-helpers/postgrest-core';\nimport { flatten } from 'flat';\nimport { type MutatorOptions, useSWRConfig } from 'swr';\n\nimport { decode, usePostgrestFilterCache } from '../lib';\nimport { getMutableKeys } from '../lib/mutable-keys';\n\n/**\n * Returns a function that can be used to upsert an item into the SWR cache.\n * This hook does not make any HTTP requests and is intended to be used for custom cache updates.\n *\n * @param opts - Options for the upsert operation, excluding the input record.\n *\n * @returns A function that takes a record of type `Type` and returns a promise that resolves once the record has been upserted into the cache.\n * **/\nexport function useUpsertItem<Type extends Record<string, unknown>>(\n opts: Omit<UpsertItemOperation<Type>, 'input'> & MutatorOptions<Type>,\n): (input: Type) => Promise<void> {\n const { mutate, cache } = useSWRConfig();\n const getPostgrestFilter = usePostgrestFilterCache();\n\n return async (input: Type) =>\n await upsertItem<string, Type>(\n {\n input: flatten(input) as Type,\n ...opts,\n },\n {\n cacheKeys: getMutableKeys(Array.from(cache.keys())),\n getPostgrestFilter,\n revalidate: (key) => {\n mutate(key);\n },\n mutate: (key, data) => {\n mutate(key, data, {\n ...opts,\n revalidate: opts?.revalidate ?? false,\n });\n },\n decode,\n },\n );\n}\n","import {\n buildDeleteFetcher,\n getTable,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestError,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\nimport useMutation, { type SWRMutationResponse } from 'swr/mutation';\n\nimport { useDeleteItem } from '../cache';\nimport { useQueriesForTableLoader } from '../lib';\nimport type { UsePostgrestSWRMutationOpts } from './types';\nimport { useRandomKey } from './use-random-key';\n\n/**\n * Hook for performing a DELETE mutation on a PostgREST resource.\n *\n * @param qb - The PostgrestQueryBuilder instance for the resource.\n * @param primaryKeys - An array of primary key column names for the table.\n * @param query - An optional query string.\n * @param opts - An optional object of options to configure the mutation.\n * @returns A SWRMutationResponse object containing the mutation response data, error, and mutation function.\n */\nfunction useDeleteManyMutation<\n S extends GenericSchema,\n T extends GenericTable,\n RelationName extends string,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q>,\n>(\n qb: PostgrestQueryBuilder<S, T, RelationName, Re>,\n primaryKeys: (keyof T['Row'])[],\n query?: Q | null,\n opts?: UsePostgrestSWRMutationOpts<\n 'DeleteMany',\n S,\n T,\n RelationName,\n Re,\n Q,\n R\n >,\n): SWRMutationResponse<\n R[] | null,\n PostgrestError,\n string,\n Partial<T['Row']>[]\n> {\n const key = useRandomKey();\n const queriesForTable = useQueriesForTableLoader(getTable(qb));\n const deleteItem = useDeleteItem({\n ...opts,\n primaryKeys,\n table: getTable(qb),\n schema: qb.schema as string,\n });\n\n return useMutation<R[] | null, PostgrestError, string, Partial<T['Row']>[]>(\n key,\n async (_, { arg }) => {\n const result = await buildDeleteFetcher<S, T, RelationName, Re, Q, R>(\n qb,\n primaryKeys,\n {\n query: query ?? undefined,\n queriesForTable,\n disabled: opts?.disableAutoQuery,\n ...opts,\n },\n )(arg);\n\n if (result) {\n for (const r of result) {\n deleteItem(r.normalizedData as T['Row']);\n }\n }\n\n if (!result || result.every((r) => !r.userQueryData)) return null;\n\n return result.map((r) => r.userQueryData as R);\n },\n opts,\n );\n}\n\nexport { useDeleteManyMutation };\n","import { useId } from 'react';\n\nimport { KEY_SEPARATOR } from '../lib';\n\nconst PREFIX = 'random-mutation-key';\n\nexport const useRandomKey = () => {\n const key = useId();\n\n return [PREFIX, key].join(KEY_SEPARATOR);\n};\n","import {\n buildDeleteFetcher,\n getTable,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestError,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\nimport useMutation, { type SWRMutationResponse } from 'swr/mutation';\n\nimport { useDeleteItem } from '../cache';\nimport { useQueriesForTableLoader } from '../lib';\nimport type { UsePostgrestSWRMutationOpts } from './types';\nimport { useRandomKey } from './use-random-key';\n\n/**\n * Hook for performing a DELETE mutation on a PostgREST resource.\n *\n * @param qb - The PostgrestQueryBuilder instance for the resource.\n * @param primaryKeys - An array of primary key column names for the table.\n * @param query - An optional query string.\n * @param opts - An optional object of options to configure the mutation.\n * @returns A SWRMutationResponse object containing the mutation response data, error, and mutation function.\n */\nfunction useDeleteMutation<\n S extends GenericSchema,\n T extends GenericTable,\n RelationName extends string,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q>,\n>(\n qb: PostgrestQueryBuilder<S, T, RelationName, Re>,\n primaryKeys: (keyof T['Row'])[],\n query?: Q | null,\n opts?: UsePostgrestSWRMutationOpts<'DeleteOne', S, T, RelationName, Re, Q, R>,\n): SWRMutationResponse<R | null, PostgrestError, string, Partial<T['Row']>> {\n const key = useRandomKey();\n const queriesForTable = useQueriesForTableLoader(getTable(qb));\n const deleteItem = useDeleteItem({\n ...opts,\n primaryKeys,\n table: getTable(qb),\n schema: qb.schema as string,\n });\n\n return useMutation<R | null, PostgrestError, string, Partial<T['Row']>>(\n key,\n async (_, { arg }) => {\n const r = await buildDeleteFetcher<S, T, RelationName, Re, Q, R>(\n qb,\n primaryKeys,\n {\n query: query ?? undefined,\n queriesForTable,\n disabled: opts?.disableAutoQuery,\n ...opts,\n },\n )([arg]);\n\n if (!r || r.length === 0) return null;\n\n const result = r[0];\n\n if (result) {\n deleteItem(result.normalizedData as Partial<T['Row']>);\n }\n\n return result.userQueryData as R;\n },\n opts,\n );\n}\n\nexport { useDeleteMutation };\n","import {\n buildInsertFetcher,\n getTable,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestError,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\nimport useMutation, { type SWRMutationResponse } from 'swr/mutation';\n\nimport { useUpsertItem } from '../cache';\nimport { useQueriesForTableLoader } from '../lib';\nimport { getUserResponse } from './get-user-response';\nimport type { UsePostgrestSWRMutationOpts } from './types';\nimport { useRandomKey } from './use-random-key';\n\n/**\n * Hook for performing an INSERT mutation on a PostgREST resource.\n *\n * @param qb - The PostgrestQueryBuilder instance for the resource.\n * @param primaryKeys - An array of primary key column names for the table.\n * @param query - An optional query string.\n * @param opts - An optional object of options to configure the mutation.\n * @returns A SWRMutationResponse object containing the mutation response data, error, and mutation function.\n */\nfunction useInsertMutation<\n S extends GenericSchema,\n T extends GenericTable,\n RelationName extends string,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q>,\n>(\n qb: PostgrestQueryBuilder<S, T, RelationName, Re>,\n primaryKeys: (keyof T['Row'])[],\n query?: Q | null,\n opts?: UsePostgrestSWRMutationOpts<'Insert', S, T, RelationName, Re, Q, R>,\n): SWRMutationResponse<R[] | null, PostgrestError, string, T['Insert'][]> {\n const key = useRandomKey();\n const queriesForTable = useQueriesForTableLoader(getTable(qb));\n const upsertItem = useUpsertItem({\n ...opts,\n primaryKeys,\n table: getTable(qb),\n schema: qb.schema as string,\n });\n\n return useMutation<R[] | null, PostgrestError, string, T['Insert'][]>(\n key,\n async (_, { arg }) => {\n const result = await buildInsertFetcher<S, T, RelationName, Re, Q, R>(\n qb,\n {\n query: query ?? undefined,\n queriesForTable,\n disabled: opts?.disableAutoQuery,\n ...opts,\n },\n )(arg);\n\n if (result) {\n Promise.all(\n (result ?? []).map(\n async (d) => await upsertItem(d.normalizedData as T['Row']),\n ),\n );\n }\n\n return getUserResponse(result);\n },\n opts,\n );\n}\n\nexport { useInsertMutation };\n","import type { MutationFetcherResponse } from '@supabase-cache-helpers/postgrest-core';\n\ntype Truthy<T> = T extends false | '' | 0 | null | undefined ? never : T; // from lodash\n\nexport function truthy<T>(value: T): value is Truthy<T> {\n return !!value;\n}\n\nexport const getUserResponse = <R>(d: MutationFetcherResponse<R>[] | null) => {\n if (!d) return d;\n return d.map((r) => r.userQueryData).filter(truthy);\n};\n","import {\n buildUpdateFetcher,\n getTable,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestError,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\nimport useSWRMutation, { type SWRMutationResponse } from 'swr/mutation';\n\nimport { useUpsertItem } from '../cache';\nimport { useQueriesForTableLoader } from '../lib';\nimport type { UsePostgrestSWRMutationOpts } from './types';\nimport { useRandomKey } from './use-random-key';\n\n/**\n * Hook for performing an UPDATE mutation on a PostgREST resource.\n *\n * @param qb - The PostgrestQueryBuilder instance for the resource.\n * @param primaryKeys - An array of primary key column names for the table.\n * @param query - An optional query string.\n * @param opts - An optional object of options to configure the mutation.\n * @returns A SWRMutationResponse object containing the mutation response data, error, and mutation function.\n */\nfunction useUpdateMutation<\n S extends GenericSchema,\n T extends GenericTable,\n RelationName extends string,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q>,\n>(\n qb: PostgrestQueryBuilder<S, T, RelationName, Re>,\n primaryKeys: (keyof T['Row'])[],\n query?: Q | null,\n opts?: UsePostgrestSWRMutationOpts<'UpdateOne', S, T, RelationName, Re, Q, R>,\n): SWRMutationResponse<R | null, PostgrestError, string, T['Update']> {\n const key = useRandomKey();\n const queriesForTable = useQueriesForTableLoader(getTable(qb));\n const upsertItem = useUpsertItem({\n ...opts,\n primaryKeys,\n table: getTable(qb),\n schema: qb.schema as string,\n });\n\n return useSWRMutation<R | null, PostgrestError, string, T['Update']>(\n key,\n async (_, { arg }) => {\n const result = await buildUpdateFetcher<S, T, RelationName, Re, Q, R>(\n qb,\n primaryKeys,\n {\n query: query ?? undefined,\n queriesForTable,\n disabled: opts?.disableAutoQuery,\n ...opts,\n },\n )(arg);\n\n if (result?.normalizedData) {\n upsertItem(result?.normalizedData as T['Row']);\n }\n return result?.userQueryData ?? null;\n },\n opts,\n );\n}\n\nexport { useUpdateMutation };\n","import {\n buildUpsertFetcher,\n getTable,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestError,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\nimport useMutation, { type SWRMutationResponse } from 'swr/mutation';\n\nimport { useUpsertItem } from '../cache';\nimport { useQueriesForTableLoader } from '../lib';\nimport { getUserResponse } from './get-user-response';\nimport type { UsePostgrestSWRMutationOpts } from './types';\nimport { useRandomKey } from './use-random-key';\n\n/**\n * Hook for performing an UPSERT mutation on a PostgREST resource.\n *\n * @param qb - The PostgrestQueryBuilder instance for the resource.\n * @param primaryKeys - An array of primary key column names for the table.\n * @param query - An optional query string.\n * @param opts - An optional object of options to configure the mutation.\n * @returns A SWRMutationResponse object containing the mutation response data, error, and mutation function.\n */\nfunction useUpsertMutation<\n S extends GenericSchema,\n T extends GenericTable,\n RelationName extends string,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q>,\n>(\n qb: PostgrestQueryBuilder<S, T, RelationName, Re>,\n primaryKeys: (keyof T['Row'])[],\n query?: Q | null,\n opts?: UsePostgrestSWRMutationOpts<'Upsert', S, T, RelationName, Re, Q, R>,\n): SWRMutationResponse<R[] | null, PostgrestError, string, T['Insert'][]> {\n const key = useRandomKey();\n const queriesForTable = useQueriesForTableLoader(getTable(qb));\n const upsertItem = useUpsertItem({\n ...opts,\n primaryKeys,\n table: getTable(qb),\n schema: qb.schema as string,\n });\n\n return useMutation<R[] | null, PostgrestError, string, T['Insert'][]>(\n key,\n async (_, { arg }) => {\n const result = await buildUpsertFetcher<S, T, RelationName, Re, Q, R>(\n qb,\n {\n query: query ?? undefined,\n queriesForTable,\n disabled: opts?.disableAutoQuery,\n ...opts,\n },\n )(arg);\n if (result) {\n Promise.all(\n result.map(\n async (d) => await upsertItem(d.normalizedData as T['Row']),\n ),\n );\n }\n return getUserResponse(result);\n },\n opts,\n );\n}\n\nexport { useUpsertMutation };\n","import {\n type AnyPostgrestResponse,\n PostgrestParser,\n isPostgrestBuilder,\n offsetPaginationFetcher,\n offsetPaginationHasMoreFetcher,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestMaybeSingleResponse,\n PostgrestResponse,\n PostgrestSingleResponse,\n PostgrestTransformBuilder,\n} from '@supabase/postgrest-js';\nimport { GenericSchema } from '@supabase/postgrest-js/dist/cjs/types';\n\nimport { encode } from '../lib';\n\nfunction fetchQueryFallbackData<Result>(\n query: PromiseLike<PostgrestSingleResponse<Result>>,\n): Promise<[string, PostgrestSingleResponse<Result>]>;\n\nfunction fetchQueryFallbackData<Result>(\n query: PromiseLike<PostgrestMaybeSingleResponse<Result>>,\n): Promise<[string, PostgrestMaybeSingleResponse<Result>]>;\n\nfunction fetchQueryFallbackData<Result>(\n query: PromiseLike<PostgrestResponse<Result>>,\n): Promise<[string, PostgrestResponse<Result>]>;\n\nasync function fetchQueryFallbackData<Result>(\n query: PromiseLike<AnyPostgrestResponse<Result>>,\n): Promise<[string, AnyPostgrestResponse<Result>]> {\n if (!isPostgrestBuilder<Result>(query)) {\n throw new Error('Query is not a PostgrestBuilder');\n }\n\n return [\n encode(new PostgrestParser<Result>(query), false),\n await query.throwOnError(),\n ];\n}\n\nasync function fetchOffsetPaginationHasMoreFallbackData<\n Schema extends GenericSchema,\n Table extends Record<string, unknown>,\n Result extends Record<string, unknown>,\n RelationName = unknown,\n Relationships = unknown,\n>(\n query: PostgrestTransformBuilder<\n Schema,\n Table,\n Result[],\n RelationName,\n Relationships\n >,\n pageSize: number,\n): Promise<\n [\n string,\n [\n {\n data: Result[];\n hasMore: boolean;\n },\n ],\n ]\n> {\n return [\n encode(new PostgrestParser<Result[]>(query.range(0, pageSize)), true),\n [\n await offsetPaginationHasMoreFetcher(query, {\n offset: 0,\n limit: pageSize,\n pageSize,\n }),\n ],\n ];\n}\n\nconst fetchOffsetPaginationFallbackData = async <\n Schema extends GenericSchema,\n Table extends Record<string, unknown>,\n Result extends Record<string, unknown>,\n RelationName = unknown,\n Relationships = unknown,\n>(\n query: PostgrestTransformBuilder<\n Schema,\n Table,\n Result[],\n RelationName,\n Relationships\n >,\n pageSize: number,\n): Promise<[string, [Result[]]]> => {\n return [\n encode(new PostgrestParser<Result[]>(query.range(0, pageSize)), true),\n [\n await offsetPaginationFetcher(query, {\n offset: 0,\n limit: pageSize,\n }),\n ],\n ];\n};\n\nexport {\n fetchQueryFallbackData,\n fetchOffsetPaginationHasMoreFallbackData,\n fetchOffsetPaginationFallbackData,\n};\n","import {\n type PostgrestPaginationCacheData,\n type PostgrestPaginationResponse,\n createCursorPaginationFetcher,\n decodeObject,\n isPlainObject,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestError,\n PostgrestTransformBuilder,\n} from '@supabase/postgrest-js';\nimport { GenericSchema } from '@supabase/postgrest-js/dist/cjs/types';\nimport { useCallback, useMemo } from 'react';\nimport type { Middleware } from 'swr';\nimport useSWRInfinite, {\n type SWRInfiniteConfiguration,\n type SWRInfiniteResponse,\n} from 'swr/infinite';\n\nimport { createCursorKeyGetter, decode, infiniteMiddleware } from '../lib';\nimport { parseOrderBy } from '../lib/parse-order-by';\n\nexport type SWRCursorInfiniteScrollPostgrestResponse<Result> = Omit<\n SWRInfiniteResponse<PostgrestPaginationCacheData<Result>, PostgrestError>,\n 'data'\n> & {\n loadMore: null | (() => void);\n data: Result[] | undefined;\n};\n\n/**\n * The return value of useInfiniteScrollQuery hook.\n */\nexport type UseCursorInfiniteScrollQueryReturn<\n Result extends Record<string, unknown>,\n> = Omit<\n SWRInfiniteResponse<PostgrestPaginationResponse<Result>, PostgrestError>,\n 'data'\n> & {\n loadMore: null | (() => void);\n data: Result[] | undefined;\n};\n\nexport type CursorConfig<\n Table extends Record<string, unknown>,\n ColumnName extends string & keyof Table,\n> = {\n // The column to order by\n orderBy: ColumnName;\n // If the `orderBy` column is not unique, you need to provide a second, unique column. This can be the primary key.\n uqOrderBy?: ColumnName;\n // if set, will *not* apply filters to the query but pass them cursor values to the body of the rpc function. Requires the query to be a `.rpc()` call.\n rpcArgs?: { limit: string; orderBy: string; uqOrderBy?: string };\n};\n\n/**\n * A hook that provides infinite scroll capabilities to PostgREST queries using SWR.\n *\n * @param {PostgrestTransformBuilder<Schema, Table, Result[]> | null} query - The PostgREST query.\n * @param {SWRInfiniteConfiguration & { pageSize?: number }} [config] - The SWRInfinite configuration.\n * @returns {UseInfiniteScrollQueryReturn<Result>} - The infinite scroll query result.\n */\nfunction useCursorInfiniteScrollQuery<\n Schema extends GenericSchema,\n Table extends Record<string, unknown>,\n Result extends Record<string, unknown>,\n ColumnName extends string & keyof Table,\n RelationName,\n Relationships = unknown,\n>(\n queryFactory:\n | (() => PostgrestTransformBuilder<\n Schema,\n Table,\n Result[],\n RelationName,\n Relationships\n >)\n | null,\n config: SWRInfiniteConfiguration<\n PostgrestPaginationResponse<Result>,\n PostgrestError\n > &\n CursorConfig<Table, ColumnName>,\n): UseCursorInfiniteScrollQueryReturn<Result> {\n const { data, setSize, size, isValidating, ...rest } = useSWRInfinite<\n PostgrestPaginationResponse<Result>,\n PostgrestError\n >(\n createCursorKeyGetter(queryFactory, config),\n createCursorPaginationFetcher<Schema, Table, Result, string>(queryFactory, {\n decode: (key: string) => {\n if (!queryFactory) {\n throw new Error('No query provided');\n }\n const decodedKey = decode(key);\n if (!decodedKey) {\n throw new Error('Not a SWRPostgrest key');\n }\n\n // extract last value from body key instead\n if (config.rpcArgs) {\n if (decodedKey.bodyKey && decodedKey.bodyKey !== 'null') {\n const body = decodeObject(decodedKey.bodyKey);\n\n const orderBy = body[config.rpcArgs.orderBy];\n const uqOrderBy = config.rpcArgs.uqOrderBy\n ? body[config.rpcArgs.uqOrderBy]\n : undefined;\n\n return {\n orderBy: typeof orderBy === 'string' ? orderBy : undefined,\n uqOrderBy: typeof uqOrderBy === 'string' ? uqOrderBy : undefined,\n };\n } else {\n const sp = new URLSearchParams(decodedKey.queryKey);\n const orderByValue = sp.get(config.rpcArgs.orderBy);\n const uqOrderByValue = config.rpcArgs.uqOrderBy\n ? sp.get(config.rpcArgs.uqOrderBy)\n : undefined;\n return {\n orderBy: orderByValue || undefined,\n uqOrderBy: uqOrderByValue || undefined,\n };\n }\n }\n\n const query = queryFactory();\n\n const { orderBy: mainOrderBy } = parseOrderBy(\n query['url'].searchParams,\n { orderByPath: config.orderBy, uqOrderByPath: config.uqOrderBy },\n );\n\n const searchParams = new URLSearchParams(decodedKey.queryKey);\n\n if (config.uqOrderBy) {\n // the filter is an \"or\" operator\n const possibleFilters = searchParams.getAll('or');\n // find \"ours\"\n const filter = possibleFilters.find(\n (f) =>\n f.includes(`${config.orderBy}.`) &&\n f.includes(`${config.uqOrderBy}.`),\n );\n if (!filter) {\n return {};\n }\n\n // extract values\n // we know the format so this is safe\n const bracketsPart = filter\n .split('and')\n .pop()!\n .match(/\\((.*)\\)\\)/)![1]!\n .replace(/\\s+/g, '');\n const filterParts = bracketsPart.split(',');\n const cursorValue = filterParts[0].split('.').pop()!;\n const uqCursorValue = filterParts[1].split('.').pop()!;\n\n return {\n orderBy: cursorValue,\n uqOrderBy: uqCursorValue,\n };\n } else {\n const filters = searchParams.getAll(config.orderBy);\n // find \"ours\"\n const filter = filters.find((f) =>\n f.startsWith(\n `${config.orderBy}.${mainOrderBy.ascending ? 'gt' : 'lt'}`,\n ),\n );\n\n if (!filter) {\n return {};\n }\n\n // extract values\n // we know the format so this is safe\n const cursorValue = filter.split('.').pop()!;\n\n return {\n orderBy: cursorValue,\n };\n }\n },\n orderBy: config.orderBy,\n uqOrderBy: config.uqOrderBy,\n rpcArgs: config.rpcArgs,\n }),\n {\n ...config,\n use: [\n ...(config?.use ?? []),\n infiniteMiddleware as unknown as Middleware,\n ],\n },\n );\n\n const { flatData, hasLoadMore } = useMemo(() => {\n if (!queryFactory) {\n return { flatData: undefined, hasLoadMore: false };\n }\n\n const query = queryFactory();\n\n const flatData = (data ?? []).flat();\n\n let pageSize;\n if (config.rpcArgs) {\n if (query['method'] === 'GET') {\n pageSize = query['url'].searchParams.get(config.rpcArgs.limit);\n } else {\n pageSize = isPlainObject(query['body'])\n ? query['body'][config.rpcArgs.limit]\n : null;\n }\n } else {\n pageSize = query ? query['url'].searchParams.get('limit') : null;\n }\n\n if (!pageSize) {\n return { flatData: undefined, hasLoadMore: false };\n }\n\n let hasLoadMore =\n !data ||\n (pageSize ? data[data.length - 1].length === Number(pageSize) : true);\n\n return {\n flatData,\n hasLoadMore,\n };\n }, [data, config]);\n\n const loadMoreFn = useCallback(() => setSize(size + 1), [size, setSize]);\n\n return {\n data: flatData,\n size,\n setSize,\n loadMore: hasLoadMore && !isValidating ? loadMoreFn : null,\n isValidating,\n ...rest,\n };\n}\n\nexport { useCursorInfiniteScrollQuery };\n","import {\n createOffsetPaginationFetcher,\n decodeObject,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestError,\n PostgrestResponse,\n PostgrestTransformBuilder,\n} from '@supabase/postgrest-js';\nimport { GenericSchema } from '@supabase/postgrest-js/dist/cjs/types';\nimport type { Middleware } from 'swr';\nimport useSWRInfinite, {\n type SWRInfiniteConfiguration,\n type SWRInfiniteResponse,\n} from 'swr/infinite';\n\nimport { createOffsetKeyGetter, decode, infiniteMiddleware } from '../lib';\n\n/**\n * The return type of the `useInfiniteQuery` hook\n */\nexport type UseOffsetInfiniteQueryReturn<\n Result extends Record<string, unknown>,\n> = SWRInfiniteResponse<\n Exclude<PostgrestResponse<Result>['data'], null>,\n PostgrestError\n>;\n\n/**\n * @deprecated Use UseOffsetInfiniteQueryReturn instead.\n */\nexport type UseInfiniteQueryReturn<Result extends Record<string, unknown>> =\n UseOffsetInfiniteQueryReturn<Result>;\n\n/**\n * A hook to perform an infinite postgrest query\n * @param query The postgrest query builder\n * @param config Optional SWRInfiniteConfiguration options to configure the hook\n * @returns An object containing the query results and other SWR-related properties\n */\nfunction useOffsetInfiniteQuery<\n Schema extends GenericSchema,\n Table extends Record<string, unknown>,\n Result extends Record<string, unknown>,\n RelationName = unknown,\n Relationships = unknown,\n>(\n queryFactory:\n | (() => PostgrestTransformBuilder<\n Schema,\n Table,\n Result[],\n RelationName,\n Relationships\n >)\n | null,\n config?: SWRInfiniteConfiguration<\n Exclude<PostgrestResponse<Result>['data'], null>,\n PostgrestError\n > & {\n pageSize?: number;\n rpcArgs?: { limit: string; offset: string };\n },\n): UseOffsetInfiniteQueryReturn<Result> {\n return useSWRInfinite<\n Exclude<PostgrestResponse<Result>['data'], null>,\n PostgrestError\n >(\n createOffsetKeyGetter(queryFactory, {\n pageSize: config?.pageSize ?? 20,\n rpcArgs: config?.rpcArgs,\n }),\n createOffsetPaginationFetcher(queryFactory, {\n decode: (key: string) => {\n const decodedKey = decode(key);\n if (!decodedKey) {\n throw new Error('Not a SWRPostgrest key');\n }\n\n // extract last value from body key instead\n if (config?.rpcArgs) {\n if (decodedKey.bodyKey && decodedKey.bodyKey !== 'null') {\n const body = decodeObject(decodedKey.bodyKey);\n\n const limit = body[config.rpcArgs.limit];\n const offset = body[config.rpcArgs.offset];\n\n return {\n limit: typeof limit === 'number' ? limit : undefined,\n offset: typeof offset === 'number' ? offset : undefined,\n };\n } else {\n const sp = new URLSearchParams(decodedKey.queryKey);\n const limitValue = sp.get(config.rpcArgs.limit);\n const offsetValue = sp.get(config.rpcArgs.offset);\n return {\n limit: limitValue ? parseInt(limitValue, 10) : undefined,\n offset: offsetValue ? parseInt(offsetValue, 10) : undefined,\n };\n }\n }\n\n return {\n limit: decodedKey.limit,\n offset: decodedKey.offset,\n };\n },\n pageSize: config?.pageSize ?? 20,\n rpcArgs: config?.rpcArgs,\n }),\n {\n ...config,\n use: [\n ...(config?.use ?? []),\n infiniteMiddleware as unknown as Middleware,\n ],\n },\n );\n}\n\nexport { useOffsetInfiniteQuery };\n","import {\n type PostgrestHasMorePaginationCacheData,\n type PostgrestHasMorePaginationResponse,\n createOffsetPaginationHasMoreFetcher,\n decodeObject,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestError,\n PostgrestTransformBuilder,\n} from '@supabase/postgrest-js';\nimport { GenericSchema } from '@supabase/postgrest-js/dist/cjs/types';\nimport { useCallback } from 'react';\nimport type { Middleware } from 'swr';\nimport useSWRInfinite, {\n type SWRInfiniteConfiguration,\n type SWRInfiniteResponse,\n} from 'swr/infinite';\n\nimport { createOffsetKeyGetter, decode, infiniteMiddleware } from '../lib';\n\nexport type SWROffsetInfiniteScrollPostgrestResponse<Result> = Omit<\n SWRInfiniteResponse<\n PostgrestHasMorePaginationCacheData<Result>,\n PostgrestError\n >,\n 'data'\n> & {\n loadMore: null | (() => void);\n data: Result[] | undefined;\n};\n\n/**\n * @deprecated Use SWROffsetInfiniteScrollPostgrestResponse instead.\n */\nexport type SWRInfinityScrollPostgrestResponse<Result> =\n SWROffsetInfiniteScrollPostgrestResponse<Result>;\n\n/**\n * The return value of useInfiniteScrollQuery hook.\n */\nexport type UseOffsetInfiniteScrollQueryReturn<\n Result extends Record<string, unknown>,\n> = Omit<\n SWRInfiniteResponse<\n PostgrestHasMorePaginationResponse<Result>,\n PostgrestError\n >,\n 'data'\n> & {\n loadMore: null | (() => void);\n data: Result[] | undefined;\n};\n\n/**\n * @deprecated Use UseOffsetInfiniteScrollQueryReturn instead.\n */\nexport type UseInfiniteScrollQueryReturn<\n Result extends Record<string, unknown>,\n> = UseOffsetInfiniteScrollQueryReturn<Result>;\n\n/**\n * A hook that provides infinite scroll capabilities to PostgREST queries using SWR.\n *\n * @param {PostgrestTransformBuilder<Schema, Table, Result[]> | null} queryFactory - The PostgREST query.\n * @param {SWRInfiniteConfiguration & { pageSize?: number }} [config] - The SWRInfinite configuration.\n * @returns {UseInfiniteScrollQueryReturn<Result>} - The infinite scroll query result.\n */\nfunction useOffsetInfiniteScrollQuery<\n Schema extends GenericSchema,\n Table extends Record<string, unknown>,\n Result extends Record<string, unknown>,\n RelationName = unknown,\n Relationships = unknown,\n>(\n queryFactory:\n | (() => PostgrestTransformBuilder<\n Schema,\n Table,\n Result[],\n RelationName,\n Relationships\n >)\n | null,\n config?: SWRInfiniteConfiguration<\n PostgrestHasMorePaginationResponse<Result>,\n PostgrestError\n > & {\n pageSize?: number;\n rpcArgs?: { limit: string; offset: string };\n },\n): UseOffsetInfiniteScrollQueryReturn<Result> {\n const { data, setSize, size, isValidating, ...rest } = useSWRInfinite<\n PostgrestHasMorePaginationResponse<Result>,\n PostgrestError\n >(\n createOffsetKeyGetter(queryFactory, {\n pageSize: config?.pageSize ?? 20,\n rpcArgs: config?.rpcArgs,\n }),\n createOffsetPaginationHasMoreFetcher<Schema, Table, Result, string>(\n queryFactory,\n {\n decode: (key: string) => {\n const decodedKey = decode(key);\n if (!decodedKey) {\n throw new Error('Not a SWRPostgrest key');\n }\n\n // extract last value from body key instead\n if (config?.rpcArgs) {\n if (decodedKey.bodyKey && decodedKey.bodyKey !== 'null') {\n const body = decodeObject(decodedKey.bodyKey);\n\n const limit = body[config.rpcArgs.limit];\n const offset = body[config.rpcArgs.offset];\n\n return {\n limit: typeof limit === 'number' ? limit : undefined,\n offset: typeof offset === 'number' ? offset : undefined,\n };\n } else {\n const sp = new URLSearchParams(decodedKey.queryKey);\n const limitValue = sp.get(config.rpcArgs.limit);\n const offsetValue = sp.get(config.rpcArgs.offset);\n return {\n limit: limitValue ? parseInt(limitValue, 10) : undefined,\n offset: offsetValue ? parseInt(offsetValue, 10) : undefined,\n };\n }\n }\n\n return {\n limit: decodedKey.limit,\n offset: decodedKey.offset,\n };\n },\n pageSize: config?.pageSize ?? 20,\n rpcArgs: config?.rpcArgs,\n },\n ),\n {\n ...config,\n use: [\n ...(config?.use ?? []),\n infiniteMiddleware as unknown as Middleware,\n ],\n },\n );\n\n const hasMore =\n Array.isArray(data) && data.length > 0 && data[data.length - 1].hasMore;\n\n const loadMoreFn = useCallback(() => setSize(size + 1), [size, setSize]);\n\n return {\n data: (Array.isArray(data) ? data : []).flatMap((p) => p.data),\n size,\n setSize,\n loadMore: hasMore ? loadMoreFn : null,\n isValidating,\n ...rest,\n };\n}\n\nexport { useOffsetInfiniteScrollQuery };\n","import {\n type PostgrestHasMorePaginationResponse,\n createOffsetPaginationHasMoreFetcher,\n decodeObject,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestError,\n PostgrestTransformBuilder,\n} from '@supabase/postgrest-js';\nimport { GenericSchema } from '@supabase/postgrest-js/dist/cjs/types';\nimport { useCallback, useState } from 'react';\nimport type { Middleware } from 'swr';\nimport useSWRInfinite, {\n type SWRInfiniteConfiguration,\n type SWRInfiniteResponse,\n} from 'swr/infinite';\n\nimport { createOffsetKeyGetter, decode, infiniteMiddleware } from '../lib';\n\nexport type SWRInfiniteOffsetPaginationPostgrestResponse<Result> = Omit<\n SWRInfiniteResponse<\n PostgrestHasMorePaginationResponse<Result>,\n PostgrestError\n >,\n 'data' | 'size' | 'setSize'\n> & {\n pages: SWRInfiniteResponse<Result[], PostgrestError>['data'];\n currentPage: null | Result[];\n pageIndex: number;\n setPage: (idx: number) => void;\n nextPage: null | (() => void);\n previousPage: null | (() => void);\n};\n\n/**\n * @deprecated Use SWROffsetInfinitePaginationPostgrestResponse instead.\n */\nexport type SWRInfinitePaginationPostgrestResponse<Result> =\n SWRInfiniteOffsetPaginationPostgrestResponse<Result>;\n\n/**\n * The return value of the `usePaginationQuery` hook.\n */\nexport type UseInfiniteOffsetPaginationQueryReturn<\n Result extends Record<string, unknown>,\n> = SWRInfiniteOffsetPaginationPostgrestResponse<Result>;\n\n/**\n * @deprecated Use SWROffsetInfinitePaginationPostgrestResponse instead.\n */\nexport type UsePaginationQueryReturn<Result extends Record<string, unknown>> =\n UseInfiniteOffsetPaginationQueryReturn<Result>;\n\n/**\n * A hook for paginating through a PostgREST response.\n *\n * @param query - A PostgREST query builder.\n * @param config - A SWR configuration object.\n * @param config.pageSize - The number of items per page.\n * @returns An object containing the paginated data and various functions to manipulate the pagination state.\n */\nfunction useInfiniteOffsetPaginationQuery<\n Schema extends GenericSchema,\n Table extends Record<string, unknown>,\n Result extends Record<string, unknown>,\n RelationName = unknown,\n Relationships = unknown,\n>(\n queryFactory:\n | (() => PostgrestTransformBuilder<\n Schema,\n Table,\n Result[],\n RelationName,\n Relationships\n >)\n | null,\n config?: SWRInfiniteConfiguration<\n PostgrestHasMorePaginationResponse<Result>,\n PostgrestError\n > & {\n pageSize?: number;\n rpcArgs?: { limit: string; offset: string };\n },\n): UseInfiniteOffsetPaginationQueryReturn<Result> {\n const { data, setSize, size, isValidating, ...rest } = useSWRInfinite<\n PostgrestHasMorePaginationResponse<Result>,\n PostgrestError\n >(\n createOffsetKeyGetter(queryFactory, {\n pageSize: config?.pageSize ?? 20,\n rpcArgs: config?.rpcArgs,\n }),\n createOffsetPaginationHasMoreFetcher<Schema, Table, Result, string>(\n queryFactory,\n {\n decode: (key: string) => {\n const decodedKey = decode(key);\n if (!decodedKey) {\n throw new Error('Not a SWRPostgrest key');\n }\n\n if (config?.rpcArgs) {\n if (decodedKey.bodyKey && decodedKey.bodyKey !== 'null') {\n const body = decodeObject(decodedKey.bodyKey);\n\n const limit = body[config.rpcArgs.limit];\n const offset = body[config.rpcArgs.offset];\n\n return {\n limit: typeof limit === 'number' ? limit : undefined,\n offset: typeof offset === 'number' ? offset : undefined,\n };\n } else {\n const sp = new URLSearchParams(decodedKey.queryKey);\n const limitValue = sp.get(config.rpcArgs.limit);\n const offsetValue = sp.get(config.rpcArgs.offset);\n return {\n limit: limitValue ? parseInt(limitValue, 10) : undefined,\n offset: offsetValue ? parseInt(offsetValue, 10) : undefined,\n };\n }\n }\n\n return {\n limit: decodedKey.limit,\n offset: decodedKey.offset,\n };\n },\n pageSize: config?.pageSize ?? 20,\n rpcArgs: config?.rpcArgs,\n },\n ),\n {\n ...config,\n use: [\n ...(config?.use ?? []),\n infiniteMiddleware as unknown as Middleware,\n ],\n },\n );\n\n const [currentPageIndex, setCurrentPageIndex] = useState(0);\n\n const parsedData = (data ?? []).map((p) => p.data);\n const hasMore =\n Array.isArray(data) && data.length > 0 && data[data.length - 1].hasMore;\n\n const setPage = useCallback(\n (idx: number) => {\n if (idx > size - 1) {\n setSize(idx + 1);\n }\n setCurrentPageIndex(idx);\n },\n [size, setSize, setCurrentPageIndex],\n );\n\n const nextPageFn = useCallback(() => {\n if (currentPageIndex === size - 1) {\n setSize((size) => size + 1);\n }\n setCurrentPageIndex((page) => page + 1);\n }, [currentPageIndex, size, setSize, setCurrentPageIndex]);\n\n const previousPageFn = useCallback(\n () => setCurrentPageIndex((current) => current - 1),\n [setCurrentPageIndex],\n );\n\n return {\n pages: parsedData,\n currentPage: parsedData ? (parsedData[currentPageIndex] ?? []) : [],\n pageIndex: currentPageIndex,\n setPage,\n nextPage:\n !isValidating && (hasMore || currentPageIndex < size - 1)\n ? nextPageFn\n : null,\n previousPage: !isValidating && currentPageIndex > 0 ? previousPageFn : null,\n isValidating,\n ...rest,\n };\n}\n\nexport { useInfiniteOffsetPaginationQuery };\n","import {\n type AnyPostgrestResponse,\n PostgrestParser,\n isPostgrestBuilder,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestError,\n PostgrestMaybeSingleResponse,\n PostgrestResponse,\n PostgrestSingleResponse,\n} from '@supabase/postgrest-js';\nimport useSWR, { type SWRConfiguration, type SWRResponse } from 'swr';\n\nimport { encode } from '../lib';\n\n/**\n * The return type of `useQuery` for `.single()` record results\n */\nexport type UseQuerySingleReturn<Result> = Omit<\n SWRResponse<PostgrestSingleResponse<Result>['data'], PostgrestError>,\n 'mutate'\n> &\n Pick<SWRResponse<PostgrestSingleResponse<Result>, PostgrestError>, 'mutate'> &\n Pick<PostgrestSingleResponse<Result>, 'count'>;\n\n/**\n * The return type of `useQuery` for `.maybeSingle()` queries\n */\nexport type UseQueryMaybeSingleReturn<Result> = Omit<\n SWRResponse<PostgrestMaybeSingleResponse<Result>['data'], PostgrestError>,\n 'mutate'\n> &\n Pick<\n SWRResponse<PostgrestMaybeSingleResponse<Result>, PostgrestError>,\n 'mutate'\n > &\n Pick<PostgrestMaybeSingleResponse<Result>, 'count'>;\n\n/**\n * The default return type of `useQuery` queries\n */\nexport type UseQueryReturn<Result> = Omit<\n SWRResponse<PostgrestResponse<Result>['data'], PostgrestError>,\n 'mutate'\n> &\n Pick<SWRResponse<PostgrestResponse<Result>, PostgrestError>, 'mutate'> &\n Pick<PostgrestResponse<Result>, 'count'>;\n\n/**\n * The return type of `useQuery` for any type of result\n */\nexport type UseQueryAnyReturn<Result> = Omit<\n SWRResponse<AnyPostgrestResponse<Result>['data'], PostgrestError>,\n 'mutate'\n> &\n Pick<SWRResponse<AnyPostgrestResponse<Result>, PostgrestError>, 'mutate'> &\n Pick<AnyPostgrestResponse<Result>, 'count'>;\n\n/**\n * Perform a postgrest query using `useSWR`.\n *\n * @param {PromiseLike<PostgrestSingleResponse<Result>> | null} query - The query to perform\n * @param {SWRConfiguration} [config] - The configuration for `useSWR`\n * @returns {UseQuerySingleReturn<Result>} - The query result\n */\nfunction useQuery<Result>(\n query: PromiseLike<PostgrestSingleResponse<Result>> | null,\n config?: SWRConfiguration<PostgrestSingleResponse<Result>, PostgrestError>,\n): UseQuerySingleReturn<Result>;\n/**\n * Perform a postgrest query using `useSWR`.\n *\n * @param {PromiseLike<PostgrestMaybeSingleResponse<Result>> | null} query - The query to perform\n * @param {SWRConfiguration} [config] - The configuration for `useSWR`\n * @returns {UseQueryMaybeSingleReturn<Result>} - The query result\n */\nfunction useQuery<Result>(\n query: PromiseLike<PostgrestMaybeSingleResponse<Result>> | null,\n config?: SWRConfiguration<\n PostgrestMaybeSingleResponse<Result>,\n PostgrestError\n >,\n): UseQueryMaybeSingleReturn<Result>;\n/**\n * Perform a postgrest query using `useSWR`.\n *\n * @param {PromiseLike<PostgrestResponse<Result>> | null} query - The query to perform\n * @param {SWRConfiguration} [config] - The configuration for `useSWR`\n * @returns {UseQueryReturn<Result>} - The query result\n */\nfunction useQuery<Result>(\n query: PromiseLike<PostgrestResponse<Result>> | null,\n config?: SWRConfiguration<PostgrestResponse<Result>, PostgrestError>,\n): UseQueryReturn<Result>;\n/**\n * Perform a postgrest query using `useSWR`.\n *\n * @param {PromiseLike<AnyPostgrestResponse<Result>> | null} query - The query to perform\n * @param {SWRConfiguration} [config] - The configuration for `useSWR`\n * @returns {UseQueryAnyReturn<Result>} - The query result\n */\nfunction useQuery<Result>(\n query: PromiseLike<AnyPostgrestResponse<Result>> | null,\n config?: SWRConfiguration<AnyPostgrestResponse<Result>, PostgrestError>,\n): UseQueryAnyReturn<Result> {\n const { data, ...rest } = useSWR<\n AnyPostgrestResponse<Result>,\n PostgrestError\n >(\n query,\n async (q) => {\n if (isPostgrestBuilder(q)) {\n q = q.throwOnError();\n }\n return await q;\n },\n {\n ...config,\n use: [\n ...(config?.use ?? []),\n (useSWRNext) => {\n return (key, fetcher, config) => {\n if (!fetcher) throw new Error('No fetcher provided');\n\n if (key !== null && !isPostgrestBuilder<Result>(key)) {\n throw new Error('Key is not a PostgrestBuilder');\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useSWRNext(\n key ? encode(new PostgrestParser<Result>(key), false) : null,\n () => fetcher(key),\n config,\n );\n };\n },\n ],\n },\n );\n\n return { data: data?.data, count: data?.count ?? null, ...rest };\n}\n\nexport { useQuery };\n","import {\n type RevalidateOpts,\n buildNormalizedQuery,\n normalizeResponse,\n} from '@supabase-cache-helpers/postgrest-core';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\nimport {\n REALTIME_LISTEN_TYPES,\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT,\n type RealtimeChannel,\n type RealtimePostgresChangesFilter,\n type RealtimePostgresChangesPayload,\n type SupabaseClient,\n} from '@supabase/supabase-js';\nimport { useEffect, useState } from 'react';\nimport type { MutatorOptions as SWRMutatorOptions } from 'swr';\n\nimport { useDeleteItem, useUpsertItem } from '../cache';\nimport { useQueriesForTableLoader } from '../lib';\n\n/**\n * Options for the useSubscriptionQuery hook.\n */\nexport type UseSubscriptionQueryOpts<\n S extends GenericSchema,\n T extends GenericTable,\n RelationName,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q>,\n> = RevalidateOpts<T['Row']> &\n SWRMutatorOptions & {\n /**\n * A callback that will be called whenever a realtime event occurs for the given channel.\n * The callback will receive the event payload with an additional \"data\" property, which will be\n * the affected row of the event (or a modified version of it, if a select query is provided).\n */\n callback?: (\n event: RealtimePostgresChangesPayload<T['Row']> & { data: T['Row'] | R },\n ) => void | Promise<void>;\n };\n\n/**\n * A hook for subscribing to realtime Postgres events on a given channel.\n *\n * The subscription will automatically update the cache for the specified table in response\n * to incoming Postgres events, and optionally run a user-provided callback function with the\n * event and the updated data.\n *\n * This hook works by creating a Supabase Realtime channel for the specified table and\n * subscribing to Postgres changes on that channel. When an event is received, the hook\n * fetches the updated data from the database (using a `select` query generated from the cache\n * configuration), and then updates the cache accordingly.\n *\n * @param client - The Supabase client instance.\n * @param channelName - The name of the channel to subscribe to.\n * @param filter - The filter object to use when listening for changes.\n * @param primaryKeys - An array of the primary keys for the table being listened to.\n * @param query - An optional PostgREST query to use when selecting data for an event.\n * @param opts - Additional options to pass to the hook.\n * @returns An object containing the RealtimeChannel and the current status of the subscription.\n */\nfunction useSubscriptionQuery<\n S extends GenericSchema,\n T extends GenericTable,\n RelationName extends string,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q>,\n>(\n client: SupabaseClient | null,\n channelName: string,\n filter: Omit<\n RealtimePostgresChangesFilter<`${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.ALL}`>,\n 'table'\n > & {\n table: RelationName;\n },\n primaryKeys: (keyof T['Row'])[],\n query?: Q | null,\n opts?: UseSubscriptionQueryOpts<S, T, RelationName, Re, Q, R>,\n) {\n const [status, setStatus] = useState<string>();\n const [channel, setChannel] = useState<RealtimeChannel>();\n const queriesForTable = useQueriesForTableLoader(filter.table);\n const deleteItem = useDeleteItem({\n ...opts,\n primaryKeys,\n table: filter.table,\n schema: filter.schema,\n });\n const upsertItem = useUpsertItem({\n ...opts,\n primaryKeys,\n table: filter.table,\n schema: filter.schema,\n });\n\n useEffect(() => {\n if (!client) return;\n\n const c = client\n .channel(channelName)\n .on<T['Row']>(\n REALTIME_LISTEN_TYPES.POSTGRES_CHANGES,\n filter,\n async (payload) => {\n let data: T['Row'] | R = payload.new ?? payload.old;\n const selectQuery = buildNormalizedQuery({ queriesForTable, query });\n if (\n payload.eventType !==\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE &&\n selectQuery\n ) {\n const qb = client\n .from(payload.table)\n .select(selectQuery.selectQuery);\n for (const pk of primaryKeys) {\n qb.eq(pk.toString(), data[pk]);\n }\n const res = await qb.single();\n if (res.data) {\n data = normalizeResponse(selectQuery.groupedPaths, res.data) as R;\n }\n }\n\n if (\n payload.eventType ===\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.INSERT ||\n payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.UPDATE\n ) {\n await upsertItem(data as Record<string, unknown>);\n } else if (\n payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE\n ) {\n await deleteItem(payload.old);\n }\n if (opts?.callback) {\n opts.callback({\n ...payload,\n data,\n });\n }\n },\n )\n .subscribe((status: string) => setStatus(status));\n\n setChannel(c);\n\n return () => {\n if (c) c.unsubscribe();\n };\n }, []);\n\n return { channel, status };\n}\n\nexport { useSubscriptionQuery };\n","import type { RevalidateOpts } from '@supabase-cache-helpers/postgrest-core';\nimport { GenericTable } from '@supabase/postgrest-js/dist/cjs/types';\nimport {\n REALTIME_LISTEN_TYPES,\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT,\n type RealtimePostgresChangesFilter,\n type RealtimePostgresChangesPayload,\n type SupabaseClient,\n} from '@supabase/supabase-js';\nimport { useEffect, useState } from 'react';\nimport type { MutatorOptions as SWRMutatorOptions } from 'swr';\n\nimport { useDeleteItem, useUpsertItem } from '../cache';\n\n/**\n * Options for `useSubscription` hook.\n */\nexport type UseSubscriptionOpts<T extends GenericTable> = RevalidateOpts<\n T['Row']\n> &\n SWRMutatorOptions & {\n /**\n * A callback that will be invoked whenever a new change event is received.\n *\n * @param event - The change event payload.\n * @returns Optionally returns a Promise.\n */\n callback?: (\n event: RealtimePostgresChangesPayload<T['Row']>,\n ) => void | Promise<void>;\n };\n\n/**\n * A custom React hook for subscribing to a Supabase Realtime subscription.\n *\n * @param channel - The Realtime subscription channel to listen to.\n * @param filter - The filter to apply on the table. Must include the table name.\n * @param primaryKeys - An array of primary key column names for the table.\n * @param opts - Additional options for the hook.\n * @returns An object containing the subscription status.\n */\nfunction useSubscription<T extends GenericTable>(\n client: SupabaseClient | null,\n channelName: string,\n filter: Omit<\n RealtimePostgresChangesFilter<`${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.ALL}`>,\n 'table'\n > & {\n table: string;\n },\n primaryKeys: (keyof T['Row'])[],\n opts?: UseSubscriptionOpts<T>,\n) {\n const [status, setStatus] = useState<string>();\n const deleteItem = useDeleteItem({\n ...opts,\n primaryKeys,\n table: filter.table,\n schema: filter.schema,\n });\n const upsertItem = useUpsertItem({\n ...opts,\n primaryKeys,\n table: filter.table,\n schema: filter.schema,\n });\n\n useEffect(() => {\n if (!client) return;\n\n const c = client\n .channel(channelName)\n .on<T['Row']>(\n REALTIME_LISTEN_TYPES.POSTGRES_CHANGES,\n filter,\n async (payload) => {\n if (\n payload.eventType ===\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.INSERT ||\n payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.UPDATE\n ) {\n await upsertItem(payload.new);\n } else if (\n payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE\n ) {\n await deleteItem(payload.old);\n }\n if (opts?.callback) {\n opts.callback({\n ...payload,\n });\n }\n },\n )\n .subscribe((status: string) => setStatus(status));\n\n return () => {\n if (c) c.unsubscribe();\n };\n }, []);\n\n return { status };\n}\n\nexport { useSubscription };\n"],"mappings":"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","names":["import_postgrest_core","import_swr","import_postgrest_core","core","import_postgrest_core","import_postgrest_core","import_swr","import_postgrest_core","import_flat","import_swr","import_postgrest_core","import_swr","import_postgrest_core","import_flat","import_swr","import_postgrest_core","deleteItem","useMutation","import_postgrest_core","import_mutation","deleteItem","useMutation","import_postgrest_core","import_mutation","upsertItem","useMutation","import_postgrest_core","import_mutation","upsertItem","useSWRMutation","import_postgrest_core","import_mutation","upsertItem","useMutation","import_postgrest_core","import_postgrest_core","import_react","useSWRInfinite","flatData","hasLoadMore","import_postgrest_core","import_infinite","useSWRInfinite","import_postgrest_core","import_react","import_infinite","useSWRInfinite","import_postgrest_core","import_react","import_infinite","useSWRInfinite","size","import_postgrest_core","import_swr","useSWR","config","import_postgrest_core","import_react","deleteItem","upsertItem","status","import_supabase_js","import_react","deleteItem","upsertItem","status"]}